TESOL 수강신청
PROD-TESOL · /products/tesol
기능
5
API 호출
0
가드레일
3
id 가 테스트 이름
구현 단계
6 / 6
개발 스펙
이 화면에서 할 수 있어야 하는 것 (3)
- 상품 정보와 가격을 확인한다.
- 성명 · 전화번호 · 이메일을 넣고 결제수단(무통장/카드)을 고른다.
- 신청하면 주문이 생기고 결제수단에 따라 갈라진다.
비즈니스 규칙 (4)
- 가격은 product 테이블이 정본이다. 화면에 다시 적지 않는다.근거: products_init.php $_PRODUCTS_LIST
- 비로그인으로도 신청할 수 있다. member_id 는 비워 둔다.근거: 원본도 비회원 결제를 허용했다.
- 주문번호는 YmdHis + 4자리.근거: products_record01.php:47
- 무통장은 주문 생성 후 계좌 안내로, 카드는 PG 결제창으로 간다.근거: products_record01.php:177~180
API (2)
| 메서드 | 경로 | 권한 | 모듈 · 설명 |
|---|---|---|---|
GET | /api/catalog/products/{code} | 공개 | 상품 가격 · 표시 정보. domains:catalog:catalog-web응답: { code, name, price, salePrice, displayTitle, highlight, options[] } |
POST | /api/commerce/orders | 공개 | 주문 생성. 금액은 서버가 상품에서 다시 읽는다. domains:commerce:commerce-web요청: { lecture, name, tel, email, type: "card"|"bank" } 응답: { orderNo, amount, type, nextStep: "bank"|"card" } 400 INVALID_INPUT 404 PRODUCT_NOT_FOUND — 판매하지 않는 상품 |
가드레일 (3) — id 가 곧 테스트 이름이다
| id | 반드시 만족해야 하는 것 | 등급 |
|---|---|---|
order-amount-from-server | 요청에 금액을 실어 보내도 무시하고 product 의 sale_price 로 주문이 만들어져야 한다. | critical |
order-price-single-source | 신청 화면 가격과 상품 목록 가격이 항상 같아야 한다. 예전에는 컴포넌트 기본값(TESOL 가격)이 있어 다른 과정에도 TESOL 가격이 찍힐 수 있었다. | high |
order-required-fields | 성명 · 연락처 · 이메일이 비면 주문이 만들어지면 안 된다. | high |
구현 계획 (6/6)
- ●Order · OrderState · Entitlement · 포트 2개
commerce-domain - ●PlaceOrderUseCase · AdminOrderUseCase
commerce-app - ●OrderRepositoryAdapter · NicepayGateway
commerce-infrastructure - ●/api/catalog/products/{code} 구현
commerce-web - ●/api/commerce/orders 구현
commerce-web - ●Next.js 를 BFF 로 전환 — Prisma 직접 접근 제거
wvctesol
서버 사이드 구현 계획 — 자바 객체별 요구사항 (6/6)
| 객체 | 모듈 | 책임 · 지켜야 할 것 |
|---|---|---|
● PlaceOrderUseCaseservice | commerce-app | 주문 생성.
|
● AdminOrderUseCaseservice | commerce-app | 입금확인 · 환불.
|
● Entitlementclass | commerce-domain | 상품 코드 → 수강권 플래그 매핑.
|
● OrderStateenum | commerce-domain | 주문 상태.
|
● NicepayGatewayclass | commerce-infrastructure | NICEPAY 취소 연동.
|
● OrderRepositoryAdapterclass | commerce-infrastructure | payment 테이블 조작.
|
테스트 방법 (3)
| 가드레일 | 종류 | 확인 방법 |
|---|---|---|
order-amount-from-server | e2e | amount=1000 을 body 에 넣어 주문 생성 → 저장된 amount 가 상품 판매가 |
order-price-single-source | e2e | /products 목록 가격과 /products/{code} 신청 화면 가격 문자열이 동일 |
order-required-fields | e2e | 이름 없이 주문 요청 → 400, payment 행 미생성 |
스냅샷

기능 목록 (5)
입력
- ·폼
1개 - ·제출 버튼
1개 - ·입력 필드
8개
액션
- ·서버 액션
submitEnrollment
상태
- ·화면 상태
emailDomain, emailDomainCustom, paymentMethod, emailLocal
화면 이동
← 이 화면으로 오는 곳
없음
이 화면에서 가는 곳 →
HOME/PROD-ORDER-DETAIL/products/order/[orderNo]PROD-ORDER-PAY-DETAIL/products/order/[orderNo]/pay
연결
API
직접 호출하는 API 가 없습니다
소스
src/app/products/tesol/page.tsx