From cbf7e1dc3dc2e81f1ed589e9a0fc94ece72f88f8 Mon Sep 17 00:00:00 2001 From: Hyeonbeen Park Date: Wed, 17 Dec 2025 11:32:19 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=94=A8Refactor:=20=EA=B3=B5=ED=86=B5?= =?UTF-8?q?=20Child=20=EC=A0=91=EA=B7=BC=20=EA=B6=8C=ED=95=9C=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../child/repository/ChildRepository.java | 11 ++++++ .../RoomConditionQueryServiceImpl.java | 35 +++++++------------ 2 files changed, 24 insertions(+), 22 deletions(-) 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..b1e800c7 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,20 +25,15 @@ 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); - } + 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; } @@ -62,28 +55,26 @@ public RoomConditionResponseDTO.RoomConditionListViewDTO getRoomConditionPage(Lo @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) + ); + } } From 22ca5d12be6a048a2cb0817f62f6fc401dd6183a Mon Sep 17 00:00:00 2001 From: Hyeonbeen Park Date: Wed, 17 Dec 2025 11:33:46 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=A8Refactor:=20=ED=95=9C=EC=A4=84?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RoomConditionQueryServiceImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 b1e800c7..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 @@ -26,7 +26,9 @@ public class RoomConditionQueryServiceImpl implements RoomConditionQueryService @Override public RoomConditionResponseDTO.RoomConditionViewDTO getRoomCondition(Long childId, Parent parent) { validateChildAccess(childId, parent); - RoomCondition roomCondition = roomConditionRepository.findTopByChildIdOrderByCreatedAtDesc(childId).orElseThrow(() -> new RoomConditionException(RoomConditionErrorCode.NOT_FOUND)); + RoomCondition roomCondition = roomConditionRepository.findTopByChildIdOrderByCreatedAtDesc(childId) + .orElseThrow(() -> + new RoomConditionException(RoomConditionErrorCode.NOT_FOUND)); return RoomConditionConverter.toRoomConditionViewDTO(roomCondition); } @@ -40,7 +42,9 @@ public RoomConditionResponseDTO.RoomConditionListViewDTO getRoomConditionPage(Lo 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); } @@ -50,7 +54,8 @@ 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