수강신청 · 결제

주문을 만들고 결제를 확정하고 환불한다. 수강권을 여닫는 유일한 곳이다.

:8080
클래스
14
포트
2
interface
엔드포인트
7
화면
6
가드레일
25
critical 14

이 도메인의 자리

100%휠로 확대 · 끌어서 이동

이어진 곳

이 도메인이 쓰는 것 →
← 이 도메인을 쓰는 곳

없다.

공용 모듈
common-appcommon-domaincommon-infrastructurecommon-securitycommon-utilscommon-web

다루는 테이블

원본 대응 products/*.php · NICEPAY/* · admin/payment/*

타입 구조 (14)

Spring 소스를 직접 읽어 그린다. 계층 사이 화살표만 그렸다 — 타입 하나하나를 이으면 읽을 수 없다. 파란 테두리가 포트(interface)다.

100%휠로 확대 · 끌어서 이동
app 3domain 8infrastructure 2web 1

포트 (2) — 도메인이 바깥에 요구하는 것

도메인은 DB 도 HTTP 도 모른다. 필요한 것을 인터페이스로 선언하고, infrastructure 가 그것을 구현한다. 의존이 뒤집히는 지점이다.

이름하는 일메서드
OrderRepository
domain
-
PaymentGateway
domain
PG 취소 포트.
succeeded()failed()

도메인 모델 (6)

BankAccount
record
무통장 입금 계좌.
Entitlement
class
상품 코드 → 열어야 할 수강권 플래그.
Order
record
주문.
OrderNumber
class
주문번호.
OrderState
enum
주문 상태.
PaymentType
enum
결제 수단.

유스케이스 (3)

AdminOrderUseCase
145
관리자 결제 처리.
search()confirmBank()updateAmount()refund()
ApprovePaymentUseCase
117
카드 승인.
approve()Command()Result()
PlaceOrderUseCase
59
주문 생성.
place()Command()

엔드포인트 (7)

100%휠로 확대 · 끌어서 이동
메서드경로컨트롤러
POST/api/commerce/payments/nicepay/returnCommerceController
POST/api/commerce/ordersCommerceController
GET/api/commerce/orders/{orderNo}CommerceController
GET/api/commerce/admin/orders관리자CommerceController
POST/api/commerce/admin/orders/{orderNo}/confirm관리자CommerceController
POST/api/commerce/admin/orders/{orderNo}/amount관리자CommerceController
POST/api/commerce/admin/orders/{orderNo}/refund관리자CommerceController

화면 흐름 (5개 화면)

이 도메인이 받는 화면끼리의 이동입니다. 다른 도메인으로 나가는 이동까지 함께 보려면 화면 흐름 → 수강신청 · 결제 으로 갑니다.

100%휠로 확대 · 끌어서 이동

이 도메인을 쓰는 화면 (6)

critical 가드레일 (14)

  • order-amount-from-server
    요청에 금액을 실어 보내도 무시하고 product 의 sale_price 로 주문이 만들어져야 한다.
  • order-bank-stays-ready
    무통장 주문은 생성 직후 state=ready 여야 한다. 입금 전에 success 가 되면 안 된다.
  • order-no-entitlement-before-payment
    주문만 만들었을 때 수강권(member.pay_* )이 열리면 안 된다.
  • pay-fails-loudly-without-config
    상점키가 없으면 조용히 성공시키지 말고 거부해야 한다.
  • pay-verify-signature
    서명 검증에 실패한 인증 결과는 승인으로 넘어가면 안 된다.
  • pay-amount-match
    PG 가 돌려준 금액이 주문 금액과 다르면 승인하지 않아야 한다.
  • pay-store-tid
    승인 성공 시 TID 를 반드시 저장해야 한다. 없으면 나중에 환불할 수 없다.
  • order-amount-requires-admin
    결제 금액은 관리자만 고칠 수 있어야 한다.
  • admin-requires-admin-role
    수강생 세션으로 관리자 API 를 호출하면 거부돼야 한다. 화면 가드만으로 충분하지 않다.
  • admin-confirm-opens-entitlement
    입금확인 후 해당 회원의 수강권 플래그가 Y 가 돼야 한다.
  • admin-refund-revokes-entitlement
    환불 후 수강권 플래그가 N 으로 회수돼야 한다.
  • admin-refund-requires-pg-success
    카드 환불은 PG 취소가 성공해야만 상태를 cancel 로 바꾼다. PG 실패 시 상태가 그대로여야 한다.
  • order-no-default-price-fallback
    가격을 넘기지 않았을 때 다른 과정의 가격이 대신 찍히면 안 된다.
  • order-bundle-opens-both
    tesoltec 결제가 확정되면 pay_yn 과 pay_tec_yn 이 모두 Y 가 돼야 한다.