[BE-55] payment OrderType.RECRUITMENT 동기 확장

작업 내용 (설계 의도)

변경 사항

근거 TDD: “Possible Solutions 결제 확정 경로 A·AS-IS OrderConfirmationGatewayImpl”. 기존 동기 결제 확정/취소 접점을 OrderType.RECRUITMENT로 확장해 recruitment 신청 결제·환불을 기존 3종과 동형으로 처리한다(FR-6). 비동기 이벤트 경로 미채택.

⚠️ 공유 파일: OrderType.kt·OrderConfirmationGatewayImpl.kt는 payment 파일이나 recruitment만 건드린다(senior-be A 미접촉 — 단일 소유 확인됨).

포함:

  • OrderType.kt: enum에 RECRUITMENT 추가(4종). 진단 §8(2) 확장마찰 임계선 도달 수용.
  • OrderConfirmationGatewayImpl.kt: 생성자에 RecruitmentDomainService 주입 추가, confirm/cancelwhen(orderType)RECRUITMENT 분기 추가 — confirm→recruitmentDomainService.confirmApplication(orderId, paymentId), cancel→recruitmentDomainService.cancelPendingApplication(orderId). when은 exhaustive라 else 없이 컴파일러가 누락 강제.

롤백

enum·when 분기는 additive — recruitment.enabled OFF면 RECRUITMENT 결제 진입점이 없어 분기 미도달(무해). 롤백은 배포 되돌림.

의존

  • BE-52 (RecruitmentDomainService.confirmApplication/cancelPendingApplication 시그니처)

다이어그램

처리 흐름

sequenceDiagram
    participant P as PaymentDomainService
    participant G as OrderConfirmationGatewayImpl
    participant R as RecruitmentDomainService
    P->>G: confirm(RECRUITMENT, applicationId, paymentId)
    G->>R: confirmApplication(applicationId, paymentId)
    P->>G: cancel(RECRUITMENT, applicationId, paymentId)
    G->>R: cancelPendingApplication(applicationId)

클래스 의존

flowchart LR
    OCG[OrderConfirmationGatewayImpl] --> RDS[RecruitmentDomainService]
    OCG --> BDS[BookingDomainService]
    OCG --> GDS[GoodsDomainService]
    OCG --> TDS[TicketingDomainService]

테스트 케이스

  • RECRUITMENT 결제 승인 웹훅이 confirmApplication을 호출해 신청이 CONFIRMED된다
  • RECRUITMENT 결제 취소 웹훅이 cancelPendingApplication을 호출한다
  • 기존 BOOKING/GOODS/TICKETING 분기가 회귀 없이 동작한다
  • OrderType가 4종이 되어도 when이 exhaustive해 컴파일 누락이 없다
  • 중복 confirm 웹훅 수신 시 Application.confirm 멱등으로 이중 확정되지 않는다