Skip to content

Conversation

@1224kang
Copy link
Contributor

@1224kang 1224kang commented Jan 9, 2026

Reverts #47

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 제휴 장소 목록 조회 및 지도 기반 탐색 추가
    • 사용자 위치 기반 제휴 정보 상세 조회 기능
    • 좌표 기반 주소 변환 기능 추가
  • 개선

    • 위치 정보를 포함한 장소 검색 개선
    • 카카오 로그인 인증 방식 개선
  • 문서

    • API 문서 업데이트로 새로운 제휴 장소 API 명시

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 9, 2026

Caution

Review failed

The pull request is closed.

Walkthrough

제휴 파트너십 기능을 추가하고, 장소(Place) 정보를 String에서 SavedPlaceInfo 및 Place 엔티티로 리팩토링하며, 지오코더 API를 통한 주소 변환 기능을 도입하고 Kakao OAuth 흐름을 토큰 기반에서 인증 코드 기반으로 변경했습니다.

Changes

Cohort / File(s) 변경 요약
Place 요청/응답 DTO 변경
src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.java, src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java, src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java
PostRequest의 place 필드를 String에서 SavedPlaceInfo로 변경 및 @Schema 주석 추가; GetPostResponse에서 place를 placeName으로 이름 변경; PostListItemResponse에서 String place를 Long placeId로 변경
StudentCouncilPost 매퍼 및 서비스
src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java, src/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.java, src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java
createStudentCouncilPost 메서드 서명에 Place 파라미터 추가; 매퍼의 place 필드 접근을 post.getPlace().getPlaceName()/getPlaceId()로 변경; 서비스에서 placeService.findOrCreatePlace 호출 및 partnershipService.create 자동 실행 추가; Place 필드를 String에서 ManyToOne 관계로 변경
PostImage 및 StudentCouncilPost 저장소
src/main/java/com/campus/campus/domain/councilpost/domain/repository/PostImageRepository.java, src/main/java/com/campus/campus/domain/councilpost/domain/repository/StudentCouncilPostRepository.java
PostImageRepository에 findPartnershipImagesByPlaceIds, findImageUrlsByPost 메서드 추가; StudentCouncilPostRepository에 findByCouncilIdAndPlaceId, findByUserScopeWithCursor, findPinsInBounds 메서드 추가 (복잡한 JPQL 쿼리 포함)
StudentCouncilPost 컨트롤러
src/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostController.java
PARTNERSHIP 포스트 예제 페이로드 업데이트: place를 문자열에서 상세 객체로 변경, thumbnailIcon 및 imageUrls 업데이트
Partnership 엔티티 및 저장소
src/main/java/com/campus/campus/domain/partnership/domain/entity/Partnership.java, src/main/java/com/campus/campus/domain/partnership/domain/entity/PartnershipStatus.java, src/main/java/com/campus/campus/domain/partnership/domain/repository/PartnershipRepository.java
Partnership 엔티티 신규 추가 (Place 및 StudentCouncilPost와의 관계); PartnershipStatus 열거형 추가 (ACTIVE, EXPIRED, SUSPENDED); 저장소에 findActivePartnershipPlaces 메서드 추가
Partnership 서비스
src/main/java/com/campus/campus/domain/partnership/application/service/PartnershipService.java
getPartnershipPlaces, create, findPartnerInBounds, getPartnershipDetail 메서드 포함; 거리 계산, 좋아요 상태 확인, 이미지 URL 조회 기능 제공
Partnership 응답 DTO
src/main/java/com/campus/campus/domain/partnership/application/dto/response/PartnershipPinResponse.java, src/main/java/com/campus/campus/domain/partnership/application/dto/response/PartnershipResponse.java, src/main/java/com/campus/campus/domain/partnership/application/dto/response/PartnershipScrollResponse.java
새로운 응답 DTO 추가: PartnershipPinResponse (postId, placeId, placeName, 좌표), PartnershipResponse (상세 정보), PartnershipScrollResponse (페이지네이션)
Partnership 컨트롤러
src/main/java/com/campus/campus/domain/partnership/presentation/PartnershipController.java, src/main/java/com/campus/campus/domain/partnership/presentation/PartnershipResponseCode.java
/api/partnership 경로 하의 GET /list, /map, /detail 엔드포인트 신규 추가; 응답 코드 정의 (CHECK_PARTNERSHIP_PLACES_SUCCESS, CHECK_ONE_PARTNERSHIP_PLACE_SUCCESS 등)
Place DTO 및 응답
src/main/java/com/campus/campus/domain/place/application/dto/response/SavedPlaceInfo.java, src/main/java/com/campus/campus/domain/place/application/dto/response/geocoder/AddressResponse.java, src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/...
SavedPlaceInfo에서 isLiked, tags 필드 제거; AddressResponse 지오코더 응답 DTO 신규 추가; Partnership 관련 DTO (PartnershipMapResponse, PartnershipMapSummary, PartnershipPlaceSummary, PostImageSummary) 신규 추가
Place 예외 및 유틸
src/main/java/com/campus/campus/domain/place/application/exception/ErrorCode.java, src/main/java/com/campus/campus/domain/place/application/exception/GeoCoderException.java
ErrorCode에 GEOCODER_ERROR 상수 추가; message 필드 추가; GeoCoderException 신규 예외 클래스 추가
Place 매퍼
src/main/java/com/campus/campus/domain/place/application/mapper/PlaceMapper.java
createPlace 서명 변경 (placeName 파라미터 제거); toPartnershipPinResponse, toPartnershipResponse, toStringAddress 메서드 신규 추가; resolveTag 헬퍼 메서드 추가
Place 서비스 및 저장소
src/main/java/com/campus/campus/domain/place/application/service/PlaceService.java, src/main/java/com/campus/campus/domain/place/domain/repository/LikedPlacesRepository.java, src/main/java/com/campus/campus/domain/place/domain/repository/PlaceRepository.java
PlaceService에 geoCoderClient 주입 및 findOrCreatePlace 메서드 추가; search 메서드에 lat/lng 파라미터 추가; LikedPlacesRepository에서 existsByUserIdAndPlace_PlaceKey 제거 및 findLikedPlaceIds, existsByUserAndPlace 메서드 추가; PlaceRepository에 findPartnershipPlacesForMap 메서드 추가
지오코더 클라이언트
src/main/java/com/campus/campus/domain/place/infrastructure/geocoder/GeoCoderClient.java, src/main/java/com/campus/campus/domain/place/infrastructure/naver/NaverDirectionsClient.java
GeoCoderClient 신규 추가 (WebClient 기반 좌표→주소 변환); NaverDirectionsClient 파일 추가 (주석 처리됨)
Place 컨트롤러
src/main/java/com/campus/campus/domain/place/presentation/PlaceController.java, src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java
getPlaceInfo 메서드에 lat/lng 파라미터 추가; getAddress 엔드포인트 신규 추가; PlaceResponseCode에 CHECK_PARTNERSHIP_PLACE_SUCCESS 상수 추가
지오유틸
src/main/java/com/campus/campus/global/util/jwt/GeoUtil.java
Haversine 공식 기반의 거리 계산 유틸 신규 추가 (distanceKm, distanceMeter)
Kakao OAuth 인증
src/main/java/com/campus/campus/domain/user/application/service/KakaoOauthService.java, src/main/java/com/campus/campus/domain/user/presentation/AuthController.java
login 메서드 파라미터를 kakaoAccessToken에서 authorizationCode로 변경; getToken 헬퍼 메서드 추가 (인증 코드→토큰 교환); AuthController의 kakaoLogin 엔드포인트 파라미터 변경 (token → code)
설정 변경
src/main/java/com/campus/campus/global/config/PermitUrlConfig.java, src/main/resources/application-local.yml
getPublicUrl에 "/storage/presigned", "/places", "/api/partnership/list", "/api/partnership/map" 경로 추가; application-local.yml에 map.geocoder.api-key 추가

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Controller as PartnershipController
    participant Service as PartnershipService
    participant PlaceRepo as PlaceRepository
    participant PostImageRepo as PostImageRepository
    participant Mapper as PlaceMapper
    
    User->>Controller: GET /api/partnership/detail (postId, lat, lng)
    Controller->>Service: getPartnershipDetail(postId, userId, userLat, userLng)
    Service->>Service: 거리 계산 (GeoUtil.distanceMeter)
    Service->>PlaceRepo: 좋아요 여부 확인
    Service->>PostImageRepo: findImageUrlsByPost(post)
    Service->>Mapper: toPartnershipResponse(..., imgUrls, distance)
    Mapper-->>Service: PartnershipResponse
    Service-->>Controller: PartnershipResponse
    Controller-->>User: CommonResponse<PartnershipResponse>
Loading
sequenceDiagram
    actor User
    participant Controller as StudentCouncilPostController
    participant Service as StudentCouncilPostService
    participant PlaceService
    participant PartnershipService
    participant Mapper as StudentCouncilPostMapper
    participant PostRepo as StudentCouncilPostRepository
    
    User->>Controller: POST /posts (PostRequest with Place info)
    Controller->>Service: createPost(postRequest, ...)
    Service->>PlaceService: findOrCreatePlace(postRequest)
    PlaceService-->>Service: Place entity
    Service->>PartnershipService: create(post, place)
    PartnershipService-->>Service: Partnership entity
    Service->>Mapper: createStudentCouncilPost(writer, place, dto, ...)
    Mapper-->>Service: StudentCouncilPost
    Service->>PostRepo: save(post)
    PostRepo-->>Service: saved post
    Service-->>Controller: response
    Controller-->>User: CommonResponse
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested labels

✨Feat, 🔄Refactor

Suggested reviewers

  • jjaeroong
  • 1winhyun

Poem

🐰 장소들이 String에서 Place로 변신하고,
제휴 파트너십이 새로이 떠올라,
지오코더가 좌표를 주소로 아름답게 변환하며,
사용자가 지도 위에서 특혜를 찾아
거리 계산으로 가장 가까운 곳을 발견하네! ✨🗺️

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a9494fb and 81b334b.

📒 Files selected for processing (39)
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java
  • src/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.java
  • src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java
  • src/main/java/com/campus/campus/domain/councilpost/domain/repository/PostImageRepository.java
  • src/main/java/com/campus/campus/domain/councilpost/domain/repository/StudentCouncilPostRepository.java
  • src/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostController.java
  • src/main/java/com/campus/campus/domain/partnership/application/dto/response/PartnershipPinResponse.java
  • src/main/java/com/campus/campus/domain/partnership/application/service/PartnershipService.java
  • src/main/java/com/campus/campus/domain/partnership/domain/entity/Partnership.java
  • src/main/java/com/campus/campus/domain/partnership/domain/entity/PartnershipStatus.java
  • src/main/java/com/campus/campus/domain/partnership/domain/repository/PartnershipRepository.java
  • src/main/java/com/campus/campus/domain/partnership/presentation/PartnershipController.java
  • src/main/java/com/campus/campus/domain/partnership/presentation/PartnershipResponseCode.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/SavedPlaceInfo.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/geocoder/AddressResponse.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PartnershipMapResponse.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PartnershipMapSummary.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PartnershipPlaceSummary.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PartnershipResponse.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PartnershipScrollResponse.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PostImageSummary.java
  • src/main/java/com/campus/campus/domain/place/application/exception/ErrorCode.java
  • src/main/java/com/campus/campus/domain/place/application/exception/GeoCoderException.java
  • src/main/java/com/campus/campus/domain/place/application/mapper/PlaceMapper.java
  • src/main/java/com/campus/campus/domain/place/application/service/PlaceService.java
  • src/main/java/com/campus/campus/domain/place/domain/repository/LikedPlacesRepository.java
  • src/main/java/com/campus/campus/domain/place/domain/repository/PlaceRepository.java
  • src/main/java/com/campus/campus/domain/place/infrastructure/geocoder/GeoCoderClient.java
  • src/main/java/com/campus/campus/domain/place/infrastructure/naver/NaverDirectionsClient.java
  • src/main/java/com/campus/campus/domain/place/presentation/PlaceController.java
  • src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java
  • src/main/java/com/campus/campus/domain/user/application/service/KakaoOauthService.java
  • src/main/java/com/campus/campus/domain/user/presentation/AuthController.java
  • src/main/java/com/campus/campus/global/config/PermitUrlConfig.java
  • src/main/java/com/campus/campus/global/util/jwt/GeoUtil.java
  • src/main/resources/application-local.yml

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@1224kang 1224kang closed this Jan 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants