[FE-08] 앱 lib/useRecruitment.ts 모집 query 훅
작업 내용 (설계 의도)
변경 사항
모집 화면들이 소비할 TanStack Query 훅을 신규 파일 mobile/lib/useRecruitment.ts에 정의한다. 서버 상태는 Query 캐시가 SSOT — 스토어 복사 금지.
useRecruitments(communityId?),useRecruitment(id),useApplications(recruitmentId),useMyApplications()(§Open Questions 계약 확정 전 임시 경로).- mutation:
useCreateRecruitment()(성공→목록 무효화),useApplyRecruitment(id)(신청→ApplyResult 반환, 낙관 미적용),useCancelApplication()(성공→내 신청·상세 무효화),useCancelRecruitment(id)(성공→목록·상세 무효화). - 취소 수수료 미리보기:
useCancellationPreview(applicationId)— BE 프리뷰 엔드포인트 확정 시 서버값, 미제공 시 마감시각·참가비로 클라 계산(단계율 7일↑0/3~7일 5/3일↓10).
근거: 20260707-...-design-fe-app.md API 연동 표(모집), 상태관리 설계.
의존
- FE-02 (recruitment api·타입)
다이어그램
클래스 의존
flowchart LR Hook["lib/useRecruitment.ts"] --> Api["api/recruitment.ts"] List["recruitments/index (FE-11)"] --> Hook Detail["recruitments/[id] (FE-13)"] --> Hook Me["recruitments/me (FE-15)"] --> Hook
테스트 케이스
useRecruitments()가 목록을,useRecruitments(3)이 모임 필터 목록을 반환한다useApplyRecruitment가 성공 시 ApplyResult(checkoutUrl/applicationId)를 반환한다useCancelApplication성공 시 내 신청 목록 queryKey를 무효화한다useCancellationPreview가 마감 5일 전 5% 환불액(참가비*0.95)을 계산한다useCancelRecruitment성공 시 상세·목록을 무효화한다- 409(정원초과) 응답이 mutation error로 노출된다