Skip to content

[Hotfix] 모집중인 방 상세보기 response 수정 및 최근검색어 삭제 스웨거 수정#263

Merged
hd0rable merged 7 commits intodevelopfrom
hotfix/#249-room-api-response-fix
Aug 19, 2025
Merged

[Hotfix] 모집중인 방 상세보기 response 수정 및 최근검색어 삭제 스웨거 수정#263
hd0rable merged 7 commits intodevelopfrom
hotfix/#249-room-api-response-fix

Conversation

@hd0rable
Copy link
Member

@hd0rable hd0rable commented Aug 19, 2025

#️⃣ 연관된 이슈

closes #249
closes #261

📝 작업 내용

  • 모집중인 방 상세보기 조회시 추천 모임을 보내줄때 방이미지가아닌 책이미지가 보내지도록 수정
  • 모집마감된 방이 모집중인 방 상세보기 api 요청이 올때 예외처리 추가
  • 모집중인 방 상세보기 한정 마감일을 보여주는 데이터 포맷을 ~ 남음 으로 수정 추가로 1시간미만은 마감 임박으로 보여주도록 수정
  • 최근검색어 삭제 스웨거에 userId 히든값추가

📸 스크린샷

💬 리뷰 요구사항

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

Summary by CodeRabbit

  • New Features
    • 모집 상세 보기의 추천 항목에 방 이미지 대신 책 이미지가 표시됩니다.
    • 모집 마감 안내가 “n일 남음”, “n시간 남음”, “마감 임박”으로 더 직관적으로 표시됩니다.
    • 오류 안내 강화: 도서 미존재, 모집 기간 만료 상황을 명확히 표시합니다.
  • Documentation
    • 최근 검색 삭제 API에서 사용자 식별자 파라미터를 문서에서 숨겼습니다.

@coderabbitai
Copy link

coderabbitai bot commented Aug 19, 2025

Walkthrough

모집중 방 상세보기 흐름에서 만료 사전검증을 추가하고, 추천 책 목록에 책 표지 이미지(bookImageUrl)를 조회·반영했으며, 응답의 마감일 표시 포맷을 새 유틸 메서드로 교체했습니다. 또한 최근 검색어 삭제 API의 userId 파라미터를 Swagger에서 숨겼고, 해당 상세보기 API의 Swagger 에러코드 목록을 확장했습니다.

Changes

Cohort / File(s) Summary
Swagger 에러코드 확장
src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java
ROOM_RECRUITING_DETAIL_VIEW의 errorCodeList에 BOOK_NOT_FOUND, ROOM_RECRUITMENT_PERIOD_EXPIRED 추가.
최근검색어 Swagger 파라미터 숨김
src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java
deleteRecentSearch의 userId 파라미터에 @Parameter(hidden = true) 추가.
모집중 방 상세 응답/매핑 변경
src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java, src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java
RecommendRoom의 필드명 roomImageUrlbookImageUrl로 변경. 쿼리에 book 조인 및 book.imageUrl 프로젝션 추가, 매핑을 bookImageUrl로 설정.
모집중 방 상세 서비스 로직/포맷 변경
src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java
상세 조회 시 room.validateRoomRecruitExpired() 사전검증 추가. 마감일 포맷터를 DateUtil.RecruitingRoomFormatAfterTime(...) 사용으로 교체.
유틸 추가
src/main/java/konkuk/thip/common/util/DateUtil.java
public static String RecruitingRoomFormatAfterTime(LocalDate date) 추가: 남은 일수/시간/임박/음수(“??”) 포맷 반환.
도메인 경미한 참조 정리
src/main/java/konkuk/thip/room/domain/Room.java
ROOM_RECRUITMENT_PERIOD_EXPIRED 정적 임포트로 참조 방식만 변경(동작 동일).

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Client
  participant Controller as RoomController
  participant Service as RoomShowRecruitingDetailViewService
  participant Repo as RoomQueryRepository
  participant Domain as Room
  participant DB as DB
  participant DTO as Response DTO

  Client->>Controller: GET /rooms/recruiting/{roomId}
  Controller->>Service: getRecruitingRoomDetailView(roomId)
  Service->>Repo: findRoomById(roomId)
  Repo->>DB: SELECT room, book JOIN ...
  DB-->>Repo: room + book.imageUrl
  Repo-->>Service: Room + book.imageUrl
  Service->>Domain: validateRoomRecruitExpired()
  alt 모집기간 만료
    Domain-->>Service: throws ROOM_RECRUITMENT_PERIOD_EXPIRED
    Service-->>Controller: error
    Controller-->>Client: 4xx with error code
  else 모집기간 유효
    Service->>Service: DateUtil.RecruitingRoomFormatAfterTime(startDate)
    Service->>DTO: map bookImageUrl, formatted date
    DTO-->>Controller: RoomRecruitingDetailViewResponse
    Controller-->>Client: 200 OK JSON
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Assessment against linked issues

Objective Addressed Explanation
추천 책 목록에 책 표지 이미지 추가 [#249]
response의 postData 포맷 형식 수정 [#249]
최근 검색어 삭제 API에서 userId Swagger hidden 설정 추가 [#261]

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
ROOM_RECRUITING_DETAIL_VIEW의 Swagger 에러코드 목록에 BOOK_NOT_FOUND, ROOM_RECRUITMENT_PERIOD_EXPIRED 추가 (src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java) 링크된 이슈들(#249, #261)에는 에러코드 확장 요구사항이 명시되어 있지 않음.
모집기간 만료 사전검증 추가 호출(validateRoomRecruitExpired) (src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java) #249는 응답 필드/포맷 수정에 한정되어 있고, 만료 검증 로직 추가는 명시적 요구가 없음. 다만 기능적으로 관련 가능성이 있어 확실치 않음.

Possibly related PRs

Suggested reviewers

  • seongjunnoh
  • buzz0331

Poem

토끼는 깡총, PR을 훑네
책 표지 반짝, URL도 좋네 📚
마감은 임박, 시간은 촉촉 ⏳
숨은 아이디는 살짝쿵 감춰—훗!
버그는 저리 가라, 캐롯은 여기 있다 🥕

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch hotfix/#249-room-api-response-fix

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link

Test Results

411 tests   411 ✅  36s ⏱️
123 suites    0 💤
123 files      0 ❌

Results for commit 0fb64e8.

@hd0rable hd0rable merged commit b474ce6 into develop Aug 19, 2025
4 checks passed
@hd0rable hd0rable deleted the hotfix/#249-room-api-response-fix branch August 19, 2025 06:44
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: 1

🧹 Nitpick comments (5)
src/main/java/konkuk/thip/room/domain/Room.java (1)

138-138: 정적 임포트 전환으로 가독성 향상 (동작 영향 없음)

ROOM_RECRUITMENT_PERIOD_EXPIRED를 정적 임포트로 사용해 예외 생성부 가독성이 좋아졌습니다.

추가 제안:

  • Line 136의 에러 메시지에서 deadlineyyyy.MM.dd와 같은 통일된 포맷으로 표기하면 일관성이 좋아집니다. 예: DateTimeFormatter.ofPattern("yyyy.MM.dd")로 포맷하여 삽입.
src/main/java/konkuk/thip/common/util/DateUtil.java (1)

49-69: 메서드 네이밍(lowerCamelCase)과 만료 문구 개선, 중복 최소화 제안

요구사항 충족(“<시간> 남음”, 1시간 미만 “마감 임박”)은 잘 반영되었습니다. 다만 아래 2점 개선을 권장합니다.

  • 자바 관례상 메서드명은 lowerCamelCase가 바람직합니다. RecruitingRoomFormatAfterTimeformatRecruitingRoomAfterTime.
  • 만료/0초 남음인 경우 "??" 대신 사용자 친화적인 "마감" 반환을 권장합니다.

아래 diff는 본 범위 내에서의 최소 변경안을 제시합니다.

-    public static String RecruitingRoomFormatAfterTime(LocalDate date) {
+    public static String formatRecruitingRoomAfterTime(LocalDate date) {
@@
-        if (d.isNegative() || d.isZero()) {
-            return "??";
+        if (d.isNegative() || d.isZero()) {
+            return "마감";
         }

추가(선택):

  • formatAfterTime과 로직이 유사하므로, 접미사(“뒤”/“남음”)만 바꿔 끼우는 내부 공통 함수를 두면 중복을 줄일 수 있습니다.
src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java (1)

34-39: RecommendRoom의 필드명 변경은 클라이언트 호환성 이슈 가능성

roomImageUrlbookImageUrl로 키 명이 바뀌면, 기존 FE/소비자가 이 필드를 기대할 경우 응답 파싱이 깨질 수 있습니다. 스펙 변경 공지 및 FE 반영 상태를 확인해 주세요. 하위호환이 필요하면 과도기 동안 두 필드를 함께 제공(같은 값 세팅)하거나, 스펙 문서/스웨거에 명확히 표시하는 방안을 고려하세요.

src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java (1)

67-67: DateUtil 메서드 네이밍 변경 시 호출부 반영

위에서 제안한 네이밍 변경(formatRecruitingRoomAfterTime)을 적용한다면, 본 호출부도 함께 수정되어야 합니다.

-                .recruitEndDate(DateUtil.RecruitingRoomFormatAfterTime(room.getStartDate()))
+                .recruitEndDate(DateUtil.formatRecruitingRoomAfterTime(room.getStartDate()))
src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java (1)

196-205: 추천목록 마감 표기 포맷도 신규 유틸로 통일 필요 여부 확인

PR 목표에 따라 상세보기의 마감 표기 포맷을 " 남음" / "마감 임박"으로 변경했다면, 동일 화면에 노출되는 추천 방 목록의 recruitEndDate도 동일 포맷으로 맞추는 것이 일관성 측면에서 바람직합니다. 현재는 DateUtil.formatAfterTime을 사용 중입니다.

필요 시 아래처럼 신규 유틸로 교체하세요:

- .recruitEndDate(DateUtil.formatAfterTime(t.get(room.startDate)))
+ .recruitEndDate(DateUtil.RecruitingRoomFormatAfterTime(t.get(room.startDate)))

추가 참고:

  • t.get(memberCountExpr).intValue()는 값이 매우 큰 경우 오버플로 위험이 있습니다. 안전 캐스팅이 필요하면 Math.toIntExact(...) 사용을 고려하세요.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7967e04 and 0fb64e8.

📒 Files selected for processing (7)
  • src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java (1 hunks)
  • src/main/java/konkuk/thip/common/util/DateUtil.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java (2 hunks)
  • src/main/java/konkuk/thip/room/adapter/in/web/response/RoomRecruitingDetailViewResponse.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java (2 hunks)
  • src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java (2 hunks)
  • src/main/java/konkuk/thip/room/domain/Room.java (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java (1)
src/main/java/konkuk/thip/common/util/DateUtil.java (1)
  • DateUtil (12-85)
⏰ 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 (5)
src/main/java/konkuk/thip/common/swagger/SwaggerResponseDescription.java (1)

87-90: 에러 코드 확장 적절

상세보기 API에 BOOK_NOT_FOUND, ROOM_RECRUITMENT_PERIOD_EXPIRED 추가 합리적입니다. 도메인 예외 흐름과 스웨거 문서가 일치합니다.

src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java (1)

36-37: 만료 사전검증 추가로 빠른 실패 처리 LGTM

상세보기 진입 시 room.validateRoomRecruitExpired()로 빠르게 차단하는 방향이 타당하며, 불필요한 Book/참여자 조회를 줄여 효율적입니다.

※ 참고: BookCommandPort.findById(Long) 구현체는 조회 실패 시 EntityNotFoundException(BOOK_NOT_FOUND)을 던지므로 NPE 위험이 없습니다.

src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java (2)

4-4: Swagger 문서화를 위한 Parameter import 추가 LGTM

Swagger에서 userId 파라미터를 숨기기 위한 적절한 import입니다. 런타임 동작에 영향 없습니다.


29-29: userId Swagger 비노출 처리 적절합니다

@Parameter(hidden = true)와 커스텀 @UserId를 함께 사용해 문서 노출만 막고, 실제 주입 로직은 유지하는 방식이 적절합니다.

src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java (1)

199-199: bookImageUrl 매핑 변경 LGTM

추천 방 DTO의 사양 변경에 맞춰 book.imageUrlbookImageUrl로 매핑한 부분은 요구사항에 부합합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[THIP2025-307] [hotfix] 최근 검색어 삭제 api 스웨거 관련 수정 [THIP2025-293] [hotfix] 모집중인 방 상세보기 api response 수정

1 participant