[docs] 방(Room) 도메인 PRD 역설계 (specs/005-room-domain)#358
Conversation
- 운영 중인 방 도메인을 사용자 관점으로 정형화 (신규 기능 정의 아님) - User Story 6건 (P1: 방 생성·발견과 참여·내 방 관리, P2: 호스트 운영·방 안 컨텍스트·카테고리별 추천) - Functional Requirements 27건 (FR-001 ~ FR-027) - 측정 가능한 Success Criteria 7건, Edge Cases 9건, Assumptions 10건 - 방 라이프사이클 명문화: RECRUITING -> IN_PROGRESS -> EXPIRED IN_PROGRESS 전환은 호스트의 모집 마감, EXPIRED 전환은 종료일 기반 시간 트리거(스케줄)로 자동 수행 - 공개/비공개의 비밀번호 짝 검증, 카테고리 5종 사전 명시 - "인기 방" 산정 기준 명문화: 모집 중 방의 memberCount 내림차순 (충원율 아닌 절대 참여자 수, 개인화 없음) - 호스트 이탈 정책 명문화: 현재 정책상 호스트는 어떤 경로로도 방을 떠날 수 없음 (양도·방 폐쇄 기능 미제공) - 향후 도입 예정: 호스트 양도 + 호스트 단독 방 삭제 (도입 시 본 PRD 개정 트리거로 Assumptions에 명시) - 책 도메인은 외부 의존(#356), 방 안 활동은 RoomPost PRD(#357), 알림·신고는 별도 도메인
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the 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 have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
개요방(Room) 도메인의 사용자 관점 역설계 PRD와 스펙 품질 검증 체크리스트가 신규로 추가되었습니다. 방의 라이프사이클, 호스트·멤버 역할, 모집·검색·참여·운영 플로우, 27개의 기능 요구사항, 데이터 모델, 7가지 성공 기준, 의존성 가정이 포함됩니다. 변경 사항Room 도메인 완전한 스펙 정의 및 검증
평가🎯 2 (Simple) | ⏱️ ~12분 시
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ 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 |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@specs/005-room-domain/checklists/requirements.md`:
- Line 10: The checklist line "Focused on user value and business needs —
우선순위(P1~P3)로 사용자 가치 정렬" is inconsistent with the spec (which defines only P1 and
P2); update that text to reflect the actual priority scheme (e.g., "우선순위(P1/P2)로
사용자 가치 정렬" or similar) so the checklist matches the user story priorities
defined in the spec.
In `@specs/005-room-domain/spec.md`:
- Around line 193-196: FR-027 currently asserts that users can toggle likes,
which conflicts with this PRD's scope; update the FR-027 entry so it only
guarantees consistent association of room identifiers with room posts and
explicitly delegates the toggle behavior to the external RoomPost PRD / 좋아요 공통
정책 PRD (i.e., remove the direct “사용자는 ... 토글할 수 있다” requirement and replace it
with a sentence like “이 PRD는 방 식별자의 게시물 연계만 보장하며, 좋아요 토글의 상세 동작은 RoomPost
PRD(`#357`) 및 좋아요 공통 정책 PRD를 따릅니다”), ensuring FR-027 references the external PRDs
rather than mandating toggle functionality.
- Around line 180-182: Update FR-021 and FR-022 to specify a single, unambiguous
expiration boundary: state that a room transitions to "만료" at exactly 00:00:00
UTC on the calendar day after the room's configured end date (i.e., end date is
inclusive through 23:59:59.999 UTC), and that the time-based scheduler uses UTC
for all evaluations (no local timezone offsets); reference FR-021 and FR-022 so
tests and implementations know the scheduler triggers expiration at 00:00:00 UTC
following the inclusive end date.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 288c433b-846b-4eb6-80a4-864a386828c0
📒 Files selected for processing (2)
specs/005-room-domain/checklists/requirements.mdspecs/005-room-domain/spec.md
| ## Content Quality | ||
|
|
||
| - [x] No implementation details (languages, frameworks, APIs) — BCrypt/JPA/스케줄러 등 구현 용어 본문 미포함 | ||
| - [x] Focused on user value and business needs — 우선순위(P1~P3)로 사용자 가치 정렬 |
There was a problem hiding this comment.
우선순위 범위 표기를 실제 스펙과 맞춰 주세요.
현재 체크리스트는 P1~P3를 전제로 서술하지만, 본 스펙의 사용자 스토리는 P1/P2만 정의되어 있습니다. 문구를 실제 우선순위 체계와 일치시키는 게 좋겠습니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@specs/005-room-domain/checklists/requirements.md` at line 10, The checklist
line "Focused on user value and business needs — 우선순위(P1~P3)로 사용자 가치 정렬" is
inconsistent with the spec (which defines only P1 and P2); update that text to
reflect the actual priority scheme (e.g., "우선순위(P1/P2)로 사용자 가치 정렬" or similar)
so the checklist matches the user story priorities defined in the spec.
| - **FR-021**: 방은 정확히 다음 셋 중 하나의 상태를 가진다: *모집 중*, *진행 중*, *만료*. 상태 전이는 (a) 생성 시 *모집 중*, (b) 호스트의 모집 마감 시 *진행 중*, (c) 종료일 도달 시 *만료*로 이루어진다. | ||
| - **FR-022**: 사용자가 보는 방의 상태는 항상 그 시점의 실제 상태와 일치해야 한다. *진행 중* 방의 *만료* 전환은 종료일을 기준으로 시간 기반(스케줄) 트리거에 의해 자동으로 수행되며, 사용자 액션은 필요하지 않다. | ||
|
|
There was a problem hiding this comment.
종료일 경계 시점 정의를 단일 규칙으로 고정해 주세요.
현재 종료일 도달 시 만료와 종료일 기준 시간 트리거 표현만으로는 경계 시점(예: 자정 기준, 타임존, inclusive/exclusive)을 테스트에서 동일하게 재현하기 어렵습니다. 만료 전환 기준 시각을 단일 문장으로 확정해 주세요.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@specs/005-room-domain/spec.md` around lines 180 - 182, Update FR-021 and
FR-022 to specify a single, unambiguous expiration boundary: state that a room
transitions to "만료" at exactly 00:00:00 UTC on the calendar day after the room's
configured end date (i.e., end date is inclusive through 23:59:59.999 UTC), and
that the time-based scheduler uses UTC for all evaluations (no local timezone
offsets); reference FR-021 and FR-022 so tests and implementations know the
scheduler triggers expiration at 00:00:00 UTC following the inclusive end date.
- "새 참여자" 트리거: 방 참여 성공 시 호스트에게 발화. 참여 취소(나가기)는 미발화 (참여 1회당 1건) - "모집 조기 마감" 트리거: 호스트가 closeRoomRecruit으로 RECRUITING -> IN_PROGRESS 전환 시 호스트 제외 참여자에게 발화 - "활동 시작" 트리거: IN_PROGRESS 진입 시 참여자에게 발화 (조기 마감과 함께 발화될 수 있는 별개 트리거) - 알림 도메인 PRD(#359)의 트리거 카탈로그(ROOM 9종 중 3종)와 정합
Summary
운영 중인 방(Room) 도메인을 사용자 관점에서 역설계해 PRD로 정형화한 다섯 번째 산출물.
신규 기능 정의가 아닌 기존 구현을 "이래야 한다"로 문서화하는 작업.
무엇이 추가되는가
specs/005-room-domain/spec.mdspecs/005-room-domain/checklists/requirements.mdPRD 구성
핵심 결정
라이프사이클 (FR-021, FR-022)
`RECRUITING` → (호스트 모집 마감) → `IN_PROGRESS` → (종료일 도달, 시간 트리거 자동) → `EXPIRED`
자동 만료는 시간 기반(스케줄) 트리거로 사용자 액션 없이 수행. 종료일 경계 이후 첫 가시점부터 만료 노출.
"인기 방" 산정 기준 (FR-009)
memberCount내림차순호스트 이탈 정책 (FR-017, Edge Cases)
현재 정책: 호스트는 어떤 경로로도 방을 떠날 수 없음. 양도·방 폐쇄(삭제) 기능 모두 미제공. 호스트는 방이 `EXPIRED`에 도달할 때까지 호스트로 남음.
향후 도입 예정 (Assumptions에 명시):
공개/비공개의 짝 검증 (FR-003)
"공개 방 + 비밀번호" 또는 "비공개 방 + 비밀번호 없음" 조합은 거부. 정확히 짝을 이뤄야 함.
정원·참여자 무결성 (FR-018)
`memberCount`는 1 미만으로 감소할 수 없음(호스트는 항상 존재). 어떤 동시성 시나리오에서도 활성 참여 관계 수와 일치.
범위 외 (의도적)
누적 PRD 진행 상황
Test plan
Summary by CodeRabbit
Documentation