Skip to content

Commit

Permalink
feat: 개개인 장소 조회 api 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
yooooonshine committed Aug 1, 2024
1 parent 9aa2fbe commit 9a24923
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import middle_point_search.backend.common.dto.DataResponse;
import middle_point_search.backend.common.util.MemberLoader;
import middle_point_search.backend.domains.member.domain.Member;
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.PlacesFindResponse;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlacesSaveOrUpdateBySelfRequest;
Expand Down Expand Up @@ -122,7 +124,42 @@ public ResponseEntity<BaseResponse> placesSaveOrUpdateBySelf(@RequestBody Places

@GetMapping
@Operation(
summary = "장소 조회하기",
summary = "개개인 장소 조회하기",
description = """
개개인이 저장한 장소 조회하기.
AccessToken 필요.""",
parameters = {
@Parameter(name = "RoomId", description = "roomId 필요", required = true, in = ParameterIn.HEADER)
},
responses = {
@ApiResponse(
responseCode = "200",
description = "성공"
),
@ApiResponse(
responseCode = "400",
description = "요청 파라미터가 잘 못 되었습니다."
),
@ApiResponse(
responseCode = "401",
description = "인증에 실패하였습니다."
)
}
)
public ResponseEntity<DataResponse<PlaceFindResponse>> placeFind() {
String roomId = memberLoader.getRoomId();
String memberName = memberLoader.getName();

PlaceFindResponse response = placeService.findPlace(roomId, memberName);

return ResponseEntity.ok(DataResponse.from(response));
}


@GetMapping
@Operation(
summary = "개인 장소 조회하기",
description = """
저장된 장소 리스트 조회하기.
Expand All @@ -145,12 +182,12 @@ public ResponseEntity<BaseResponse> placesSaveOrUpdateBySelf(@RequestBody Places
)
}
)
public ResponseEntity<DataResponse<List<PlacesFindResponse>>> placesFind() {
public ResponseEntity<DataResponse<PlacesFindResponse>> placesFind() {
String roomId = memberLoader.getRoomId();

List<PlacesFindResponse> places = placeService.findPlaces(roomId);
PlacesFindResponse response = placeService.findPlaces(roomId);

return ResponseEntity.ok(DataResponse.from(places));
return ResponseEntity.ok(DataResponse.from(response));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import lombok.NoArgsConstructor;
import middle_point_search.backend.domains.member.domain.Member;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceSaveOrUpdateRequest;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceVO;
import middle_point_search.backend.domains.room.domain.Room;

@Entity
Expand Down Expand Up @@ -99,6 +100,17 @@ public static Place from(PlaceSaveOrUpdateRequest placeSaveOrUpdateRequest, Room
return new Place(siDo, siGunGu, roadNameAddress, addressLatitude, addressLongitude, room);
}

public PlaceVO toVO() {
return new PlaceVO(
this.id,
this.siDo,
this.siGunGu,
this.roadNameAddress,
this.addressLatitude,
this.addressLongitude
);
}

private void addRoom(Room room) {
this.room = room;
room.getPlaces().add(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import middle_point_search.backend.domains.place.domain.Place;

public class PlaceDTO {

Expand All @@ -25,9 +24,11 @@ public static class PlaceSaveOrUpdateRequest {
private String siGunGu;
@NotBlank(message = "roadNameAddress는 비어 있을 수 없습니다.")
private String roadNameAddress;
@NotNull @Positive(message = "addreesLat은 양수이어야 합니다.")
@NotNull
@Positive(message = "addreesLat은 양수이어야 합니다.")
private Double addressLat;
@NotNull @Positive(message = "addreesLong은 양수이어야 합니다.")
@NotNull
@Positive(message = "addreesLong은 양수이어야 합니다.")
private Double addressLong;
}

Expand All @@ -40,32 +41,29 @@ public static class PlacesSaveOrUpdateBySelfRequest {
}

@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public static class PlaceFindResponse {

private final Boolean existence;
private final PlaceVO place;
}

@Getter
@AllArgsConstructor
public static class PlacesFindResponse {

private final Boolean existence;
private final List<PlaceVO> places;
}

@Getter
@AllArgsConstructor
public static class PlaceVO {
private final Long placeId;
private final String siDo;
private final String siGunGu;
private final String roadNameAddress;
private final Double addressLat;
private final Double addressLong;

public static PlacesFindResponse from(Place place) {

Long placeId = place.getId();
String siDo = place.getSiDo();
String siGunGu = place.getSiGunGu();
String roadNameAddress = place.getRoadNameAddress();
Double addressLat = place.getAddressLatitude();
Double addressLong = place.getAddressLongitude();

return new PlacesFindResponse(
placeId,
siDo,
siGunGu,
roadNameAddress,
addressLat,
addressLong);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ public interface PlaceRepository extends JpaRepository<Place, Long> {

Optional<Place> findByRoomAndMember(Room room, Member member);

List<Place> findAllByRoom_IdentityNumber(String roomId);
List<Place> findAllByRoom_IdentityNumber(String roomId);

Boolean existsByRoom_IdentityNumber(String roomId);

Boolean existsByRoom_IdentityNumberAndMember_Name(String roomId, String name);

Optional<Place> findByRoom_IdentityNumberAndMember_Name(String roomId, String name);

void deleteAllByRoom_IdentityNumber(String roomId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static middle_point_search.backend.common.exception.errorCode.UserErrorCode.*;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -14,7 +15,9 @@
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.PlaceFindResponse;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceSaveOrUpdateRequest;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlaceVO;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlacesFindResponse;
import middle_point_search.backend.domains.place.dto.PlaceDTO.PlacesSaveOrUpdateBySelfRequest;
import middle_point_search.backend.domains.place.repository.PlaceRepository;
Expand Down Expand Up @@ -91,11 +94,25 @@ private void saveOrUpdatePlacesBySelf(Room room, PlacesSaveOrUpdateBySelfRequest
placeRepository.saveAll(places);
}

//장소 조회
public List<PlacesFindResponse> findPlaces(String roomId) {
//개개인 장소 조회
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));
}

//개인 장소 조회
public PlacesFindResponse findPlaces(String roomId) {

List<Place> places = placeRepository.findAllByRoom_IdentityNumber(roomId);

return places.stream().map(PlacesFindResponse::from).toList();
List<PlaceVO> placeVOs = places.stream()
.map(Place::toVO)
.collect(Collectors.toList());

boolean existence = !placeVOs.isEmpty();
return new PlacesFindResponse(existence, placeVOs);
}

}

0 comments on commit 9a24923

Please sign in to comment.