테마
Story: 원가 히스토리 조회 로직
메타
| 항목 | 값 |
|---|---|
| Story ID | E-03-S-01 |
| Epic | E-03 원가 히스토리 |
| 상태 | draft |
| 우선순위 | P0 |
| 규모 | M |
| 담당 개발자 | BE (희선님) |
사용자 스토리
As a 장사왕 시스템, I want 주문 시점에 맞는 원가를 조회하는 로직, So that 순이익 계산이 정확하게 이루어진다.
수락 기준 (Acceptance Criteria)
AC-01: 주문일 기준 원가 조회
| 항목 | 내용 |
|---|---|
| Given | 상품에 원가 히스토리가 존재 (예: 1/1 10,000원, 1/15 12,000원) |
| When | 1월 10일 주문에 대한 원가 조회 |
| Then | 10,000원 반환 (1/1 ~ 1/14 기간 원가) |
상세 스펙:
- PurchasePrice 테이블에서
createdAt <= orderDate조건으로 조회 - 가장 최근(가까운) 원가 선택 (
ORDER BY createdAt DESC LIMIT 1)
AC-02: 원가 히스토리 없는 상품
| 항목 | 내용 |
|---|---|
| Given | 상품에 원가 히스토리 없음 |
| When | 원가 조회 요청 |
| Then | 현재 Product.purchasePrice 반환 (기존 로직) |
AC-03: 미래 주문일 처리
| 항목 | 내용 |
|---|---|
| Given | 주문일이 오늘 이후 (예약/선주문) |
| When | 원가 조회 요청 |
| Then | 현재 적용 중인 최신 원가 반환 |
태스크 분해
Task 1: 원가 히스토리 조회 함수 AC-01 AC-02
- [ ] 1.1:
getPurchasePriceByDate(productId, orderDate)함수 생성 - [ ] 1.2: PurchasePrice 테이블 쿼리 최적화 (인덱스 확인)
- [ ] 1.3: 히스토리 없을 때 fallback 로직
Task 2: 배치 조회 최적화 AC-01
- [ ] 2.1:
getPurchasePricesByDateBatch(productIds[], orderDate)함수 생성 - [ ] 2.2: N+1 문제 방지 (IN 절 + GROUP BY)
Task 3: 테스트 작성
- [ ] 3.1: 단위 테스트 (히스토리 있음/없음, 경계값)
- [ ] 3.2: 성능 테스트 (대량 조회 시)
Dev Notes (AI Agent 최적화)
영향 받는 소스 트리
src/
├── purchase/
│ └── purchase-price.service.ts # 🔧 수정 (조회 함수 추가)
└── tests/
└── purchase/
└── purchase-price.spec.ts # 🆕 신규 생성핵심 쿼리 로직
sql
-- 단건 조회
SELECT purchasePrice
FROM PurchasePrice
WHERE productId = ?
AND vendorId = ?
AND createdAt <= ?
ORDER BY createdAt DESC
LIMIT 1;
-- 배치 조회
SELECT productId, purchasePrice, createdAt
FROM PurchasePrice p1
WHERE (productId, createdAt) IN (
SELECT productId, MAX(createdAt)
FROM PurchasePrice
WHERE productId IN (...)
AND createdAt <= ?
GROUP BY productId
);인덱스 확인 필요
sql
-- PurchasePrice 테이블 인덱스
-- (vendorId, productId, createdAt) 복합 인덱스 필요충돌 감지
| 항목 | 상태 | 설명 |
|---|---|---|
| 기존 코드 충돌 | 🟡 주의 | purchase-price.service.ts 수정 필요 |
| DB 스키마 변경 | ✅ 없음 | 기존 테이블 활용 |
의존성
| 의존 | 설명 | 상태 |
|---|---|---|
| PurchasePrice 테이블 | 기존 히스토리 데이터 | ✅ 존재 |
Dev Agent Record
| 항목 | 값 |
|---|---|
| 생성 Agent | Claude Opus 4.5 |
| 생성일 | 2026-01-27 |
| 마지막 수정 | 2026-01-27 |
| 검증자 | - |
검증 결과: 🔄 PENDING (PO 승인 대기) 검증일: -
생성일: 2026-01-27마지막 수정: 2026-01-27
