[FEAT] 성별 기반 방 목록 필터링 및 신청 차단#92
Hidden character warning
Conversation
- Room 엔티티에 gender 컬럼 추가, 방 생성 시 방장 성별로 저장 - 방 목록 조회(FindRoomsUseCase)에서 요청자 성별과 일치하는 방만 반환 - QueryDSL 경로: room.gender.eq(gender) WHERE 조건 추가 - LATERAL 경로: AND r.gender = :gender 조건 추가 (LATERAL 실행 전 필터링) - 방 신청(ApplyRoomUseCase)에서 성별 불일치 시 GENDER_MISMATCH(ROOM016) 에러 반환 - 목록 필터링(Layer 1) + 신청 차단(Layer 2) 2중 방어 구조 - 방 생성(CreateRoomUseCase)에서 이미 방에 속한 사용자 사전 검증 추가 - 기존 DB constraint 오류 대신 ALREADY_JOINED_USER(ROOM013) 반환 - 인덱스 교체: idx_room_status_created → (room_status, gender, created_at, room_no) - 에러 코드 추가: GENDER_MISMATCH(ROOM016) - 관련 단위 테스트 전체 반영
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yml Review profile: ASSERTIVE Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
copilot 리뷰 확인하고 PR Merge 되는대로 다음 이슈도 이어서 진행할 예정. |
There was a problem hiding this comment.
Pull request overview
성별(MALE/FEMALE) 기준으로 방 목록 노출을 필터링하고, 타 성별 방에 대한 신청을 서버에서 차단하기 위해 Room.gender를 도입하고 조회/신청 흐름 전반에 성별 조건을 추가한 PR입니다. 기존에 성별 구분 없이 전체 방이 노출되던 동작을 개선해 기숙사 운영 정책(성별 분리)에 맞게 동작하도록 합니다.
Changes:
Room에gender필드를 추가하고, 방 생성 시 방장 성별을Room.gender로 저장하도록 생성 흐름 수정- 방 목록 조회 시 로그인 사용자의 성별을 조회해
RoomRepository검색 조건(일반 QueryDSL / LATERAL 네이티브 쿼리)에 성별 필터 추가 - 방 신청 시 신청자 성별과 방 성별 불일치 시
ROOM016 (GENDER_MISMATCH)로 차단 및 관련 테스트 보강
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/java/com/project/dorumdorum/domain/room/domain/entity/Room.java | gender 컬럼 및 성별 포함 인덱스 정의 추가 |
| src/main/java/com/project/dorumdorum/domain/room/application/usecase/CreateRoomUseCase.java | 방장 성별 조회 후 Room 생성 + 사전 “이미 방 소속” 차단 |
| src/main/java/com/project/dorumdorum/domain/room/application/usecase/FindRoomsUseCase.java | 사용자 성별 조회 후 커서 검색에 성별 조건 전달 |
| src/main/java/com/project/dorumdorum/domain/room/application/usecase/ApplyRoomUseCase.java | 신청 시 성별 불일치 차단(ROOM016) |
| src/main/java/com/project/dorumdorum/domain/room/domain/service/RoomService.java | create/searchByCursor에 Gender 파라미터 추가 |
| src/main/java/com/project/dorumdorum/domain/room/domain/repository/RoomQueryRepository.java | findByCursor 시그니처에 Gender 추가 |
| src/main/java/com/project/dorumdorum/domain/room/infra/repository/RoomRepositoryImpl.java | QueryDSL/LATERAL 양쪽 경로에 gender WHERE 조건 추가 |
| src/main/java/com/project/dorumdorum/domain/room/ui/spec/FindRoomsApiSpec.java | API 설명에 성별 필터링 명시 + hidden userNo 파라미터 추가 |
| src/main/java/com/project/dorumdorum/domain/room/ui/FindRoomsController.java | @CurrentUser userNo를 받아 use case로 전달 |
| src/main/java/com/project/dorumdorum/global/exception/code/status/RoomErrorStatus.java | GENDER_MISMATCH (ROOM016) 추가 |
| src/main/resources/schema.sql | room 상태/성별 기반 인덱스 생성으로 변경 |
| src/test/java/com/project/dorumdorum/domain/room/unit/usecase/FindRoomsUseCaseTest.java | userNo 기반 실행 및 성별 조회 mocking 반영 |
| src/test/java/com/project/dorumdorum/domain/room/unit/usecase/CreateRoomUseCaseTest.java | “이미 방 소속” 차단 테스트 + gender 포함 생성 테스트 반영 |
| src/test/java/com/project/dorumdorum/domain/room/unit/usecase/ApplyRoomUseCaseTest.java | 성별 불일치 차단 테스트 추가 및 기존 케이스 업데이트 |
| src/test/java/com/project/dorumdorum/domain/room/unit/ui/FindRoomsControllerTest.java | controller 시그니처 변경 반영 |
| src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java | service 시그니처/레포 호출 변경 반영 |
| src/test/java/com/project/dorumdorum/domain/room/unit/infra/repository/RoomRepositoryImplTest.java | repository 시그니처 변경 및 gender 파라미터 반영 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
📝 Pull Request Template
📌 제목
📢 요약
🔗 연관 이슈: Resolves #90
✨ 변경사항
성능 고려사항
🚀 PR 유형
✅ PR 체크리스트
📜 기타