[FE-02] 앱 api/recruitment.ts 신규 (모집 타입 + 엔드포인트 함수)

작업 내용 (설계 의도)

변경 사항

모집 도메인의 요청/응답 타입과 엔드포인트 함수를 신규 파일 mobile/api/recruitment.ts에 정의한다. BE 20260707-모집-시설상품-소모임예약연동-tdd.md “REST API 계약” 표의 recruitment 7개 엔드포인트를 미러링한다. getBeClient() 경유(컴포넌트 직접 fetch 금지 — api 계층).

정의 대상:

  • 타입: RecruitmentResponse(id/title/description/capacity/confirmedCount/feeAmount/activityAt/applicationDeadline/communityId?/recruiterUserId/status: ‘OPEN’|‘CLOSED’|‘CANCELLED’), ApplicationResponse(id/recruitmentId/applicantUserId/status: ‘PENDING’|‘CONFIRMED’|‘CANCELLED’|‘REFUNDED’/paymentId?), CreateRecruitmentRequest, ApplyResult(applicationId/paymentId?/checkoutUrl?).
  • 함수: listRecruitments(communityId?), getRecruitment(id), createRecruitment(body), listApplications(id), applyRecruitment(id), cancelRecruitment(id), cancelApplication(applicationId).

의존

  • 없음 (자체 타입 보유, wave 1)

다이어그램

클래스 의존

flowchart LR
    RecApi["api/recruitment.ts"] --> Client["api/be-client.ts getBeClient"]
    Hook["lib/useRecruitment.ts (FE-08)"] --> RecApi

테스트 케이스

  • listRecruitments()GET /recruitments를, listRecruitments(3)GET /recruitments?communityId=3을 호출한다(axios-mock-adapter)
  • applyRecruitment(id)POST /recruitments/{id}/applications 응답의 checkoutUrl·applicationId를 반환한다
  • cancelApplication(id)POST /applications/{id}/cancel를 호출한다
  • 404 응답 시 에러가 상위로 전파된다(swallow 금지)
  • RecruitmentResponse.status가 리터럴 유니온으로 좁혀진다