diff --git a/heachi-core/housework-api/src/main/java/com/heachi/housework/api/controller/housework/info/HouseworkInfoController.java b/heachi-core/housework-api/src/main/java/com/heachi/housework/api/controller/housework/info/HouseworkInfoController.java index 30817367..708731ed 100644 --- a/heachi-core/housework-api/src/main/java/com/heachi/housework/api/controller/housework/info/HouseworkInfoController.java +++ b/heachi-core/housework-api/src/main/java/com/heachi/housework/api/controller/housework/info/HouseworkInfoController.java @@ -8,7 +8,6 @@ import com.heachi.housework.api.service.housework.info.HouseworkInfoService; import com.heachi.housework.api.service.housework.info.request.HouseworkInfoCreateServiceRequest; import com.heachi.housework.api.service.housework.info.request.HouseworkInfoDeleteRequest; -import com.heachi.housework.api.service.housework.todo.request.TodoSelectRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -59,4 +58,15 @@ public JsonResult deleteHouseworkInfo(@RequestHeader(name = "Authorization") } } + + @GetMapping("/update/{groupId}") + public JsonResult updateHouseworkInfo(@RequestHeader(name = "Authorization") String authorization, + @PathVariable(name = "groupId") Long groupId, + @RequestParam(name = "date") LocalDate date, + @RequestParam(name = "todoId") Long todoId) { + // 유저 인증 & 그룹원(ACCEPT)인지 권한 확인 + authExternalService.userAuthenticateAndGroupMatch(authorization, groupId); + + return JsonResult.successOf(houseworkInfoService.updateHouseworkPage(todoId)); + } } diff --git a/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/HouseworkInfoService.java b/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/HouseworkInfoService.java index 6ab30a5c..a2dc581b 100644 --- a/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/HouseworkInfoService.java +++ b/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/HouseworkInfoService.java @@ -9,6 +9,7 @@ import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoDeleteType; import com.heachi.housework.api.service.housework.info.request.HouseworkInfoCreateServiceRequest; import com.heachi.housework.api.service.housework.info.request.HouseworkInfoDeleteRequest; +import com.heachi.housework.api.service.housework.info.response.HouseworkInfoUpdatePageResponse; import com.heachi.mysql.define.group.info.GroupInfo; import com.heachi.mysql.define.group.info.repository.GroupInfoRepository; import com.heachi.mysql.define.group.member.GroupMember; @@ -23,7 +24,6 @@ import com.heachi.mysql.define.housework.todo.HouseworkTodo; import com.heachi.mysql.define.housework.todo.constant.HouseworkTodoStatus; import com.heachi.mysql.define.housework.todo.repository.HouseworkTodoRepository; -import com.heachi.redis.define.housework.todo.TodoList; import com.heachi.redis.define.housework.todo.repository.TodoListRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -33,7 +33,6 @@ import java.time.LocalDate; import java.util.Arrays; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; @Slf4j @@ -107,6 +106,7 @@ public void createHouseworkInfo(HouseworkInfoCreateServiceRequest request) { // HOUSEWORK_INFO 저장 HouseworkInfo houseworkInfo = houseworkInfoRepository.save(HouseworkInfo.builder() + .groupInfo(groupInfo) .houseworkCategory(category) .title(request.getTitle()) .detail(request.getDetail()) @@ -207,8 +207,9 @@ public void deleteHouseworkInfo(HouseworkInfoDeleteRequest request) { case HOUSEWORK_PERIOD_EVERYDAY -> true; case HOUSEWORK_PERIOD_WEEK -> DayOfWeekUtils.equals(houseworkInfo.getWeekDate(), todoList.getDate()); - case HOUSEWORK_PERIOD_MONTH -> Arrays.stream(houseworkInfo.getMonthDate().split(",")) - .anyMatch(d -> Integer.parseInt(d) == todoList.getDate().getDayOfMonth()); + case HOUSEWORK_PERIOD_MONTH -> + Arrays.stream(houseworkInfo.getMonthDate().split(",")) + .anyMatch(d -> Integer.parseInt(d) == todoList.getDate().getDayOfMonth()); }) .forEach(todoList -> { // dirtyBit Checking todoList.checkDirtyBit(); @@ -234,4 +235,31 @@ public void deleteHouseworkInfo(HouseworkInfoDeleteRequest request) { throw e; } } + + public HouseworkInfoUpdatePageResponse updateHouseworkPage(Long todoId) { + // HouseworkTodo 조회 -> HouseworkInfo도 fetch Join 함께 조회 + HouseworkTodo requestTodo = houseworkTodoRepository.findHouseworkTodoByIdJoinFetchHouseworkInfo(todoId).orElseThrow(() -> { + log.warn(">>>> HouseworkTodo Not Found : {}", ExceptionMessage.HOUSEWORK_TODO_NOT_FOUND.getText()); + + return new HouseworkException(ExceptionMessage.HOUSEWORK_TODO_NOT_FOUND); + }); + + HouseworkInfo houseworkInfo = requestTodo.getHouseworkInfo(); + + // 담장자 그룹 멤버 Id 리스트 조회 + List groupMemberIdList = groupMemberRepository.findGroupMemberListByGroupMemberIdList(Arrays.stream(requestTodo.getHouseworkMember().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList())).stream().map(GroupMember::getId).toList(); + + // 단건 집안일의 경우 + if (houseworkInfo == null) { + // 카테고리 조회 + HouseworkCategory category = houseworkCategoryRepository.findHouseworkCategoryByName(requestTodo.getCategory()); + + return HouseworkInfoUpdatePageResponse.of(requestTodo, category, groupMemberIdList); + + } else { // 비단건 집안일의 경우 + return HouseworkInfoUpdatePageResponse.of(houseworkInfo, groupMemberIdList); + } + } } \ No newline at end of file diff --git a/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/response/HouseworkInfoUpdatePageResponse.java b/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/response/HouseworkInfoUpdatePageResponse.java new file mode 100644 index 00000000..5db8c7b8 --- /dev/null +++ b/heachi-core/housework-api/src/main/java/com/heachi/housework/api/service/housework/info/response/HouseworkInfoUpdatePageResponse.java @@ -0,0 +1,67 @@ +package com.heachi.housework.api.service.housework.info.response; + +import com.heachi.housework.api.controller.housework.info.request.HouseworkInfoCreateRequest; +import com.heachi.housework.api.service.housework.category.response.HouseworkCategoryResponse; +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.HouseworkInfo; +import com.heachi.mysql.define.housework.info.constant.HouseworkPeriodType; +import com.heachi.mysql.define.housework.todo.HouseworkTodo; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.List; + +@Getter +@ToString +public class HouseworkInfoUpdatePageResponse { + String title; + Long houseworkCategoryId; + List groupMemberIdList; + HouseworkPeriodType type; + LocalDate localDate; + String weekDate; + String monthDate; + LocalTime endTime; + + @Builder + public HouseworkInfoUpdatePageResponse(String title, Long houseworkCategoryId, List groupMemberIdList, HouseworkPeriodType type, LocalDate localDate, String weekDate, String monthDate, LocalTime endTime) { + this.title = title; + this.houseworkCategoryId = houseworkCategoryId; + this.groupMemberIdList = groupMemberIdList; + this.type = type; + this.localDate = localDate; + this.weekDate = weekDate; + this.monthDate = monthDate; + this.endTime = endTime; + } + + public static HouseworkInfoUpdatePageResponse of(HouseworkTodo todo, HouseworkCategory category, List groupMemberIdList) { + + return HouseworkInfoUpdatePageResponse.builder() + .title(todo.getTitle()) + .houseworkCategoryId(category.getId()) + .groupMemberIdList(groupMemberIdList) + .type(HouseworkPeriodType.HOUSEWORK_PERIOD_DAY) + .localDate(todo.getDate()) + .endTime(todo.getEndTime()) + .build(); + } + + public static HouseworkInfoUpdatePageResponse of(HouseworkInfo info, List groupMemberIdList) { + + return HouseworkInfoUpdatePageResponse.builder() + .title(info.getTitle()) + .houseworkCategoryId(info.getHouseworkCategory().getId()) + .groupMemberIdList(groupMemberIdList) + .type(info.getType()) + .localDate(info.getDayDate()) + .weekDate(info.getWeekDate()) + .monthDate(info.getMonthDate()) + .endTime(info.getEndTime()) + .build(); + } +} \ No newline at end of file diff --git a/heachi-domain-mysql/src/main/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepository.java b/heachi-domain-mysql/src/main/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepository.java index 9e5bd1a9..790090f4 100644 --- a/heachi-domain-mysql/src/main/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepository.java +++ b/heachi-domain-mysql/src/main/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepository.java @@ -4,4 +4,6 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface HouseworkCategoryRepository extends JpaRepository { + // 카테고리 이름으로 조회 + public HouseworkCategory findHouseworkCategoryByName(String categoryName); } diff --git a/heachi-domain-mysql/src/test/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepositoryTest.java b/heachi-domain-mysql/src/test/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepositoryTest.java new file mode 100644 index 00000000..22ca3c44 --- /dev/null +++ b/heachi-domain-mysql/src/test/java/com/heachi/mysql/define/housework/category/repository/HouseworkCategoryRepositoryTest.java @@ -0,0 +1,41 @@ +package com.heachi.mysql.define.housework.category.repository; + +import com.heachi.mysql.TestConfig; +import com.heachi.mysql.define.group.info.repository.GroupInfoRepository; +import com.heachi.mysql.define.group.member.repository.GroupMemberRepository; +import com.heachi.mysql.define.housework.category.HouseworkCategory; +import com.heachi.mysql.define.housework.info.repository.HouseworkInfoRepository; +import com.heachi.mysql.define.housework.member.repository.HouseworkMemberRepository; +import com.heachi.mysql.define.housework.todo.repository.HouseworkTodoRepository; +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.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +class HouseworkCategoryRepositoryTest extends TestConfig { + + @Autowired + private HouseworkCategoryRepository houseworkCategoryRepository; + + @AfterEach + void tearDown() { + houseworkCategoryRepository.deleteAllInBatch(); + } + + + @Test + @DisplayName("카테고리 이름으로 조회 성공 테스트") + void test1() { + // given + HouseworkCategory category = houseworkCategoryRepository.save(generateHouseworkCategory()); + + // when & then + assertThat(houseworkCategoryRepository.findHouseworkCategoryByName(category.getName()).equals("집안일")); + } +} \ No newline at end of file