개요
Core 서비스의 쿠폰 도메인은 할인 쿠폰의 발급, 적용, 만료 처리 및 사용 이력 관리 기능을 제공합니다. 숙소별 쿠폰과 전체 시스템 쿠폰을 모두 지원하며, 다양한 할인 유형과 사용 제한 조건을 설정할 수 있습니다.Queries
getAccommodationCoupons
숙소의 쿠폰 목록을 조회합니다. (관리자 전용)GraphQL Signature
파라미터
조회할 숙소 ID (관리자 권한 필요)
페이지당 항목 수 (기본값: 20)
페이지네이션 커서
응답
쿠폰 목록
id: 쿠폰 고유 IDcode: 쿠폰 코드 (고객이 입력하는 코드)name: 쿠폰명couponType: 쿠폰 유형discountType: 할인 유형 (정액/정률)discount: 할인 금액/비율maxDiscountAmount: 최대 할인 금액maxUsableCount: 최대 사용 가능 횟수usableCount: 남은 사용 가능 횟수minUsableAmount: 최소 사용 금액expireAt: 만료일isExhausted: 소진 여부createdAt: 생성일
페이지네이션 정보
예제
Mutations
issueCoupon
새로운 쿠폰을 발급합니다. (관리자 또는 시스템 관리자 전용)GraphQL Signature
파라미터
쿠폰 발급 정보:
accommodationId(ID): 숙소 ID (null이면 전체 시스템 쿠폰)name(String!): 쿠폰명couponType(String!): 쿠폰 유형discountType(String!): 할인 유형 (“FIXED” 또는 “PERCENT”)discount(Int!): 할인 금액 또는 비율maxDiscountAmount(Int): 최대 할인 금액 (정률 할인 시 필수)maxUsableCount(Int): 최대 사용 가능 횟수 (기본값: 1)minUsableAmount(Int): 최소 사용 금액quantity(Int!): 발급 수량expireAt(DateTime): 만료일 (기본값: 9999-12-31)mask(String): 사용 제한 마스크 (JSON 형식)
응답
발급된 쿠폰 목록 (quantity만큼 생성됨)
예제
- 쿠폰 코드는 쿠폰 ID를 기반으로 자동 생성됩니다
quantity만큼 동일한 조건의 쿠폰이 생성됩니다accommodationId를 null로 설정하면 전체 시스템에서 사용 가능한 쿠폰이 됩니다
applyCoupon
구매 시 쿠폰을 적용하여 할인 금액을 계산하고 사용 이력을 생성합니다.GraphQL Signature
파라미터
쿠폰 코드
구매 금액
숙소 ID (숙소 전용 쿠폰 검증용)
객실 유형 ID (특정 객실 유형 제한 쿠폰용)
이전 사용 이력 무효화용 해시 (쿠폰 재적용 시)
응답
쿠폰 사용 이력
id: 사용 이력 IDusageHash: 사용 고유 해시 (결제 완료 시 필요)couponId: 쿠폰 IDpurchaseAmount: 구매 금액discountAmount: 할인 금액status: 사용 상태 (“PENDING”)createdAt: 생성일
예제
할인 금액 계산 로직
- 정액 할인 (FIXED):
discount값을 그대로 적용 - 정률 할인 (PERCENT):
purchaseAmount * (discount / 100), 단maxDiscountAmount를 초과할 수 없음 - 최소 사용 금액:
purchaseAmount가minUsableAmount보다 작으면 사용 불가 - 할인 금액 검증:
discountAmount가purchaseAmount보다 클 수 없음
에러 처리
DATA_NOT_FOUND_ON_ID
해당 코드의 쿠폰을 찾을 수 없습니다.
INVALID_PARAMETER
할인 금액이 유효하지 않거나 구매 금액을 초과합니다.
expireCoupon
쿠폰을 수동으로 만료 처리합니다. (관리자 전용)GraphQL Signature
파라미터
만료 처리할 쿠폰 코드
응답
만료 처리된 쿠폰 정보
id: 쿠폰 IDcode: 쿠폰 코드isExhausted: 소진 여부 (true)expireAt: 만료일 (현재 시각으로 변경됨)
예제
에러 처리
DATA_NOT_FOUND_ON_ID
해당 코드의 쿠폰을 찾을 수 없습니다.
만료된 쿠폰은 더 이상 사용할 수 없으며,
isExhausted가 true로 설정되고 expireAt이 현재 시각으로 변경됩니다.사용 흐름
쿠폰 발급 및 사용 흐름
- 쿠폰 발급:
issueCoupon으로 쿠폰 생성 (관리자) - 쿠폰 배포: 생성된 쿠폰 코드를 고객에게 제공
- 쿠폰 적용: 고객이 결제 시
applyCoupon으로 할인 금액 계산 - 결제 처리: 할인된 금액으로 결제 진행
- 사용 완료: 결제 완료 시
usageHash로 사용 상태 업데이트
쿠폰 재적용 흐름 (결제 취소 시)
- 기존 쿠폰 무효화:
usageHashMask에 이전usageHash전달 - 새로운 사용 이력 생성: 새로운
usageHash발급 - 재결제: 새로운 할인 금액으로 결제 진행
쿠폰 유형
할인 유형 (discountType)
- FIXED: 정액 할인 (예: 10,000원 할인)
- PERCENT: 정률 할인 (예: 10% 할인, 최대 5,000원)
사용 제한
- maxUsableCount: 쿠폰당 최대 사용 가능 횟수
- minUsableAmount: 최소 구매 금액 제한
- expireAt: 쿠폰 만료일
- mask: 특정 조건 제한 (JSON 형식)
- accommodationId: 특정 숙소 전용 쿠폰