수강신청 · 결제
주문을 만들고 결제를 확정하고 환불한다. 수강권을 여닫는 유일한 곳이다.
:8080
클래스
14
포트
2
interface
엔드포인트
7
화면
6
가드레일
25
critical 14
이 도메인의 자리
100%휠로 확대 · 끌어서 이동
타입 구조 (14)
Spring 소스를 직접 읽어 그린다. 계층 사이 화살표만 그렸다 — 타입 하나하나를 이으면 읽을 수 없다. 파란 테두리가 포트(interface)다.
100%휠로 확대 · 끌어서 이동
app 3domain 8infrastructure 2web 1포트 (2) — 도메인이 바깥에 요구하는 것
도메인은 DB 도 HTTP 도 모른다. 필요한 것을 인터페이스로 선언하고, infrastructure 가 그것을 구현한다. 의존이 뒤집히는 지점이다.
| 이름 | 하는 일 | 메서드 |
|---|---|---|
OrderRepositorydomain | - | |
PaymentGatewaydomain | PG 취소 포트. | succeeded()failed() |
도메인 모델 (6)
BankAccountrecord | 무통장 입금 계좌. |
Entitlementclass | 상품 코드 → 열어야 할 수강권 플래그. |
Orderrecord | 주문. |
OrderNumberclass | 주문번호. |
OrderStateenum | 주문 상태. |
PaymentTypeenum | 결제 수단. |
유스케이스 (3)
AdminOrderUseCase145줄 | 관리자 결제 처리. search()confirmBank()updateAmount()refund() |
ApprovePaymentUseCase117줄 | 카드 승인. approve()Command()Result() |
PlaceOrderUseCase59줄 | 주문 생성. place()Command() |
엔드포인트 (7)
100%휠로 확대 · 끌어서 이동
| 메서드 | 경로 | 컨트롤러 |
|---|---|---|
POST | /api/commerce/payments/nicepay/return | CommerceController |
POST | /api/commerce/orders | CommerceController |
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-matchPG 가 돌려준 금액이 주문 금액과 다르면 승인하지 않아야 한다.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-bothtesoltec 결제가 확정되면 pay_yn 과 pay_tec_yn 이 모두 Y 가 돼야 한다.