# PRD: 커뮤니티 딥링크 상세 이동 ## 문서 정보 | 항목 | 내용 | |---|---| | 상태 | 구현 완료, 실제 게시물 UI 확인 제한은 계획에 기록 | | 작성일 | 2026-10-13 | | 결정권자 | 사용자 | | 관련 계획 | [plan-task.md](plan-task.md) | | API | 기존 게시글 상세 API 재사용, 계약 변경 없음 | | 리뷰 | [phase1-community-post-detail-links.md](reviews/phase1-community-post-detail-links.md) | ## 1. Overview `voiceon://community?postId=12345`를 실행하면 기존 `CreatorChannelCommunityPostDetailView`에서 해당 게시물을 표시한다. ## 2. Problem Statement 기존 링크는 저장된 사용자 ID를 크리에이터 ID로 사용해 커뮤니티 목록과 댓글 시트를 연다. 게시글 상세를 바로 보여주지 않으며 사용자 ID가 없으면 정상 postId도 처리되지 않는다. ## 3. Goals - 유효한 postId만으로 해당 게시글 상세 route에 진입한다. - postId 누락·잘못된 값이면 현재 화면과 대기 중 이동 상태를 바꾸지 않는다. ## 4. Non-Goals - 상세 화면 UI, API, 인증·구매·접근 권한 정책 변경. - 관련 없는 기존 댓글 화면/상태의 일괄 정리. - worktree 생성 또는 다른 브랜치로 전환. ## 5. 사용자와 권한 푸시 탭, 외부 URL, 앱 내 알림 목록의 공통 handler를 사용한다. 게시글 존재 여부와 접근 권한은 기존 상세 API와 화면의 오류 처리를 따른다. ## 6. 핵심 흐름과 라우팅 `community` 링크 → 양수 Int postId 해석 → `.creatorChannelCommunityPostDetail(postId:)` → 기존 상세 화면의 게시글 조회. 스플래시에서는 기존 pending action 전달을 유지한다. 기존 `post_id` 별칭, 크리에이터 경로형 및 `community_id` 쿼리형은 동일한 postId 상세 이동으로 처리한다. ## 7. 기능 요구사항 | ID | 상태 | 요구사항 | 수용 기준 | |---|---|---|---| | CD-001 | 확정 | postId로 상세 이동 | 12345 전달 시 상세 route에 정확히 12345 전달, 목록/댓글 시트 호출 없음 | | CD-002 | 확정 | 누락·무효 값 거부 | 빈 값, 문자, 0, 음수, Int 범위 초과는 이동 및 pending 변경 없음 | | CD-003 | 확정 | 사용자 ID 불필요 | 저장된 사용자 ID 0과 양수 모두 CD-001 성립 | | CD-004 | 확정 | 공통 진입점과 시작 대기 유지 | external/notificationList 및 splash 후 apply가 같은 상세 route 생성 | | CD-005 | 확정 | 인접 기능 유지 | 기존 선물/콘텐츠 딥링크 검사 통과 | ## 8. 기술·운영 제약 기존 Swift/앱 라우팅과 `work/tests` 하네스를 재사용한다. 신규 의존성·프로젝트 설정 변경 없이 현재 브랜치에서 작업한다. 실제 서버 데이터가 필요한 UI 검증과 독립 실행 가능한 handler 검증을 구분한다. ## 9. 성공 기준 - CD-001~005의 실제 production handler 실행 검사가 통과한다. - 변경 Swift 구문/컴파일 검사와 가능한 앱 빌드를 수행하고 실패·환경 제한을 그대로 기록한다. - 기기 UI 실행 미확인 상태를 정상 동작 확인으로 보고하지 않는다. ## 10. Open Questions 없음. 사용자 인터뷰로 누락·잘못된 값은 이동하지 않는 것으로 확정했다. ## 11. Decision Log | 날짜 | 결정 | 근거 | |---|---|---| | 2026-10-13 | 목록 대신 기존 게시글 상세로 이동 | 사용자 구현 요청 | | 2026-10-13 | 누락·잘못된 postId는 이동하지 않음 | 사용자 인터뷰 답변 | | 2026-10-13 | 현재 브랜치 사용, worktree 금지 | 사용자 직접 지시 |