Skip to content

[FEAT] 방 찾기 페이지 부가 기능 구현#112

Merged
KoungQ merged 6 commits into
developfrom
feat/#111/방-찾기-페이지-부가-기능-구현
Jun 2, 2026

Hidden character warning

The head ref may contain hidden characters: "feat/#111/\ubc29-\ucc3e\uae30-\ud398\uc774\uc9c0-\ubd80\uac00-\uae30\ub2a5-\uad6c\ud604"
Merged

[FEAT] 방 찾기 페이지 부가 기능 구현#112
KoungQ merged 6 commits into
developfrom
feat/#111/방-찾기-페이지-부가-기능-구현

Conversation

@KoungQ

@KoungQ KoungQ commented Jun 2, 2026

Copy link
Copy Markdown
Member

📝 Pull Request Template

📌 제목

[FEAT] 방 찾기 페이지 부가 기능 구현


📢 요약

프론트와 API 연동 중 필요한 엔드포인트 개발

🔗 연관 이슈: Resolves #111


🚀 PR 유형

해당하는 항목에 체크해주세요.

  • ✨ 새로운 기능 추가
  • 🐛 버그 수정
  • 🎨 CSS/UI 디자인 변경
  • 🔧 코드에 영향 없는 변경(오타 수정, 탭 사이즈 변경, 변수명 변경 등)
  • 🔨 코드 리팩토링
  • 📝 주석 추가 및 수정
  • 📄 문서 수정
  • 🧪 테스트 추가 또는 리팩토링
  • 🏗️ 빌드 및 패키지 매니저 수정
  • 📂 파일 또는 폴더명 수정
  • 🗑️ 파일 또는 폴더 삭제

✅ PR 체크리스트

PR이 다음 요구 사항을 충족하는지 확인해주세요.

  • 🔹 커밋 메시지 컨벤션을 준수했습니다. (Commit message convention 참고)
  • 🔹 변경 사항에 대한 테스트를 수행했습니다. (버그 수정/기능 테스트)
  • 🔹 관련 문서를 업데이트했습니다. (필요한 경우)

📜 기타

리뷰어가 알면 좋을 추가 사항을 적어주세요.

  • 기능 개선 아이디어
  • 코드 리팩토링 필요 여부 등

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 방에 설명 정보를 추가하고 편집할 수 있습니다.
    • 방 목록에서 호스트의 전공 및 학년 정보를 확인할 수 있습니다.
    • 새로운 방 유형이 추가되었습니다.
    • 당신의 체크리스트와 일치하는 맞춤형 방 추천 목록을 이용할 수 있습니다.
  • Improvements

    • 방 검색 결과 첫 페이지에 전체 방 개수가 표시됩니다.

@KoungQ KoungQ requested a review from ydking0911 June 2, 2026 08:06
@KoungQ KoungQ self-assigned this Jun 2, 2026
@KoungQ KoungQ added the feature label Jun 2, 2026
@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@KoungQ, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 48 minutes and 15 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: d7a2d88c-a1ef-4f64-87da-45a8d14aad9f

📥 Commits

Reviewing files that changed from the base of the PR and between 422a975 and d01059c.

📒 Files selected for processing (9)
  • src/main/java/com/project/dorumdorum/domain/checklist/application/mapper/UserChecklistMapper.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/infra/repository/RoomRepositoryImplTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/ui/CreateRoomControllerTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/ui/UpdateRoomTitleControllerTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/CreateRoomUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/FindRoomsUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/LoadMyRoomsUseCaseTest.java
  • src/test/java/com/project/dorumdorum/domain/room/unit/usecase/UpdateRoomTitleUseCaseTest.java

Walkthrough

방 찾기 페이지 기능을 확대하며 사용자 체크리스트 기반 방 추천 기능을 새로 추가합니다. 응답 구조를 확장하고, 데이터베이스 쿼리를 최적화하며, 전체 계층의 테스트를 업데이트합니다.

Changes

방 찾기 및 추천 기능 통합

Layer / File(s) Summary
도메인 엔티티 확장
src/main/java/com/project/dorumdorum/domain/room/domain/entity/Room.java, src/main/java/com/project/dorumdorum/domain/room/domain/entity/RoomType.java, src/main/java/com/project/dorumdorum/domain/calendar/domain/entity/CalendarEvent.java
RoomTEXT 컬럼 타입의 notes 필드와 updateNotes() 메서드를 추가하고, RoomType enum에 TYPE_3 상수를 추가하며, CalendarEvent의 중복 매핑 애노테이션을 정리함
요청 및 응답 DTO 정의
src/main/java/com/project/dorumdorum/domain/room/application/dto/request/RoomCreateRequest.java, src/main/java/com/project/dorumdorum/domain/room/application/dto/request/UpdateRoomTitleRequest.java, src/main/java/com/project/dorumdorum/domain/room/application/dto/response/FindRoomsPageResponse.java, src/main/java/com/project/dorumdorum/domain/room/application/dto/response/FindRoomsResponse.java, src/main/java/com/project/dorumdorum/domain/room/application/dto/response/RecommendedRoomResponse.java, src/main/java/com/project/dorumdorum/domain/room/application/dto/response/RecommendedRoomsPageResponse.java
RoomCreateRequestUpdateRoomTitleRequestnotes 필드를 추가하고, FindRoomsResponsenotes, hostMajor, hostStudentYear 필드를 확장하며, 커서 기반 페이지와 총 개수를 담는 FindRoomsPageResponse와 추천 방 정보를 담는 RecommendedRoomResponse, RecommendedRoomsPageResponse를 새로 정의함
저장소 인터페이스 및 구현
src/main/java/com/project/dorumdorum/domain/checklist/domain/repository/RoomRuleRepository.java, src/main/java/com/project/dorumdorum/domain/checklist/domain/repository/UserChecklistRepository.java, src/main/java/com/project/dorumdorum/domain/room/domain/repository/RoomQueryRepository.java, src/main/java/com/project/dorumdorum/domain/room/infra/repository/RoomRepositoryImpl.java
RoomRuleRepository에 활성 룰을 room 함께 조회하는 findAllActiveWithRoom() 메서드를 추가하고, UserChecklistRepositoryexistsByUserNo() 메서드를 추가하며, RoomQueryRepository에 필터 기반 카운팅 메서드를 정의하고, RoomRepositoryImpl에서 체크리스트 필터링, remaining=0 특수 커서 처리, 동적 SQL 조건 생성 로직을 구현함
비즈니스 로직 계층
src/main/java/com/project/dorumdorum/domain/room/domain/service/RoomService.java, src/main/java/com/project/dorumdorum/domain/room/application/usecase/FindRoomsUseCase.java, src/main/java/com/project/dorumdorum/domain/room/application/usecase/LoadRecommendedRoomsUseCase.java, src/main/java/com/project/dorumdorum/domain/room/application/usecase/UpdateRoomTitleUseCase.java
RoomService에 필터 기반 카운팅 메서드를 추가하고, FindRoomsUseCase의 반환 타입을 FindRoomsPageResponse로 변경해 커서 기반 페이징에서 첫 페이지일 때만 총 개수를 계산하며, LoadRecommendedRoomsUseCase에서 사용자 체크리스트 존재 여부를 확인한 후 활성 방 규칙들과 필드를 비교해 매칭 점수를 계산하고 추천 방 목록을 생성하며, UpdateRoomTitleUseCase에서 제목과 함께 notes도 업데이트함
API 계층
src/main/java/com/project/dorumdorum/domain/room/ui/FindRoomsController.java, src/main/java/com/project/dorumdorum/domain/room/ui/spec/FindRoomsApiSpec.java, src/main/java/com/project/dorumdorum/domain/room/ui/LoadRecommendedRoomsController.java, src/main/java/com/project/dorumdorum/domain/room/ui/spec/LoadRecommendedRoomsApiSpec.java
FindRoomsControllerFindRoomsApiSpec의 응답 타입을 FindRoomsPageResponse로 변경하고, 새로운 LoadRecommendedRoomsControllerLoadRecommendedRoomsApiSpec을 추가해 GET /api/rooms/recommended 엔드포인트로 추천 방 목록을 반환하도록 구현함
테스트 커버리지
src/test/java/com/project/dorumdorum/domain/room/unit/infra/repository/RoomRepositoryImplTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/ui/FindRoomsControllerTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/usecase/FindRoomsUseCaseTest.java, src/test/java/com/project/dorumdorum/domain/room/unit/usecase/LoadMyRoomsUseCaseTest.java
저장소 테스트에서 새로운 응답 필드, CASE 기반 정렬, remaining=0 커서 처리, 체크리스트 필터링을 ArgumentCaptor로 검증하고, 서비스/컨트롤러/유스케이스 테스트에서 응답 구조 변경과 새로운 카운팅 메서드 위임을 확인하며, 모든 기대값을 새로운 필드 구성에 맞게 업데이트함

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant FindRoomsController
  participant FindRoomsUseCase
  participant RoomService
  participant RoomRepositoryImpl
  User->>FindRoomsController: GET /api/rooms/search?cursor=...
  FindRoomsController->>FindRoomsUseCase: execute(userNo, request)
  FindRoomsUseCase->>RoomService: searchByCursor(gender, request)
  RoomService->>RoomRepositoryImpl: findByCursorWithLateral(...)
  RoomRepositoryImpl-->>RoomService: CursorPage<FindRoomsResponse>
  FindRoomsUseCase->>RoomService: countSearchResults(gender, request)
  Note over FindRoomsUseCase: cursor가 null인 경우만 호출
  RoomService->>RoomRepositoryImpl: countByFilter(...)
  RoomRepositoryImpl-->>RoomService: totalCount
  FindRoomsUseCase-->>FindRoomsController: FindRoomsPageResponse
  FindRoomsController-->>User: 200 OK {items, nextCursor, hasNext, totalCount}
Loading
sequenceDiagram
  participant User
  participant LoadRecommendedRoomsController
  participant LoadRecommendedRoomsUseCase
  participant UserChecklistRepository
  participant RoomRuleRepository
  User->>LoadRecommendedRoomsController: GET /api/rooms/recommended
  LoadRecommendedRoomsController->>LoadRecommendedRoomsUseCase: execute(userNo)
  LoadRecommendedRoomsUseCase->>UserChecklistRepository: existsByUserNo(userNo)
  alt 체크리스트 없음
    LoadRecommendedRoomsUseCase-->>LoadRecommendedRoomsController: {hasChecklist: false, items: []}
  else 체크리스트 있음
    LoadRecommendedRoomsUseCase->>RoomRuleRepository: findAllActiveWithRoom()
    RoomRuleRepository-->>LoadRecommendedRoomsUseCase: List<RoomRule>
    loop 각 RoomRule에 대해
      LoadRecommendedRoomsUseCase->>LoadRecommendedRoomsUseCase: buildResponse(userChecklist, rule)
      Note over LoadRecommendedRoomsUseCase: 필드 비교→점수 계산→추천 라벨 결정
    end
    LoadRecommendedRoomsUseCase-->>LoadRecommendedRoomsController: {hasChecklist: true, items: [...]}
  end
  LoadRecommendedRoomsController-->>User: 200 OK
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 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 (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경사항인 방 찾기 페이지의 부가 기능(추천 기능, notes 필드 추가 등)을 명확하게 요약하고 있습니다.
Linked Issues check ✅ Passed PR의 코드 변경사항들이 링크된 이슈 #111의 목표인 방 찾기 페이지 부가 기능 구현(추천 기능, API 응답 확장)을 충분히 수행합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 방 찾기 페이지 부가 기능 범위 내에 있으며, 비관련 변경은 발견되지 않습니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#111/방-찾기-페이지-부가-기능-구현

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.

@KoungQ KoungQ merged commit 647385b into develop Jun 2, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant