Repository navigation
Conversation
검색 결과 매장 탭 시안에 '추천순 ▾' 정렬 시트(등록순·인기순·판매순)가 있는데 searchStores는 인기순 고정이었음. 메인 검색 결과(매장 선택) 화면도 같은 정렬을 쓰므로 정렬을 store 공용으로 둠.
- SDL: enum StoreSort { POPULAR, LATEST, BEST_SELLING } 추가, SearchStoresInput.sort(기본 POPULAR) 추가. '추천순' 라벨은 상품 검색과 같이 POPULAR로 해석
- StoreListingService.sortStores: 인기순은 기존 산식(scoreStores), 판매순은 최근 30일 유효 주문 수량 합(상품 검색 판매순과 같은 정의, 판매 0건도 뒤에 남김), 등록순은 created_at desc. 동률은 id desc
- 인기순만 카드 통계를 넘기고, 나머지는 buildCards 기본 집계에 맡김
- StoreRepository: 후보 select를 상수 1벌로 합치고 created_at 추가
테스트
- store-listing.service.spec: 정렬 3종·동률·30일 밖 판매 제외·통계 유무 4건
- store-search.service.spec: sort 지정·정렬 뒤 페이지 자르기, 생략·null이면 인기순 2건
- store-search-query.resolver.spec: sort 전달 1건
- 반증: 등록순·판매순 비교 방향을 뒤집으면 3건 실패
홈 메인 검색(지역·픽업 날짜·시간 → 검색하기) 결과인 매장 선택 화면에 맞는 API가 없어 FE가 todayPickupStores로 임시 연결 중이었음(오늘 외 날짜 미지원, 시간은 클라이언트 필터, 지도 마커 없음, 정렬 미전달).
- SDL: pickupStores(input: PickupStoresInput!): PickupStoreConnection!(비로그인 가능)
- date 필수("YYYY-MM-DD" KST), time 선택("HH:mm"), regionIds, sort(StoreSort, 기본 인기순), offset/limit(≤50)
- 항목은 StoreCard + latitude/longitude(지도 마커, 미설정 null). 슬롯은 싣지 않음(시안 카드에 없음)
- 시간 필터: 그 슬롯이 정확히 예약 가능한 매장만(영업시간·리드타임·capacity·휴무 반영). 생략·null이면 그날 슬롯이 하나라도 있는 매장
- 검증: 형식 오류 INVALID_DATE / INVALID_TIME_VALUE, 오늘보다 앞선 날짜는 신규 PICKUP_DATE_PAST(400). 정책 상한(MAX_DAYS_AHEAD 365일)을 넘으면 조회 없이 빈 결과
- StorePickupAvailabilityService.openSlotsOn: todayPickupStores에 있던 "후보 × 하루 → 예약 가능 매장" 판정(벌크 조회 4회 + evaluatePickupDay)을 날짜 인자로 분리. todayPickupStores도 이것을 오늘로 호출(동작 불변)
- 후보 select에 좌표 추가, toCoordinate를 store-detail 매퍼에서 export해 재사용
테스트
- store-pickup-stores.service.spec 20건: 날짜 판정(요일 휴무·미설정·다른 요일·특별휴무·capacity·max_days_ahead·리드타임·오늘), 시간 필터(정확 일치·격자 밖·리드타임 마감·생략/null), 입력 검증 표 9건, 정렬·지역·페이지·좌표
- store-pickup-stores-query.resolver.spec 2건(찜 여부·비로그인)
- 오늘 픽업 service·resolver spec은 provider만 추가하고 그대로 통과
- 반증: 시간 필터 제거·available 무시·과거 검사 제거·날짜 무시·좌표 제거·sort 무시 6가지 모두 실패로 잡힘
feat: 매장 목록 정렬 공용화 · searchStores 정렬 추가
feat: 매장 선택(메인 검색 결과) pickupStores 쿼리 추가
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
🩺 NestJS Doctor — 90/100 (Excellent)진단 486건 (error 12).
architecture / security 상위 항목
|
🧹 knip — dead-code 리포트전체 리포트
|
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Coverage report
Show new covered files 🐣
Show files with reduced coverage 🔻
Test suite run success4292 tests passing in 386 suites. Report generated by 🧪jest coverage report action from a10f5a2 |
검색 결과 매장 탭의 정렬과 홈 메인 검색 결과(매장 선택) 화면 API를 운영에 반영합니다.
searchStores정렬 추가enum StoreSort { POPULAR, LATEST, BEST_SELLING }, "추천순"은POPULAR(기본)created_at내림차순, 동률은 id 내림차순SearchStoresInput.sort는 선택 입력이라 기존 호출은 그대로 인기순pickupStores쿼리 추가PICKUP_DATE_PAST(400)todayPickupStores동작 불변)운영 반영 사항입니다.
pickupStores호출, 정렬 옵션 정리)은 FE 쪽에서 진행합니다.Summary by CodeRabbit