diff --git a/backend/src/main/java/middle_point_search/backend/domains/place/controller/PlaceController.java b/backend/src/main/java/middle_point_search/backend/domains/place/controller/PlaceController.java index 7a8f9e3..4eb8d71 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/place/controller/PlaceController.java +++ b/backend/src/main/java/middle_point_search/backend/domains/place/controller/PlaceController.java @@ -109,7 +109,9 @@ public ResponseEntity placesSaveOrUpdateBySelf(@RequestBody Places @Operation( summary = "개개인 장소 조회하기", description = """ - 개개인이 저장한 장소 조회하기. + 개개인이 저장한 장소 및 다른 사람들이 저장한 장소들 조회하기. + + 다른 사람들이 저장한 장소(otherPlaces)에는 당사자가 저장한 장소는 포함되지 않는다. AccessToken 필요.""", parameters = { diff --git a/backend/src/main/java/middle_point_search/backend/domains/place/dto/PlaceDTO.java b/backend/src/main/java/middle_point_search/backend/domains/place/dto/PlaceDTO.java index 8ca513b..0693f9c 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/place/dto/PlaceDTO.java +++ b/backend/src/main/java/middle_point_search/backend/domains/place/dto/PlaceDTO.java @@ -44,8 +44,10 @@ public static class PlacesSaveOrUpdateBySelfRequest { @AllArgsConstructor public static class PlaceFindResponse { - private final Boolean existence; - private final PlaceVO place; + private final Boolean myPlaceExistence; + private final PlaceVO myPlace; + private final Boolean otherPlacesExistence; + private final List otherPlaces; } @Getter diff --git a/backend/src/main/java/middle_point_search/backend/domains/place/repository/PlaceRepository.java b/backend/src/main/java/middle_point_search/backend/domains/place/repository/PlaceRepository.java index a49213f..42a5293 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/place/repository/PlaceRepository.java +++ b/backend/src/main/java/middle_point_search/backend/domains/place/repository/PlaceRepository.java @@ -4,7 +4,9 @@ import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import io.lettuce.core.dynamic.annotation.Param; import middle_point_search.backend.domains.member.domain.Member; import middle_point_search.backend.domains.place.domain.Place; import middle_point_search.backend.domains.room.domain.Room; @@ -22,4 +24,7 @@ public interface PlaceRepository extends JpaRepository { Optional findByRoom_IdentityNumberAndMember_Name(String roomId, String name); void deleteAllByRoom_IdentityNumber(String roomId); + + @Query("select p from Place p where p.member.name != :memberName and p.room.identityNumber = :roomId") + List findAllByRoom_IdentityNumberAndMember_Name(@Param(value = "roomId") String roomId ,@Param(value = "memberName") String memberName); } diff --git a/backend/src/main/java/middle_point_search/backend/domains/place/service/PlaceService.java b/backend/src/main/java/middle_point_search/backend/domains/place/service/PlaceService.java index 9fc3d97..2a010e0 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/place/service/PlaceService.java +++ b/backend/src/main/java/middle_point_search/backend/domains/place/service/PlaceService.java @@ -15,6 +15,7 @@ import middle_point_search.backend.domains.member.domain.Role; import middle_point_search.backend.domains.member.service.MemberService; import middle_point_search.backend.domains.place.domain.Place; +import middle_point_search.backend.domains.place.dto.PlaceDTO; import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceFindResponse; import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceSaveOrUpdateRequest; import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceVO; @@ -97,9 +98,23 @@ private void saveOrUpdatePlacesBySelf(Room room, PlacesSaveOrUpdateBySelfRequest //개개인 장소 조회 public PlaceFindResponse findPlace(String roomId, String memberName) { - return placeRepository.findByRoom_IdentityNumberAndMember_Name(roomId, memberName) - .map(place -> new PlaceFindResponse(true, place.toVO())) - .orElseGet(() -> new PlaceFindResponse(false, null)); + //내 장소 조회 + PlaceVO myPlace = placeRepository.findByRoom_IdentityNumberAndMember_Name(roomId, memberName) + .map(Place:: toVO) + .orElse(null); + + //내 장소 존재 유무 + Boolean myPlaceExistence = myPlace != null; + + //다른 사람들 장소 조회 + List otherPlaces = placeRepository.findAllByRoom_IdentityNumberAndMember_Name(roomId, memberName) + .stream().map(Place::toVO) + .toList(); + + //다른 사람들 장소 유무 + boolean otherPlacesExistence = !otherPlaces.isEmpty(); + + return new PlaceDTO.PlaceFindResponse(myPlaceExistence, myPlace, otherPlacesExistence, otherPlaces); } //개인 장소 조회