[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을 전파한다