diff --git a/CHANGELOG.md b/CHANGELOG.md index ea57ede..28d7517 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ ## 2026-07-27 +### ✅ [Reviewer] #533 언급 적은 식당 제외 필터 — 승인 (게이트 통과) +- 검토 대상: backend(`Restaurant.videoCount`, `RestaurantMapper` xml/iface, `RestaurantService`, `RestaurantController`), frontend(`lib/api.ts`, `lib/filters.ts`, `app/page.tsx`), `__tests__/filters.test.ts` +- 정확성: video_count 스칼라 서브쿼리(strong/unknown)와 min_mentions 서버필터 로직 일치. DISTINCT+스칼라 서브쿼리는 r.id 단위라 결과 불변. 캐시 키에 `mm=` 포함(필터별 분리). `minMentions > 0` 가드로 음수/null 안전. `includeHidden` 오버로드 리팩터링에 유실된 호출부 없음(true 사용처 부재 확인) +- 설계 일치: `docs/design/533-min-mentions-filter/README.md`와 구현 일치. 순수 함수 `passesMinMentions()` 분리로 경계값/null 테스트 6케이스 커버 +- 직접 수정(Reviewer): 설계 §7 "내위치 토글 ON → setMinMentions(0)" 요구 대비 데스크톱 토글만 반영되고 모바일 토글 2곳 누락 → 두 모바일 토글에 `setMinMentions(0)` 추가(반응형 리사이즈 시 일관성 확보, 통상 모바일 흐름에선 no-op). tsc/jest(6 suites, 32 tests) 통과 +- 06-Reviewer 승인 → 07-Release 대기 (배포는 Release 단계에서 수행) + ### ✅ [Reviewer] #532 지역 표시 계층화 — 승인 (게이트 통과) - 검토 대상: `frontend/src/lib/region.ts`(`formatRegion`), `RestaurantDetail.tsx`/`RestaurantList.tsx`(적용·렌더 가드), `__tests__/region.test.ts` - 정확성: `formatRegion`은 순수 함수(I/O 없음, 단일 책임). falsy/`null` 토큰(대소문자 무시)/빈 토큰/더미 `나라`/trim/전량 더미(`""`) 모두 정상 처리 — 재실행한 단위 테스트 8/8 통과 diff --git a/docs/design/533-min-mentions-filter/README.md b/docs/design/533-min-mentions-filter/README.md index d77a9ad..8d59df7 100644 --- a/docs/design/533-min-mentions-filter/README.md +++ b/docs/design/533-min-mentions-filter/README.md @@ -34,6 +34,7 @@ - **필터 리셋 일관성**: `minMentions`도 다른 필터(장르/가격/지역/채널)와 동일하게 취급. - 전역 "전체보기" 버튼: 노출 조건에 `minMentions > 0` 포함, 클릭 시 `setMinMentions(0)`로 함께 초기화. - "내위치" 토글 ON: 다른 필터 초기화 목록에 `setMinMentions(0)` 포함(내위치와 상호배타). + 데스크톱/모바일 토글 **전부**(3곳)에 동일 적용 — 반응형 리사이즈 시에도 일관. ## 엣지케이스 - `video_count` 미산정(findById 등) → null. 클라 필터는 `?? 0`로 안전. diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index b50a078..125bc13 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -1162,6 +1162,7 @@ export default function Home() { setCountryFilter(""); setCityFilter(""); setDistrictFilter(""); + setMinMentions(0); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( (pos) => { setUserLoc({ lat: pos.coords.latitude, lng: pos.coords.longitude }); setRegionFlyTo({ lat: pos.coords.latitude, lng: pos.coords.longitude, zoom: 15 }); }, @@ -1274,6 +1275,7 @@ export default function Home() { setCountryFilter(""); setCityFilter(""); setDistrictFilter(""); + setMinMentions(0); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( (pos) => { setUserLoc({ lat: pos.coords.latitude, lng: pos.coords.longitude }); setRegionFlyTo({ lat: pos.coords.latitude, lng: pos.coords.longitude, zoom: 15 }); },