[FE-07] 커뮤니티 REST 엔드포인트 + Query 훅
작업 내용 (설계 의도)
변경 사항
근거: 20260704-채팅시스템고도화-design-fe-app.md “API 연동 표”·BE TDD “REST API 계약”.
커뮤니티(동아리) REST 함수와 Query/Mutation 훅을 신설한다. 신규 파일 api/community.ts·lib/useCommunity.ts. 컴포넌트는 훅 경유.
api/community.ts:listCommunities(keyword?)(GET /communities역제안),getCommunity(id)(GET /communities/{id}역제안),listMembers(id)(GET /communities/{id}/members역제안),createCommunity(req)(POST /communities),joinCommunity(id),approveMember(id,userId),kickMember(id,userId),transferHost(id,newHostUserId),leaveCommunity(id).lib/useCommunity.ts:useCommunities,useCommunity,useCommunityMembers,useCreateCommunity(성공 시 방목록·커뮤니티목록 캐시 무효화 — 전용방 자동생성 반영),useJoinCommunity,useApproveMember,useKickMember,useTransferHost,useLeaveCommunity(성공 시 방목록 무효화 — 자동 퇴장 반영).
역제안 GET 엔드포인트는 BE 미확정 — 함수에 “BE 확정 대기” 주석. 필드는 community-types.ts(FE-03)와 일치. getBeClient() 경유.
의존
- FE-03 (community-types)
다이어그램
처리 흐름
sequenceDiagram participant Screen participant Hook as useCreateCommunity participant Api as api/community.ts participant Cache as queryClient Screen->>Hook: create(req) Hook->>Api: POST /communities Api-->>Hook: CommunityResponse Hook->>Cache: invalidate(rooms/me, communities)
테스트 케이스
useCommunities가 목록을 반환하고 keyword로 필터 쿼리를 보낸다useJoinCommunity공개 커뮤니티는 status ACTIVE, 비공개는 PENDING_APPROVAL을 반환한다useCreateCommunity성공 시 방목록 캐시가 무효화된다(전용방 자동생성)useLeaveCommunity성공 시 방목록 캐시가 무효화된다(자동 퇴장)useKickMember가 방장 권한 없을 때 403을 전파한다