Skip to content

Conversation

@1224kang
Copy link
Contributor

@1224kang 1224kang commented Jan 9, 2026

Reverts #46

Summary by CodeRabbit

릴리스 노트

  • 제휴 장소 기능 제거

    • 제휴 장소 목록, 지도 핀 표시, 상세 조회 기능이 제거되었습니다.
  • 장소 검색 개선

    • 위치 기반 검색에서 키워드 기반 검색으로 변경되었습니다.
  • 카카오 로그인 업데이트

    • 네이티브 앱 방식의 토큰 기반 로그인으로 변경되었습니다.

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

@coderabbitai
Copy link

coderabbitai bot commented Jan 9, 2026

Walkthrough

제휴 기능 전체 제거 및 위치 기반 기능 단순화를 포함한 대규모 리팩토링입니다. 장소 정보를 복잡한 객체에서 문자열로 변경하고, 지오코딩 및 거리 계산 인프라를 제거하며, 카카오 OAuth 흐름을 토큰 기반으로 변경합니다.

Changes

Cohort / File(s) 변경 요약
제휴 도메인 제거
src/main/java/com/campus/campus/domain/partnership/...
Partnership, PartnershipStatus 엔티티 및 관련 저장소, 서비스, 컨트롤러, DTO 전체 삭제 (193줄 서비스, 124줄 컨트롤러, 49줄 엔티티 등)
제휴 관련 DTO 제거
src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/...
PartnershipResponse, PartnershipScrollResponse, PartnershipMapResponse, PartnershipMapSummary, PartnershipPlaceSummary, PostImageSummary 삭제
PostRequest 및 응답 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
place 필드를 SavedPlaceInfo → String으로 변경; placeName을 place로 리네이밍; placeId(Long) → place(String)로 변경
StudentCouncilPost 엔티티 및 매퍼 수정
src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java
src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java
place 필드를 Place 객체 → String으로 변경; createStudentCouncilPost 메서드 서명에서 Place 매개변수 제거
StudentCouncilPostService 단순화
src/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.java
PlaceService, PartnershipService 의존성 제거; 생성/수정 흐름에서 장소 조회/생성 로직 제거
저장소 쿼리 메서드 제거
src/main/java/com/campus/campus/domain/councilpost/domain/repository/PostImageRepository.java
src/main/java/com/campus/campus/domain/councilpost/domain/repository/StudentCouncilPostRepository.java
findPartnershipImagesByPlaceIds, findImageUrlsByPost, findByCouncilIdAndPlaceId, findByUserScopeWithCursor, findPinsInBounds 메서드 제거
PlaceService 및 매퍼 리팩토링
src/main/java/com/campus/campus/domain/place/application/service/PlaceService.java
src/main/java/com/campus/campus/domain/place/application/mapper/PlaceMapper.java
좌표 기반 검색 제거, 키워드 기반 검색으로 변경; GeoCoderClient 의존성 제거; findOrCreatePlace 메서드 제거; 제휴 관련 매핑 메서드 제거
지오코딩 및 방향 인프라 제거
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/global/util/jwt/GeoUtil.java
좌표 ↔ 주소 변환 및 거리 계산 관련 클래스/메서드 전체 삭제
장소 저장소 및 응답코드 수정
src/main/java/com/campus/campus/domain/place/domain/repository/PlaceRepository.java
src/main/java/com/campus/campus/domain/place/domain/repository/LikedPlacesRepository.java
src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java
findPartnershipPlacesForMap 제거; 존재 확인 메서드로 변경; PLACE_SAVE_SUCCESS, CHECK_PARTNERSHIP_PLACE_SUCCESS 응답코드 제거
PlaceController 및 관련 엔드포인트
src/main/java/com/campus/campus/domain/place/presentation/PlaceController.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
lat/lng 파라미터 제거, 키워드만 사용; getAddress 엔드포인트 삭제; GEOCODER_ERROR 응답코드 및 GeoCoderException 삭제
카카오 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 메서드를 code 기반에서 kakaoAccessToken 기반으로 변경; getToken 메서드 제거
설정 및 기타
src/main/java/com/campus/campus/global/config/PermitUrlConfig.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/SavedPlaceInfo.java
src/main/resources/application-local.yml
/api/partnership/\* 엔드포인트 허용 URL에서 제거; AddressResponse 삭제; SavedPlaceInfo 주석 필드 제거; geocoder.api-key 설정 제거

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Suggested labels

♻️ Refactor

Suggested reviewers

  • jjaeroong
  • 1winhyun

Poem

🐰 제휴의 문을 닫고, 좌표의 복잡함을 덜어내니
문자열로 단순해진 장소들, 반가워 하네요
토큰 하나로 가는 로그인의 길,
더 명확하고 가벼워진 코드의 춤을 춥니다 ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.57% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 변경 세트의 주요 내용을 명확하게 나타낸다. PR#46을 되돌리는 것이 주요 변경사항이며, 제목이 이를 정확히 반영한다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

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 merged commit a9494fb into dev Jan 9, 2026
1 of 2 checks passed
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In
@src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java:
- Line 25: The DTO field was renamed from placeName to place in GetPostResponse,
causing a breaking API change; to fix, restore backward compatibility by mapping
the new field to the old JSON name (e.g., annotate the place field with the JSON
property "placeName") or add a legacy accessor getPlaceName() that returns place
so existing clients keep working, and ensure any API versioning or client update
notes are handled accordingly.

In
@src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java:
- Around line 13-14: The enum constant PLACE_SAVE_SUCCESS in PlaceResponseCode
does not reflect its actual use in PlaceController.likePlace() (POST
/like-place); rename the constant to PLACE_LIKE_SUCCESS and update its
declaration and message if needed, then refactor all usages (e.g., references in
PlaceController, tests, and any mappers) to the new symbol to keep names
semantically correct and prevent compilation errors.

In
@src/main/java/com/campus/campus/domain/user/application/service/KakaoOauthService.java:
- Around line 50-51: Add explicit request-parameter validation and optional
explicit error handling: update the controller method that calls
KakaoOauthService.login to accept the token as @RequestParam("token") @NotBlank
String kakaoAccessToken so blank/null tokens are rejected early, and inside
KakaoOauthService.getUserInfo add a try-catch around the Kakao API call to catch
invalid-token/HTTP errors and rethrow a clear domain exception (or map to a
specific error response) so login(String kakaoAccessToken) receives only
validated input and failures from the external API are handled with explicit
error messages.

In @src/main/java/com/campus/campus/global/config/PermitUrlConfig.java:
- Around line 30-33: PermitUrlConfig still exposes "/places/search" while
PlaceController (annotated with @RequestMapping("/places")) remains in the
codebase; either remove the public URL entry or restore the controller/service.
Fix by locating PermitUrlConfig and remove the "/places/search" entry from the
public URLs if PlaceController and its services were intended to be deleted, or
if you intend to keep place functionality, undo the controller removal
(PlaceController) and ensure its service implementations are present and tested,
and add a short comment in PermitUrlConfig explaining why "/places/search" is
exposed to make the intent explicit.
🧹 Nitpick comments (1)
src/main/java/com/campus/campus/domain/user/presentation/AuthController.java (1)

26-32: API 변경 확인 및 입력 검증 권장

엔드포인트가 code 파라미터에서 token 파라미터로 변경되었습니다. 이는 클라이언트에게 중요한 변경사항이며, Swagger 문서에 잘 명시되어 있습니다.

다만, kakaoAccessToken 파라미터에 대한 검증이 없습니다. 빈 문자열이나 유효하지 않은 형식의 토큰이 전달될 수 있으므로, 다음과 같은 검증 추가를 고려해보세요:

♻️ 입력 검증 추가 제안
 @PostMapping("/login/kakao")
 @Operation(summary = "카카오 로그인 (Native App 방식)")
-public CommonResponse<OauthLoginResponse> kakaoLogin(@RequestParam("token") String kakaoAccessToken) {
+public CommonResponse<OauthLoginResponse> kakaoLogin(
+    @RequestParam("token") @NotBlank(message = "카카오 액세스 토큰은 필수입니다") String kakaoAccessToken) {
     OauthLoginResponse response = kakaoOauthService.login(kakaoAccessToken);
     
     return CommonResponse.success(UserResponseCode.LOGIN_SUCCESS, response);
 }

참고: @NotBlank 사용을 위해 jakarta.validation.constraints.NotBlank 임포트가 필요합니다.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d70f613 and e8002ec.

📒 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
💤 Files with no reviewable changes (23)
  • src/main/resources/application-local.yml
  • src/main/java/com/campus/campus/domain/partnership/application/service/PartnershipService.java
  • src/main/java/com/campus/campus/domain/partnership/presentation/PartnershipController.java
  • src/main/java/com/campus/campus/domain/partnership/domain/repository/PartnershipRepository.java
  • src/main/java/com/campus/campus/domain/partnership/domain/entity/PartnershipStatus.java
  • src/main/java/com/campus/campus/domain/place/infrastructure/naver/NaverDirectionsClient.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/infrastructure/geocoder/GeoCoderClient.java
  • src/main/java/com/campus/campus/global/util/jwt/GeoUtil.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/partnership/PartnershipMapResponse.java
  • src/main/java/com/campus/campus/domain/place/application/exception/GeoCoderException.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/PartnershipResponse.java
  • src/main/java/com/campus/campus/domain/councilpost/domain/repository/PostImageRepository.java
  • src/main/java/com/campus/campus/domain/place/application/dto/response/SavedPlaceInfo.java
  • src/main/java/com/campus/campus/domain/councilpost/domain/repository/StudentCouncilPostRepository.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/PartnershipPlaceSummary.java
  • src/main/java/com/campus/campus/domain/partnership/domain/entity/Partnership.java
  • src/main/java/com/campus/campus/domain/partnership/presentation/PartnershipResponseCode.java
  • src/main/java/com/campus/campus/domain/partnership/application/dto/response/PartnershipPinResponse.java
  • src/main/java/com/campus/campus/domain/place/domain/repository/PlaceRepository.java
🧰 Additional context used
🧬 Code graph analysis (5)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java (4)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostListForCouncilResponse.java (1)
  • GetPostListForCouncilResponse (10-32)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetLikedPostResponse.java (1)
  • GetLikedPostResponse (7-23)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetUpcomingEventListForCouncilResponse.java (1)
  • GetUpcomingEventListForCouncilResponse (10-29)
src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetActivePartnershipListForUserResponse.java (1)
  • GetActivePartnershipListForUserResponse (5-18)
src/main/java/com/campus/campus/domain/user/presentation/AuthController.java (2)
src/main/java/com/campus/campus/global/auth/application/dto/KakaoTokenResponse.java (1)
  • KakaoTokenResponse (5-13)
src/main/java/com/campus/campus/global/auth/application/dto/OauthLoginResponse.java (1)
  • OauthLoginResponse (5-33)
src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java (3)
src/main/java/com/campus/campus/domain/place/domain/entity/Place.java (1)
  • Entity (17-57)
src/main/java/com/campus/campus/domain/councilnotice/presentation/NoticeResponseCode.java (1)
  • Getter (10-23)
src/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostResponseCode.java (1)
  • Getter (10-27)
src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.java (2)
src/main/java/com/campus/campus/domain/place/application/dto/response/SavedPlaceInfo.java (1)
  • SavedPlaceInfo (9-36)
src/main/java/com/campus/campus/domain/place/domain/entity/Place.java (1)
  • Entity (17-57)
src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java (1)
src/main/java/com/campus/campus/domain/place/domain/entity/Place.java (1)
  • Entity (17-57)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (15)
src/main/java/com/campus/campus/domain/place/application/exception/ErrorCode.java (1)

12-18: GEOCODER_ERROR 제거는 안전하며 세미콜론 종결 문법도 정상입니다.

코드베이스 전체를 확인한 결과, GEOCODER_ERROR에 대한 참조가 0건이므로 제거로 인한 컴파일 에러는 없습니다. 또한 line 18의 세미콜론(;)은 enum 상수 뒤에 필드 선언(code, status, message)이 오는 구조상 문법적으로 올바릅니다.

src/main/java/com/campus/campus/domain/place/domain/repository/LikedPlacesRepository.java (1)

11-13: 리버트는 완전하고 필요한 변경입니다

코드베이스 검색 결과, findByUserIdAndPlace_PlaceKey 메서드는 PlaceService.java (104줄)에서 실제로 사용되고 있습니다. 이 메서드는 좋아요 여부를 확인하고 엔티티 데이터가 필요한 경우에 사용됩니다. 따라서 이 리버트는 필요하고 완전하며, 코드베이스와 호환됩니다.

참고로 existsByUserIdAndPlace_PlaceKey 메서드는 현재 코드베이스에서 사용되지 않으므로, 필요시 제거하거나 향후 사용을 위해 유지할 수 있습니다.

src/main/java/com/campus/campus/domain/councilpost/presentation/StudentCouncilPostController.java (1)

89-98: Swagger 예제가 단순화된 place 구조와 일치

제휴 게시글 예제가 변경된 DTO 구조와 일치하도록 업데이트되었습니다. place 필드가 복잡한 객체에서 단순 문자열 "OO카페"로 변경되어, PostRequestplace: String 필드 변경사항과 일관성을 유지합니다.

문서가 코드와 동기화되어 있어 좋습니다.

src/main/java/com/campus/campus/domain/councilpost/application/dto/response/PostListItemResponse.java (1)

12-12: 매퍼 구현이 올바르게 되어 있어 추가 확인이 필요하지 않습니다

StudentCouncilPost 엔티티의 place 필드는 이미 String 타입이며, StudentCouncilPostMapper에서 post.getPlace()로 일관되게 매핑되고 있습니다. 모든 관련 응답 DTO(PostListItemResponse, GetPostListForCouncilResponse, GetUpcomingEventListForCouncilResponse, GetActivePartnershipListForUserResponse, GetPostResponse, GetPostForUserResponse, GetLikedPostResponse)에서도 placeString으로 통일되어 있습니다.

src/main/java/com/campus/campus/domain/councilpost/application/dto/request/PostRequest.java (1)

25-25: 문제 없음 - 실제 코드에서 breaking change 확인 불가

place 필드는 현재 코드에서도 String 타입이며, SavedPlaceInfo로의 변경 사항은 발견되지 않습니다:

  • StudentCouncilPost 엔티티는 항상 String place 필드만 가짐
  • PostRequest는 항상 String place를 수용함
  • SavedPlaceInfo별도의 place 도메인 모듈에서만 사용되며, 위치 검색 기능에 특화
  • StudentCouncilPostPlace 엔티티 간의 관계는 존재하지 않음

제휴 정보나 상세 장소 데이터(placeKey, coordinate, address, category)가 필요한 경우 별도로 처리해야 하지만, 이는 place 필드의 타입 변경과는 무관합니다.

src/main/java/com/campus/campus/domain/place/presentation/PlaceController.java (1)

29-34: LGTM!

API가 키워드 기반 검색으로 단순화되었습니다. 서비스 레이어의 PlaceService.search(keyword) 시그니처와 일관성 있게 변경되었습니다.

src/main/java/com/campus/campus/domain/councilpost/application/service/StudentCouncilPostService.java (2)

68-70: LGTM!

Place 엔티티 의존성이 제거되고 dto.place()에서 직접 String 값을 사용하도록 변경되었습니다. 매퍼와 엔티티 변경사항과 일관성 있게 수정되었습니다.


206-215: LGTM!

update 메서드 호출이 String place 파라미터를 받도록 변경된 엔티티 시그니처와 일치합니다.

src/main/java/com/campus/campus/domain/councilpost/domain/entity/StudentCouncilPost.java (2)

58-80: LGTM!

update 메서드가 String place 파라미터를 받도록 올바르게 수정되었으며, 내부 할당 로직도 일관성 있게 변경되었습니다.


48-48: Place 필드의 데이터 구조 변경 확인

place 필드가 엔티티 연관관계에서 단순 문자열로 변경되었습니다. 현재 프로젝트는 Hibernate ddl-auto: update 설정을 사용하므로 스키마는 자동으로 업데이트됩니다. 다만 이 변경으로 인해 원래 Place 엔티티가 제공하던 구조화된 정보(placeKey, placeCategory, phone, address 등)를 직접 활용할 수 없게 되었습니다. 장소 정보의 세분화가 필요하다면 설계 재검토를 권장합니다.

src/main/java/com/campus/campus/domain/place/application/service/PlaceService.java (2)

59-93: LGTM!

검색 메서드가 키워드 기반으로 단순화되었습니다. 지오코딩 의존성이 제거되고 네이버 맵 클라이언트를 직접 호출하도록 변경되었습니다.


119-120: LGTM!

placeMapper.createPlace(placeInfo, placeName) 호출이 PlaceMapper의 새로운 시그니처와 일치합니다.

src/main/java/com/campus/campus/domain/councilpost/application/mapper/StudentCouncilPostMapper.java (2)

29-40: LGTM!

post.getPlace()가 이제 String을 반환하므로 응답 매핑이 올바르게 업데이트되었습니다.


143-156: LGTM!

createStudentCouncilPost 시그니처에서 Place 파라미터가 제거되었고, dto.place()를 통해 String 값을 직접 사용합니다. 엔티티 및 서비스 레이어 변경사항과 일관성 있습니다.

src/main/java/com/campus/campus/domain/place/application/mapper/PlaceMapper.java (1)

38-48: LGTM!

createPlace 메서드가 placeName 파라미터를 별도로 받도록 변경되어, PlaceService에서 HTML 태그가 제거된 정제된 이름을 전달할 수 있습니다. PlaceService.likePlace()의 호출부와 일관성 있게 동작합니다.

String title,
String content,
String placeName,
String place,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Breaking Change: placeName에서 place로 필드명 변경

필드명이 placeName에서 place로 변경되었습니다. 이는 API 응답의 breaking change로, 기존 클라이언트가 placeName 필드를 참조하는 경우 오류가 발생할 수 있습니다.

리버트의 일관성을 위해 필요한 변경이지만, API 버전 관리 또는 클라이언트 업데이트 계획이 있는지 확인하시기 바랍니다.

🤖 Prompt for AI Agents
In
@src/main/java/com/campus/campus/domain/councilpost/application/dto/response/GetPostResponse.java
at line 25, The DTO field was renamed from placeName to place in
GetPostResponse, causing a breaking API change; to fix, restore backward
compatibility by mapping the new field to the old JSON name (e.g., annotate the
place field with the JSON property "placeName") or add a legacy accessor
getPlaceName() that returns place so existing clients keep working, and ensure
any API versioning or client update notes are handled accordingly.

Comment on lines 13 to +14
PLACE_SAVE_SUCCESS(200, HttpStatus.OK, "좋아요 처리가 완료되었습니다."),
PLACE_SEARCH_SUCCESS(200, HttpStatus.OK, "키워드 장소 검색이 성공적으로 완료되었습니다."),
CHECK_PARTNERSHIP_PLACE_SUCCESS(200, HttpStatus.OK, "제휴 장소 조회가 완료되었습니다.");
PLACE_SEARCH_SUCCESS(200, HttpStatus.OK, "키워드 장소 검색이 성공적으로 완료되었습니다.");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check PLACE_SAVE_SUCCESS usage and removed constant references
echo "=== Searching for PLACE_SAVE_SUCCESS usage ==="
rg -n --type=java 'PLACE_SAVE_SUCCESS' 2>/dev/null || echo "No matches found"

echo ""
echo "=== Searching for CHECK_PARTNERSHIP_PLACE_SUCCESS usage ==="
rg -n --type=java 'CHECK_PARTNERSHIP_PLACE_SUCCESS' 2>/dev/null || echo "No matches found"

echo ""
echo "=== Checking PlaceResponseCode.java file content ==="
head -30 src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java

Repository: our-campUS/our-campUS-BE

Length of output: 1101


🏁 Script executed:

#!/bin/bash
# Check PlaceController.java context around line 41
echo "=== PlaceController.java context around line 41 ==="
sed -n '30,50p' src/main/java/com/campus/campus/domain/place/presentation/PlaceController.java

Repository: our-campUS/our-campUS-BE

Length of output: 783


장소 "좋아요" 기능을 위한 enum 상수 이름이 의미론적으로 부적절합니다

PLACE_SAVE_SUCCESS 상수는 실제로는 PlaceController.java의 likePlace() 메서드 (POST /like-place)에서 사용되고 있으므로, enum 이름이 실제 동작과 맞지 않습니다. 상수명은 "장소 저장"을 의미하지만, 메시지와 실제 사용처는 "좋아요 처리"를 나타냅니다.

이 이름 불일치는 코드의 가독성과 유지보수성을 해칩니다. enum 상수를 PLACE_LIKE_SUCCESS와 같이 실제 동작을 반영하는 이름으로 변경하는 것을 권장합니다.

🤖 Prompt for AI Agents
In
@src/main/java/com/campus/campus/domain/place/presentation/PlaceResponseCode.java
around lines 13 - 14, The enum constant PLACE_SAVE_SUCCESS in PlaceResponseCode
does not reflect its actual use in PlaceController.likePlace() (POST
/like-place); rename the constant to PLACE_LIKE_SUCCESS and update its
declaration and message if needed, then refactor all usages (e.g., references in
PlaceController, tests, and any mappers) to the new symbol to keep names
semantically correct and prevent compilation errors.

Comment on lines +50 to +51
public OauthLoginResponse login(String kakaoAccessToken) {
KakaoUserResponse kakaoUser = getUserInfo(kakaoAccessToken);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, locate and examine the KakaoOauthService.java file
find . -name "KakaoOauthService.java" -type f

Repository: our-campUS/our-campUS-BE

Length of output: 156


🏁 Script executed:

# Search for the login method and its full implementation
rg -n "public.*login" --type=java -A 20 src/main/java/com/campus/campus/domain/user/application/service/KakaoOauthService.java

Repository: our-campUS/our-campUS-BE

Length of output: 939


🏁 Script executed:

# Search for all callers of kakaoOauthService.login
rg -n "kakaoOauthService\.login|\.login\(.*Token\)" --type=java -B 2 -A 2

Repository: our-campUS/our-campUS-BE

Length of output: 771


🏁 Script executed:

# Check if there's any input validation in the service or controller
rg -n "kakaoAccessToken|authorizationCode" --type=java -B 3 -A 3 src/main/java/com/campus/campus/domain/user/application/service/

Repository: our-campUS/our-campUS-BE

Length of output: 2451


🏁 Script executed:

# Examine the complete kakaoLogin method in AuthController
rg -n "kakaoLogin|@RequestParam" --type=java -B 5 -A 10 src/main/java/com/campus/campus/domain/user/presentation/AuthController.java

Repository: our-campUS/our-campUS-BE

Length of output: 808


🏁 Script executed:

# Look for validation annotations in the controller
rg -n "@NotBlank|@NotNull|@Valid|@Validated" --type=java src/main/java/com/campus/campus/domain/user/presentation/AuthController.java

Repository: our-campUS/our-campUS-BE

Length of output: 135


🏁 Script executed:

# Search for exception handlers related to OAuth/token
rg -n "ExceptionHandler|Exception|try.*catch" --type=java -B 2 -A 5 src/main/java/com/campus/campus/domain/user/application/service/KakaoOauthService.java

Repository: our-campUS/our-campUS-BE

Length of output: 1606


@RequestParam 파라미터에 입력 검증 추가 권장

Native App 방식의 OAuth 흐름으로 변경되었으며, kakaoAccessToken 파라미터는 현재 명시적 검증 없이 직접 Kakao API 호출에 사용됩니다. 다음을 권장합니다:

  1. AuthController의 파라미터에 검증 추가: @RequestParam("token") @NotBlank String kakaoAccessToken으로 수정하여 null이나 빈 문자열을 사전에 필터링하면 더 명확한 에러 응답이 가능합니다.

  2. 선택사항 - 명시적 에러 처리: getUserInfo 메서드에 try-catch를 추가하여 유효하지 않은 토큰이나 Kakao API 오류에 대해 구체적인 예외 처리를 하는 것이 좋습니다.

현재 구현에서는 Kakao API 호출 시 유효성 검증이 이루어지지만, 입력 검증을 추가하면 더 견고한 API가 됩니다.

🤖 Prompt for AI Agents
In
@src/main/java/com/campus/campus/domain/user/application/service/KakaoOauthService.java
around lines 50 - 51, Add explicit request-parameter validation and optional
explicit error handling: update the controller method that calls
KakaoOauthService.login to accept the token as @RequestParam("token") @NotBlank
String kakaoAccessToken so blank/null tokens are rejected early, and inside
KakaoOauthService.getUserInfo add a try-catch around the Kakao API call to catch
invalid-token/HTTP errors and rethrow a clear domain exception (or map to a
specific error response) so login(String kakaoAccessToken) receives only
validated input and failures from the external API are handled with explicit
error messages.

Comment on lines 30 to +33
"/jwt/token/reissue",
"/managers/login",
"/places/search",
"/storage/presigned",
"/places",
"/api/partnership/list",
"/api/partnership/map"
"/storage/presigned"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for /places endpoint mappings in Java code
echo "=== Checking for /places endpoint ==="
rg -n --type=java '@.*Mapping.*["\x27]/places' -A 2

# Search for partnership-related endpoints
echo "=== Checking for partnership endpoints ==="
rg -n --type=java '@.*Mapping.*["\x27]/api/partnership' -A 2

# Also search more broadly for these endpoints
echo "=== Broader search for /places ==="
rg -n --type=java '/places' | head -20

echo "=== Broader search for partnership ==="
rg -n --type=java '/api/partnership' | head -20

Repository: our-campUS/our-campUS-BE

Length of output: 751


/places 엔드포인트 매핑이 여전히 코드베이스에 존재합니다.

PlaceController.java (라인 23)에서 @RequestMapping("/places") 매핑이 여전히 활성 상태입니다. PermitUrlConfig.java에서 /places/search가 공개 URL 목록에 남아있으면서, 해당 컨트롤러 로직도 함께 제거되지 않았습니다. 제휴 기능 제거가 완전하지 않으므로 PlaceController 및 관련 서비스 로직을 제거하거나, 의도적으로 유지하는 경우 검토 의도를 명확히 해야 합니다.

🤖 Prompt for AI Agents
In @src/main/java/com/campus/campus/global/config/PermitUrlConfig.java around
lines 30 - 33, PermitUrlConfig still exposes "/places/search" while
PlaceController (annotated with @RequestMapping("/places")) remains in the
codebase; either remove the public URL entry or restore the controller/service.
Fix by locating PermitUrlConfig and remove the "/places/search" entry from the
public URLs if PlaceController and its services were intended to be deleted, or
if you intend to keep place functionality, undo the controller removal
(PlaceController) and ensure its service implementations are present and tested,
and add a short comment in PermitUrlConfig explaining why "/places/search" is
exposed to make the intent explicit.

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