배경
매장별 픽업 가능 판정 규칙(특별휴무 · 요일 영업시간 · 일일 capacity 소진(레코드 없으면 무제한, 취소·soft-delete 제외 수량 합) · 리드타임 컷오프)이 두 서비스에 각각 구현되어 있다:
슬롯 생성 헬퍼(buildTodaySlots)만 공유하고 판정 분기 자체는 중복이다.
향후 주문 생성 mutation이 픽업 일시 재검증으로 세 번째 소비자가 될 예정이라, 그 전에 단일화하지 않으면 규칙 불일치(한쪽만 고침) 버그 가능성이 커진다.
목표
store feature 내부에 픽업 가능 판정 정책 클래스(또는 순수 함수 모듈)를 추출한다.
예: StorePickupPolicy — 입력(매장 정책 row·영업시간·휴무·capacity·점유·기준 시각) → 판정 결과(가능/사유).
- today-pickup과 pickup-schedule이 동일 정책을 소비하도록 재배선하고, 동작 차이는 회귀 테스트로 0임을 증명한다.
- 주문 생성 구현 시 이 정책을 그대로 재사용한다 (단일 소스).
수행 조건
참고
배경
매장별 픽업 가능 판정 규칙(특별휴무 · 요일 영업시간 · 일일 capacity 소진(레코드 없으면 무제한, 취소·soft-delete 제외 수량 합) · 리드타임 컷오프)이 두 서비스에 각각 구현되어 있다:
store-today-pickup.service.ts(오늘 픽업 가능 매장 리스트)store-pickup-schedule.service.ts(상품 상세 월 달력·시간 슬롯, PR feat(store): 매장별 픽업 달력·시간 슬롯 조회(storePickupCalendar/storePickupTimeSlots) #193)슬롯 생성 헬퍼(
buildTodaySlots)만 공유하고 판정 분기 자체는 중복이다.향후 주문 생성 mutation이 픽업 일시 재검증으로 세 번째 소비자가 될 예정이라, 그 전에 단일화하지 않으면 규칙 불일치(한쪽만 고침) 버그 가능성이 커진다.
목표
storefeature 내부에 픽업 가능 판정 정책 클래스(또는 순수 함수 모듈)를 추출한다.예:
StorePickupPolicy— 입력(매장 정책 row·영업시간·휴무·capacity·점유·기준 시각) → 판정 결과(가능/사유).수행 조건
참고