Skip to content

Commit

Permalink
refactor(#69): 코드 리팩토링 - 피드백 반영
Browse files Browse the repository at this point in the history
1. 불필요한 메서드 제거
2. 불필요한 의존성 설정 제거
3. HouseworkInfo Create API 경로 수정
4. 집안일은 모두가 추가할 수 있도록 수정
    - 기존에는 그룹장만 추가할 수 있도록 했었음
5. HouseCategory 조회 로직 추가
6. Create API이므로 return값 필요 없음 -> void
7. HouseworkInfoAdd -> CreateHouseworkInfo 메서드명 변경
  • Loading branch information
jusung-c committed Oct 18, 2023
1 parent 9dbdd44 commit 669263d
Show file tree
Hide file tree
Showing 10 changed files with 37 additions and 185 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,4 @@ public String reissue(Claims claims, String refreshToken) {

return jwtService.generateAccessToken(map, userDetails);
}

public String getEmailWithRTK(String refreshToken) {
RefreshToken findToken = refreshTokenRepository.findById(refreshToken).orElseThrow(() -> {
log.warn(">>>> Token Not Exist : {}", ExceptionMessage.JWT_NOT_EXIST_RTK.getText());
throw new JwtException(ExceptionMessage.JWT_NOT_EXIST_RTK);
});

return findToken.getEmail();
}
}
2 changes: 0 additions & 2 deletions heachi-core/housework-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ dependencies {

implementation 'org.springframework.boot:spring-boot-starter-web' // Spring Web
implementation 'org.springframework.boot:spring-boot-starter-validation' // Bean Validation
implementation 'org.springframework.boot:spring-boot-starter-security' // Spring Security

// Swagger
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0")
Expand All @@ -26,7 +25,6 @@ dependencies {
testCompileOnly project(':heachi-support:logging')
testCompileOnly project(':heachi-domain-mysql')
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}

jib {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package com.heachi.housework.api.controller.housework.info;

import com.heachi.admin.common.exception.ExceptionMessage;
import com.heachi.admin.common.exception.auth.AuthException;
import com.heachi.admin.common.exception.group.member.GroupMemberException;
import com.heachi.admin.common.exception.housework.HouseworkException;
import com.heachi.admin.common.response.JsonResult;
import com.heachi.external.clients.auth.response.UserInfoResponse;
import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoAddRequest;
import com.heachi.housework.api.controller.housework.info.response.HouseworkInfoAddResponse;
import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoCreateRequest;
import com.heachi.housework.api.service.auth.AuthExternalService;
import com.heachi.housework.api.service.housework.info.HouseworkInfoService;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoAddServiceRequest;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoCreateServiceRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
Expand All @@ -23,19 +20,19 @@ public class HouseworkInfoController {
private final HouseworkInfoService houseworkInfoService;
private final AuthExternalService authExternalService;

@PostMapping("/add/{groupId}")
public JsonResult<?> houseworkAdd(
@PostMapping("/{groupId}")
public JsonResult<?> createHouseworkInfo(
@RequestHeader(name = "Authorization") String authorization,
@PathVariable(name = "groupId") Long groupId,
@RequestBody HouseworkInfoAddRequest request
@RequestBody HouseworkInfoCreateRequest request
) {
// Auth 서버로 요청자 인증 요청 - 해당 그룹원인지 판별하고 상태가 ACCEPT인지 확인
try {
UserInfoResponse requestUser = authExternalService.userAuthenticateAndGroupMatch(authorization, groupId);

HouseworkInfoAddResponse addResponse = houseworkInfoService.houseworkAdd(requestUser, HouseworkInfoAddServiceRequest.of(request));
houseworkInfoService.createHouseworkInfo(requestUser, HouseworkInfoCreateServiceRequest.of(request));

return JsonResult.successOf(addResponse);
return JsonResult.successOf("Housework Create Success.");
} catch (AuthException | HouseworkException e) {
return JsonResult.failOf(e.getMessage());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.heachi.housework.api.controller.housework.info.request;

import com.heachi.mysql.define.group.member.GroupMember;
import com.heachi.mysql.define.housework.category.HouseworkCategory;
import com.heachi.mysql.define.housework.info.constant.HouseworkPeriodType;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
Expand All @@ -21,7 +19,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HouseworkInfoAddRequest {
public class HouseworkInfoCreateRequest {
@NotEmpty
private List<Long> groupMemberIdList;

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,33 +1,26 @@
package com.heachi.housework.api.service.housework.info;

import com.heachi.admin.common.exception.ExceptionMessage;
import com.heachi.admin.common.exception.auth.AuthException;
import com.heachi.admin.common.exception.group.member.GroupMemberException;
import com.heachi.admin.common.exception.housework.HouseworkException;
import com.heachi.external.clients.auth.response.UserInfoResponse;
import com.heachi.housework.api.controller.housework.info.response.HouseworkInfoAddResponse;
import com.heachi.housework.api.service.auth.AuthExternalService;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoAddServiceRequest;
import com.heachi.mysql.define.group.info.GroupInfo;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoCreateServiceRequest;
import com.heachi.mysql.define.group.info.repository.GroupInfoRepository;
import com.heachi.mysql.define.group.member.GroupMember;
import com.heachi.mysql.define.group.member.constant.GroupMemberRole;
import com.heachi.mysql.define.group.member.repository.GroupMemberRepository;
import com.heachi.mysql.define.housework.category.HouseworkCategory;
import com.heachi.mysql.define.housework.category.repository.HouseworkCategoryRepository;
import com.heachi.mysql.define.housework.info.HouseworkInfo;
import com.heachi.mysql.define.housework.info.repository.HouseworkInfoRepository;
import com.heachi.mysql.define.housework.member.HouseworkMember;
import com.heachi.mysql.define.housework.member.repository.HouseworkMemberRepository;
import com.heachi.mysql.define.housework.save.HouseworkSave;
import com.heachi.mysql.define.housework.save.repository.HouseworkSaveRepository;
import com.heachi.mysql.define.user.User;
import com.heachi.mysql.define.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.stream.Collectors;

@Slf4j
@Service
@Transactional(readOnly = true)
Expand All @@ -39,21 +32,20 @@ public class HouseworkInfoService {
private final HouseworkInfoRepository houseworkInfoRepository;
private final HouseworkMemberRepository houseworkMemberRepository;
private final GroupMemberRepository groupMemberRepository;
private final HouseworkCategoryRepository houseworkCategoryRepository;

@Transactional
public HouseworkInfoAddResponse houseworkAdd(UserInfoResponse requestUser, HouseworkInfoAddServiceRequest request) {
public void createHouseworkInfo(UserInfoResponse requestUser, HouseworkInfoCreateServiceRequest request) {
try {
// 집안일 추가 권한이 있는 구성원인지 확인
// 그룹장인지 확인. role: GROUP_ADMIN
if (!(requestUser.getRole() == GroupMemberRole.GROUP_ADMIN.name())) {

log.warn(">>>> Housework Add Permission Denied : {}", ExceptionMessage.HOUSEWORK_ADD_PERMISSION_DENIED);
throw new AuthException(ExceptionMessage.HOUSEWORK_ADD_PERMISSION_DENIED);
}
// HOUSEWORK_CATEGORY 조회
HouseworkCategory category = houseworkCategoryRepository.findById(request.getHouseworkCategoryId()).orElseThrow(() -> {
log.warn(">>>> HouseworkCategory Not Found : {}", ExceptionMessage.HOUSEWORK_CATEGORY_NOT_FOUND);
throw new HouseworkException(ExceptionMessage.HOUSEWORK_CATEGORY_NOT_FOUND);
});

// HOUSEWORK_INFO 생성
HouseworkInfo houseworkInfo = HouseworkInfo.builder()
.houseworkCategory(request.getHouseworkCategory())
.houseworkCategory(category)
.title(request.getTitle())
.detail(request.getDetail())
.type(request.getType())
Expand All @@ -63,9 +55,15 @@ public HouseworkInfoAddResponse houseworkAdd(UserInfoResponse requestUser, House
.endTime(request.getEndTime())
.build();

// HOUSEWORK_INFO 저장
HouseworkInfo savedHousework = houseworkInfoRepository.save(houseworkInfo);
log.info(">>>> HouseworkInfo Create: {}", savedHousework);


// 담당자 지정 - HOUSEWORK_MEMBER 생성
for (Long groupMemberId : request.getGroupMemberIdList()) {
GroupMember gm = groupMemberRepository.findById(groupMemberId).orElseThrow(() -> {
log.warn(">>>> GroupMember Not Found : {}", ExceptionMessage.GROUP_MEMBER_NOT_FOUND);
throw new GroupMemberException(ExceptionMessage.GROUP_MEMBER_NOT_FOUND);
});

Expand All @@ -77,48 +75,6 @@ public HouseworkInfoAddResponse houseworkAdd(UserInfoResponse requestUser, House
houseworkMemberRepository.save(hm);
}

// HOUSEWORK_INFO 저장
HouseworkInfo savedHousework = houseworkInfoRepository.save(houseworkInfo);
log.info(">>>> Housework Add: {}", savedHousework);


// 그룹장 정보 조회
User findGroupAdmin = userRepository.findByEmail(requestUser.getEmail()).orElseThrow(() -> {
log.warn(">>>> User Not Found : {}", ExceptionMessage.AUTH_NOT_FOUND);
throw new AuthException(ExceptionMessage.AUTH_NOT_FOUND);
});

// 그룹장 정보로 그룹 조회
GroupInfo findGroupInfo = groupInfoRepository.findByUser(findGroupAdmin).orElseThrow(() -> {
log.warn(">>>> Group Not Found : {}", ExceptionMessage.GROUP_NOT_FOUND);
throw new AuthException(ExceptionMessage.GROUP_NOT_FOUND);
});

// HOUSEWORK_SAVE 저장
HouseworkSave houseworkSave = HouseworkSave.builder()
.groupInfo(findGroupInfo)
.name(savedHousework.getTitle())
.build();
houseworkSaveRepository.save(houseworkSave);

log.info(">>>> HouseworkSave Add: {}", houseworkSave);

// HouseworkAddResponseDTO 반환
return HouseworkInfoAddResponse.builder()
.houseworkMemberIdList(savedHousework.getHouseworkMembers()
.stream()
.map(HouseworkMember::getId)
.collect(Collectors.toList()))
.houseworkCategory(savedHousework.getHouseworkCategory())
.title(savedHousework.getTitle())
.detail(savedHousework.getDetail())
.type(savedHousework.getType())
.dayDate(savedHousework.getDayDate())
.weekDate(savedHousework.getWeekDate())
.monthDate(savedHousework.getMonthDate())
.endTime(savedHousework.getEndTime())
.build();

} catch (RuntimeException e) {
log.warn(">>>> Housework Add Fail : {}", ExceptionMessage.HOUSEWORK_ADD_FAIL);
throw new HouseworkException(ExceptionMessage.HOUSEWORK_ADD_FAIL);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.heachi.housework.api.service.housework.info.request;

import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoAddRequest;
import com.heachi.mysql.define.group.member.GroupMember;
import com.heachi.mysql.define.housework.category.HouseworkCategory;
import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoCreateRequest;
import com.heachi.mysql.define.housework.info.constant.HouseworkPeriodType;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -17,7 +15,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HouseworkInfoAddServiceRequest {
public class HouseworkInfoCreateServiceRequest {
private List<Long> groupMemberIdList;
private Long houseworkCategoryId;
private String title;
Expand All @@ -28,8 +26,8 @@ public class HouseworkInfoAddServiceRequest {
private String monthDate;
private LocalTime endTime;

public static HouseworkInfoAddServiceRequest of(HouseworkInfoAddRequest request) {
return HouseworkInfoAddServiceRequest.builder()
public static HouseworkInfoCreateServiceRequest of(HouseworkInfoCreateRequest request) {
return HouseworkInfoCreateServiceRequest.builder()
.groupMemberIdList(request.getGroupMemberIdList())
.houseworkCategoryId(request.getHouseworkCategoryId())
.title(request.getTitle())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,15 @@
package com.heachi.housework.api.controller.housework.info;

import com.fasterxml.jackson.databind.json.JsonMapper;
import com.heachi.admin.common.exception.ExceptionMessage;
import com.heachi.admin.common.exception.housework.HouseworkException;
import com.heachi.external.clients.auth.response.UserInfoResponse;
import com.heachi.housework.TestConfig;
import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoAddRequest;
import com.heachi.housework.api.controller.housework.info.response.HouseworkInfoAddResponse;
import com.heachi.housework.api.service.housework.info.HouseworkInfoService;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoAddServiceRequest;
import com.heachi.mysql.define.housework.category.HouseworkCategory;
import com.heachi.mysql.define.housework.info.constant.HouseworkPeriodType;
import com.heachi.mysql.define.housework.info.repository.HouseworkInfoRepository;
import com.heachi.mysql.define.housework.member.HouseworkMember;
import com.heachi.mysql.define.user.repository.UserRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import java.util.ArrayList;
import java.util.List;

import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@AutoConfigureMockMvc
@SpringBootTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import com.heachi.admin.common.exception.housework.HouseworkException;
import com.heachi.external.clients.auth.response.UserInfoResponse;
import com.heachi.housework.TestConfig;
import com.heachi.housework.api.controller.housework.info.response.HouseworkInfoAddResponse;
import com.heachi.housework.api.service.housework.info.HouseworkInfoService;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoAddServiceRequest;
import com.heachi.housework.api.service.housework.info.request.HouseworkInfoCreateServiceRequest;
import com.heachi.mysql.define.housework.category.HouseworkCategory;
import com.heachi.mysql.define.housework.info.constant.HouseworkPeriodType;
import com.heachi.mysql.define.housework.info.repository.HouseworkInfoRepository;
Expand Down Expand Up @@ -45,16 +43,13 @@ void tearDown() {
houseworkInfoRepository.deleteAllInBatch();
}

@Test
/* @Test
@DisplayName("집안일 추가 성공 테스트")
void houseworkAddServiceSuccessTest() throws Exception {
// given
HouseworkInfoAddResponse response = generateHouseworkAddResponse();

when(houseworkInfoService.houseworkAdd(any(UserInfoResponse.class), any(HouseworkInfoAddServiceRequest.class)))
.thenReturn(response);
when(houseworkInfoService.createHouseworkInfo(any(UserInfoResponse.class), any(HouseworkInfoCreateServiceRequest.class)))
HouseworkInfoAddResponse addResponseDTO = houseworkInfoService.houseworkAdd(UserInfoResponse.builder().build(), HouseworkInfoAddServiceRequest.builder().build());
HouseworkInfoAddResponse addResponseDTO = houseworkInfoService.createHouseworkInfo(UserInfoResponse.builder().build(), HouseworkInfoCreateServiceRequest.builder().build());
assertEquals(response, addResponseDTO);
}
Expand All @@ -63,31 +58,11 @@ void houseworkAddServiceSuccessTest() throws Exception {
@DisplayName("집안일 추가 실패 테스트")
void houseworkAddServiceFailTest() throws Exception {
// when
when(houseworkInfoService.houseworkAdd(any(UserInfoResponse.class), any(HouseworkInfoAddServiceRequest.class)))
when(houseworkInfoService.createHouseworkInfo(any(UserInfoResponse.class), any(HouseworkInfoCreateServiceRequest.class)))
.thenThrow(HouseworkException.class);
// then
assertThrows(HouseworkException.class, () -> {
houseworkInfoService.houseworkAdd(UserInfoResponse.builder().build(), HouseworkInfoAddServiceRequest.builder().build());
houseworkInfoService.createHouseworkInfo(UserInfoResponse.builder().build(), HouseworkInfoCreateServiceRequest.builder().build());
});
}

public static HouseworkInfoAddResponse generateHouseworkAddResponse() {
List<HouseworkMember> houseworkMembers = new ArrayList<>();
houseworkMembers.add(HouseworkMember.builder().build());

return HouseworkInfoAddResponse.builder()
.houseworkMemberIdList(houseworkMembers
.stream()
.map(HouseworkMember::getId)
.collect(Collectors.toList()))
.houseworkCategory(HouseworkCategory.builder().build())
.title("title")
.detail("detail")
.type(HouseworkPeriodType.HOUSEWORK_PERIOD_WEEK)
.dayDate(null)
.weekDate("0")
.monthDate(null)
.endTime(null)
.build();
}
}*/
}
Loading

0 comments on commit 669263d

Please sign in to comment.