[FE-13] 게스트 초대 발송·수신함 화면
작업 내용 (설계 의도)
변경 사항
근거: 설계 문서 S6·S7. 파일: app/invite/[roomId].tsx·app/invitations/index.tsx(신규, 이 티켓 단독 소유). expo-router 라우트 충돌 회피 위해 rooms/[id].tsx(FE-10)와 별도 경로 사용.
- S6 초대 발송(
invite/[roomId]):useInviteGuest(FE-08). 대상 userId 입력 + 발화권한(SegmentedControlcanSpeak) + 참여기간(expiresInDays) + 단일 CTA. 방장만 진입(FR-11). 멱등 응답(“이미 대기 중인 초대”) 인라인 처리. 성공 → 방 복귀. - S7 수신함(
invitations/index):useMyInvitations(FE-08 역제안 GET). 받은 초대 카드 리스트(커뮤니티/방·발화권한·만료 D-day·초대자) + 카드별 수락/거절 2선택. 수락 → 방목록·방 캐시 무효화 후 방 이동, 거절 → 카드 제거. 4상태(loading/empty “받은 초대가 없어요”/error/success). - 토스 패턴: 단일 과업 폼+하단 CTA(S6), 리스트 아이템당 명확한 2선택(S7).
색 하드코딩 금지, 라이트/다크. 진입점 노출은 chat.community.enabled 플래그(FE-15 와이어업).
롤백: 플래그 OFF로 초대 화면 진입점 숨김.
의존
- FE-04 (UI 프리미티브), FE-08 (초대 훅)
다이어그램
처리 흐름
sequenceDiagram participant Host participant Invite as invite/[roomId] participant Guest participant Inbox as invitations/index Host->>Invite: 대상·권한·기간 입력, 발송 Invite->>Guest: (BE) 초대 생성 Guest->>Inbox: 수신함 열람 Inbox->>Inbox: 수락 → 방 이동 / 거절 → 제거
테스트 케이스
- 초대 발송 폼이 발화권한·참여기간을 계약대로 전송한다
- 이미 대기 중 초대가 있으면 멱등 안내가 인라인으로 표시된다
- 수신함이 비면 빈 상태 문구가 렌더된다
- 초대 수락 시 방목록 캐시가 무효화되고 방으로 이동한다
- 초대 거절 시 해당 카드가 목록에서 제거된다
- 이미 만료된 초대 수락 시 서버 거부 안내가 표시된다(상태 보호)