[Hotfix] 모집중인 방 상세보기 response 수정 및 최근검색어 삭제 스웨거 수정#263
Conversation
Walkthrough모집중 방 상세보기 흐름에서 만료 사전검증을 추가하고, 추천 책 목록에 책 표지 이미지(bookImageUrl)를 조회·반영했으며, 응답의 마감일 표시 포맷을 새 유틸 메서드로 교체했습니다. 또한 최근 검색어 삭제 API의 userId 파라미터를 Swagger에서 숨겼고, 해당 상세보기 API의 Swagger 에러코드 목록을 확장했습니다. Changes
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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Possibly related PRs
Suggested reviewers
Poem
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 unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
Test Results411 tests 411 ✅ 36s ⏱️ Results for commit 0fb64e8. |
There was a problem hiding this comment.
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의 에러 메시지에서
deadline을yyyy.MM.dd와 같은 통일된 포맷으로 표기하면 일관성이 좋아집니다. 예:DateTimeFormatter.ofPattern("yyyy.MM.dd")로 포맷하여 삽입.src/main/java/konkuk/thip/common/util/DateUtil.java (1)
49-69: 메서드 네이밍(lowerCamelCase)과 만료 문구 개선, 중복 최소화 제안요구사항 충족(“<시간> 남음”, 1시간 미만 “마감 임박”)은 잘 반영되었습니다. 다만 아래 2점 개선을 권장합니다.
- 자바 관례상 메서드명은 lowerCamelCase가 바람직합니다.
RecruitingRoomFormatAfterTime→formatRecruitingRoomAfterTime.- 만료/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의 필드명 변경은 클라이언트 호환성 이슈 가능성
roomImageUrl→bookImageUrl로 키 명이 바뀌면, 기존 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.
📒 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 추가 LGTMSwagger에서 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.imageUrl을bookImageUrl로 매핑한 부분은 요구사항에 부합합니다.
#️⃣ 연관된 이슈
📝 작업 내용
📸 스크린샷
💬 리뷰 요구사항
📌 PR 진행 시 이러한 점들을 참고해 주세요
Summary by CodeRabbit