[FE-29] 웹 시설상품(program) lib + BFF Route Handler

작업 내용 (설계 의도)

변경 사항

시설상품 등록·목록의 서버 호출 계층을 신규 작성한다.

  • web/lib/portal/programs.ts: listPrograms(facilityId)(GET /facilities/{id}/programs), createProgram(facilityId, body)(POST .../programs). 응답 zod 파싱.
  • BFF Route Handler: web/app/api/portal/facilities/[id]/programs/route.ts(GET·POST) — be-client 경유.

근거: 20260707-...-design-fe-web.md API 연동 표(W-PG).

의존

  • FE-26 (Program 타입·스키마)

다이어그램

클래스 의존

flowchart LR
    Lib["lib/portal/programs.ts"] --> Route["api/portal/facilities/[id]/programs"]
    Route --> BeClient["lib/server/be-client.ts"]
    Section["ProgramSection (FE-32)"] --> Lib

테스트 케이스

  • listPrograms('F1')이 GET을 호출하고 목록을 zod 파싱한다(msw)
  • createProgram이 POST body(name/price/capacity/durationMinutes)를 전송한다
  • 400(검증 실패) 응답을 ProblemDetail로 표면화한다
  • 0건 목록이 빈 배열로 파싱된다