diff --git a/src/main/java/final_project/momeasy/domain/child/repository/ChildRepository.java b/src/main/java/final_project/momeasy/domain/child/repository/ChildRepository.java index 969e519f..a01be775 100644 --- a/src/main/java/final_project/momeasy/domain/child/repository/ChildRepository.java +++ b/src/main/java/final_project/momeasy/domain/child/repository/ChildRepository.java @@ -27,4 +27,15 @@ SELECT COUNT(c) > 0 FROM Child c boolean existsByChildIdAndParentId(@Param("childId") Long childId, @Param("parentId") Long parentId); Optional findByHomecam(Homecam homecam); + + @Query(""" + SELECT c FROM Child c + JOIN ParentChild pc ON pc.child.id = c.id + WHERE c.id = :childId + AND pc.parent.id = :parentId + AND c.deletedAt IS NULL + """) + Optional findByIdAndParentId( + @Param("childId") Long childId, + @Param("parentId") Long parentId); } diff --git a/src/main/java/final_project/momeasy/domain/room_condition/service/RoomConditionQueryServiceImpl.java b/src/main/java/final_project/momeasy/domain/room_condition/service/RoomConditionQueryServiceImpl.java index 1a943a17..fb816362 100644 --- a/src/main/java/final_project/momeasy/domain/room_condition/service/RoomConditionQueryServiceImpl.java +++ b/src/main/java/final_project/momeasy/domain/room_condition/service/RoomConditionQueryServiceImpl.java @@ -1,7 +1,5 @@ package final_project.momeasy.domain.room_condition.service; -import final_project.momeasy.domain.child.exception.ChildErrorCode; -import final_project.momeasy.domain.child.exception.ChildException; import final_project.momeasy.domain.child.repository.ChildRepository; import final_project.momeasy.domain.parent.entity.Parent; import final_project.momeasy.domain.room_condition.converter.RoomConditionConverter; @@ -27,27 +25,26 @@ public class RoomConditionQueryServiceImpl implements RoomConditionQueryService @Override public RoomConditionResponseDTO.RoomConditionViewDTO getRoomCondition(Long childId, Parent parent) { - childRepository.findById(childId).orElseThrow(() -> new ChildException(ChildErrorCode.NOT_FOUND)); - if (!childRepository.existsByChildIdAndParentId(childId, parent.getId())) { - throw new RoomConditionException(RoomConditionErrorCode.UNAUTHORIZED_ACCESS); - } - RoomCondition roomCondition = roomConditionRepository.findTopByChildIdOrderByCreatedAtDesc(childId).orElseThrow(() -> new RoomConditionException(RoomConditionErrorCode.NOT_FOUND)); + validateChildAccess(childId, parent); + RoomCondition roomCondition = roomConditionRepository.findTopByChildIdOrderByCreatedAtDesc(childId) + .orElseThrow(() -> + new RoomConditionException(RoomConditionErrorCode.NOT_FOUND)); return RoomConditionConverter.toRoomConditionViewDTO(roomCondition); } @Override public RoomConditionResponseDTO.RoomConditionListViewDTO getRoomConditionPage(Long childId, Long cursor, Integer size, Parent parent) { - childRepository.findById(childId).orElseThrow(() -> new ChildException(ChildErrorCode.NOT_FOUND)); - if (!childRepository.existsByChildIdAndParentId(childId, parent.getId())) { - throw new RoomConditionException(RoomConditionErrorCode.UNAUTHORIZED_ACCESS); - } + validateChildAccess(childId, parent); + if (cursor == 0) { cursor = Long.MAX_VALUE; } Pageable pageable = PageRequest.of(0, size); Slice roomConditionList = roomConditionRepository.findRoomConditionCursorPagination(childId, cursor, pageable); List roomConditions = roomConditionList.toList(); - List roomConditionViewDTOS = roomConditions.stream().map(RoomConditionConverter::toRoomConditionViewDTO).toList(); + List roomConditionViewDTOS = roomConditions.stream() + .map(RoomConditionConverter::toRoomConditionViewDTO) + .toList(); if (roomConditionList.isEmpty()) { throw new RoomConditionException(RoomConditionErrorCode.NOT_FOUND); } @@ -57,33 +54,32 @@ public RoomConditionResponseDTO.RoomConditionListViewDTO getRoomConditionPage(Lo nextCursor = roomConditions.get(roomConditions.size() - 1).getId(); } - return RoomConditionConverter.toRoomConditionListViewDTO(roomConditionViewDTOS, roomConditionList.hasNext(), nextCursor); + return RoomConditionConverter + .toRoomConditionListViewDTO(roomConditionViewDTOS, roomConditionList.hasNext(), nextCursor); } @Override public List getRoomConditionGraphDay1(Long childId, Parent parent) { - childRepository.findById(childId).orElseThrow(() -> new ChildException(ChildErrorCode.NOT_FOUND)); - if (!childRepository.existsByChildIdAndParentId(childId, parent.getId())) { - throw new RoomConditionException(RoomConditionErrorCode.UNAUTHORIZED_ACCESS); - } + validateChildAccess(childId, parent); return roomConditionGraphGenerator.createDay1(childId); } @Override public List getRoomConditionGraphDay3(Long childId, Parent parent) { - childRepository.findById(childId).orElseThrow(() -> new ChildException(ChildErrorCode.NOT_FOUND)); - if (!childRepository.existsByChildIdAndParentId(childId, parent.getId())) { - throw new RoomConditionException(RoomConditionErrorCode.UNAUTHORIZED_ACCESS); - } + validateChildAccess(childId, parent); return roomConditionGraphGenerator.createDay3(childId); } @Override public List getRoomConditionGraphDay7(Long childId, Parent parent) { - childRepository.findById(childId).orElseThrow(() -> new ChildException(ChildErrorCode.NOT_FOUND)); - if (!childRepository.existsByChildIdAndParentId(childId, parent.getId())) { - throw new RoomConditionException(RoomConditionErrorCode.UNAUTHORIZED_ACCESS); - } + validateChildAccess(childId, parent); return roomConditionGraphGenerator.createDay7(childId); } + + private void validateChildAccess(Long childId, Parent parent) { + childRepository.findByIdAndParentId(childId, parent.getId()) + .orElseThrow(() -> + new RoomConditionException(RoomConditionErrorCode.UNAUTHORIZED_ACCESS) + ); + } }