Skip to content

Story: 쿠폰 목록/상세/이력 API

메타

항목
Story IDE-02-S-01
EpicE-02 어드민 강화
상태draft
우선순위P0
규모M
담당 개발자BE (하록님)

사용자 스토리

As a 운영팀 관리자, I want 쿠폰 목록을 조회하고 상세 정보와 사용 이력을 확인, So that 프로모션 현황을 파악하고 의사결정할 수 있다.


수락 기준 (Acceptance Criteria)

AC-01: 쿠폰 목록 조회

항목내용
Given관리자가 어드민에 로그인한 상태
When쿠폰 관리 메뉴에 진입
Then전체 쿠폰 목록이 페이지네이션으로 표시됨

상세 스펙:

  • 페이지당 20건 (조정 가능)
  • 정렬: 생성일 최신순 (기본)
  • 필터: 상태(활성/비활성), 유형(FIXED/PERCENT/TRIAL_EXT), 기간
  • 검색: 쿠폰 코드, 설명

응답 필드:

{
  items: [{
    id, code, type, description,
    discountAmount, discountPercent, trialDays,
    startDate, endDate,
    activeYn, usedCount, maxUsageTotal,
    createdAt
  }],
  pagination: { page, size, total, totalPages }
}

AC-02: 쿠폰 상세 조회

항목내용
Given쿠폰 목록에서 특정 쿠폰 선택
When쿠폰 상세 조회 요청
Then쿠폰 전체 정보 + 사용 통계가 표시됨

상세 스펙:

  • 쿠폰 전체 필드 반환
  • 사용 통계 포함:
    • 총 사용 횟수
    • 총 할인 금액
    • 최근 사용일

응답 필드:

{
  coupon: {
    id, code, type, description,
    discountAmount, discountPercent, maxDiscount, trialDays,
    minAmount, startDate, endDate,
    maxUsageTotal, maxUsagePerUser,
    applicablePlans, firstOnlyYn,
    activeYn, usedCount,
    createdAt, updatedAt
  },
  stats: {
    totalUsageCount,
    totalDiscountAmount,
    lastUsedAt
  }
}

AC-03: 쿠폰 사용 이력 조회

항목내용
Given쿠폰 상세 화면에서
When사용 이력 탭 클릭
Then해당 쿠폰의 사용 이력 목록이 표시됨

상세 스펙:

  • 페이지당 20건
  • 정렬: 사용일 최신순
  • 필터: 상태(APPLIED/COMPLETED/CANCELLED)

응답 필드:

{
  items: [{
    id, couponId,
    bizId, bizName,  // 사업장 정보 조인
    totalAmount, discountAmount, amount,
    status,
    appliedAt, completedAt, canceledAt
  }],
  pagination: { page, size, total, totalPages }
}

AC-04: 존재하지 않는 쿠폰 조회

항목내용
Given삭제되었거나 존재하지 않는 쿠폰 ID
When상세/이력 조회 요청
Then404 Not Found 응답

태스크 분해

Task 1: 쿠폰 목록 API AC-01

  • [ ] 1.1: GET /admin/coupons 엔드포인트 생성
  • [ ] 1.2: 페이지네이션 로직 구현 (page, size)
  • [ ] 1.3: 필터 로직 구현 (activeYn, type, startDate~endDate)
  • [ ] 1.4: 검색 로직 구현 (code, description LIKE)
  • [ ] 1.5: 정렬 로직 구현 (sortBy, sortOrder)

Task 2: 쿠폰 상세 API AC-02

  • [ ] 2.1: GET /admin/coupons/:id 엔드포인트 생성
  • [ ] 2.2: 쿠폰 전체 필드 조회
  • [ ] 2.3: 사용 통계 집계 쿼리 (CouponUsage 테이블)
  • [ ] 2.4: 404 처리 로직

Task 3: 쿠폰 사용 이력 API AC-03

  • [ ] 3.1: GET /admin/coupons/:id/usages 엔드포인트 생성
  • [ ] 3.2: CouponUsage + Biz 조인 쿼리
  • [ ] 3.3: 페이지네이션 및 필터 로직
  • [ ] 3.4: 404 처리 (쿠폰 존재 여부)

Task 4: 테스트 작성 AC-01, AC-02, AC-03, AC-04

  • [ ] 4.1: 목록 API 단위 테스트 (필터, 페이지네이션)
  • [ ] 4.2: 상세 API 단위 테스트 (통계 포함)
  • [ ] 4.3: 이력 API 단위 테스트
  • [ ] 4.4: 404 케이스 테스트

Task 5: 마무리

  • [ ] 5.1: API 문서화 (Swagger/OpenAPI)
  • [ ] 5.2: 코드 리뷰 준비
  • [ ] 5.3: PR 생성

Dev Notes (AI Agent 최적화)

아키텍처 패턴

항목내용
사용할 패턴Repository Pattern + Service Layer
참고 구현기존 어드민 API 패턴 참고
피해야 할 것Controller에 비즈니스 로직 직접 작성

영향 받는 소스 트리

src/
├── admin/
│   ├── coupon/
│   │   ├── coupon.admin.controller.ts  # 🆕 신규 생성
│   │   ├── coupon.admin.service.ts     # 🆕 신규 생성
│   │   └── dto/
│   │       ├── coupon-list.dto.ts      # 🆕 신규 생성
│   │       └── coupon-detail.dto.ts    # 🆕 신규 생성
│   └── admin.module.ts                 # 수정 (coupon 모듈 등록)
├── coupon/
│   └── coupon.repository.ts            # 수정 (어드민용 메서드 추가)
└── tests/
    └── admin/
        └── coupon.admin.spec.ts        # 🆕 신규 생성

기술 스택

항목사용 기술버전
프레임워크NestJS기존 버전
ORMPrisma기존 버전
인증기존 Admin Guard-

테스트 기준

유형필요 여부대상/시나리오
단위 테스트Service 메서드
통합 테스트API 엔드포인트
E2E 테스트-

충돌 감지

항목상태설명
기존 코드 충돌✅ 없음신규 어드민 API
API 계약 변경✅ 없음신규 엔드포인트
DB 스키마 변경✅ 없음기존 테이블 사용
환경 변수 변경✅ 없음-

References

출처경로/링크참조 섹션
Epic Spec.context/sprints/s53/epic-specs/E-02.md쿠폰 API 설계
테이블 스키마S52 E-07 DDLCoupon, CouponUsage
기존 어드민src/admin/패턴 참고

이벤트 로깅

이벤트명트리거파라미터GA4 여부
-어드민 내부 기능, GA4 로깅 불필요-

Dev Agent Record

항목
생성 AgentClaude Opus 4.5
생성일2026-01-27
마지막 수정2026-01-27
검증자-

핸드오프 전 체크리스트

문맥 & 요구사항

  • [x] 사용자 스토리가 명확한가?
  • [x] 수락 기준이 Given-When-Then 형식인가?
  • [x] 모든 엣지 케이스가 정의되었는가?

재해 예방

  • [x] 기존 코드에 유사 기능 확인했는가?
  • [x] 충돌 감지 항목에 ⚠️가 없는가?
  • [x] 라이브러리 버전 호환성 확인했는가?

AI Agent 최적화

  • [x] Dev Notes가 충분히 상세한가?
  • [x] References가 정확한가?
  • [x] 태스크 분해가 구체적인가?

최종 점검

  • [x] 이벤트 로깅이 정의되었는가? (해당 없음)
  • [ ] 상태가 ready-for-dev로 설정되었는가?

검증 결과: 🔄 PENDING (PO 승인 대기) 검증일: -


생성일: 2026-01-27마지막 수정: 2026-01-27

장사왕 Product Team