Skip to content

Commit

Permalink
feat(#105): 수정 페이지 호출 API 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
jusung-c committed Nov 18, 2023
1 parent baea901 commit ece55a9
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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();
Expand All @@ -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<Long> 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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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<Long> groupMemberIdList;
HouseworkPeriodType type;
LocalDate localDate;
String weekDate;
String monthDate;
LocalTime endTime;

@Builder
public HouseworkInfoUpdatePageResponse(String title, Long houseworkCategoryId, List<Long> 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<Long> 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<Long> 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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@
import org.springframework.data.jpa.repository.JpaRepository;

public interface HouseworkCategoryRepository extends JpaRepository<HouseworkCategory, Long> {
// 카테고리 이름으로 조회
public HouseworkCategory findHouseworkCategoryByName(String categoryName);
}
Original file line number Diff line number Diff line change
@@ -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("집안일"));
}
}

0 comments on commit ece55a9

Please sign in to comment.