[FE-10] 앱 결제 화면 pre-issued(RECRUITMENT) 진입 모드

작업 내용 (설계 의도)

변경 사항

mobile/app/payment/new.tsx(MO-08)를 확장해 모집 신청 결제를 재사용한다. 기존 흐름은 화면 내부에서 preparePayment(POST /payments/prepare)를 호출하지만, 모집은 신청 API(POST /recruitments/{id}/applications)가 서버에서 이미 결제를 개시해 checkoutUrl·paymentId를 반환한다.

  • 라우트 파라미터에 checkoutUrl·paymentId가 오면(pre-issued 모드) preparePayment를 건너뛰고 바로 Linking.openURL(checkoutUrl)getPayment(paymentId) 폴링(기존 최대 3회·1초 로직 재사용).
  • orderType='RECRUITMENT' 처리(라벨·성공 후 이동 경로 = 내 신청 목록).
  • 기존 BOOKING/GOODS/TICKETING prepare 경로 무변경.
  • 하드코딩 색(#007AFF 등) → useTheme() 토큰 리트로핏(라이트/다크 둘 다).

근거: 20260707-...-design-fe-app.md “결제 흐름 재사용 결정”. 롤백: pre-issued 분기 제거(기존 prepare 경로 무영향).

의존

  • FE-04 (OrderType RECRUITMENT)

다이어그램

처리 흐름

sequenceDiagram
    participant S as payment/new
    participant L as Linking
    participant A as api/payment.getPayment
    S->>S: params.checkoutUrl 존재? (pre-issued)
    alt pre-issued
        S->>L: openURL(checkoutUrl)
    else 기존
        S->>S: preparePayment → checkoutUrl
        S->>L: openURL
    end
    S->>A: getPayment(paymentId) 폴링
    A-->>S: COMPLETED/CANCELLED/FAILED

테스트 케이스

  • checkoutUrl 파라미터가 있으면 preparePayment를 호출하지 않고 바로 Linking.openURL한다
  • checkoutUrl 파라미터가 없으면 기존 preparePayment 경로를 탄다(하위호환)
  • orderType=‘RECRUITMENT’ 완료 시 내 신청 목록으로 이동한다
  • COMPLETED/CANCELLED/FAILED 각 분기가 올바른 UI를 낸다
  • 라이트/다크 모드에서 하드코딩 색 없이 토큰으로 렌더된다