fix: 수면·컨디션 충돌·추천 필터·카드 목록 기간 연동 - #81
Conversation
There was a problem hiding this comment.
Code Review
Summary: 이 PR은 카드 목록 조회 기간 필터링 기능과 수면/컨디션 기록 간의 충돌 방지 안내 기능을 추가했습니다. 또한 홈 화면 타임라인의 포커스 로직을 개선하고, UI 컴포넌트의 레이아웃 안정성을 높였습니다. 리뷰 결과, 캐시 업데이트 시 발생할 수 있는 런타임 오류와 날짜 포맷 불일치 문제에 대한 수정이 필요합니다.
Must Fix:
[high] src/domains/condition/api/mutations.ts:37-40
문제: current.conditionRecords가 undefined일 경우 런타임 에러(TypeError)가 발생할 수 있습니다.
왜 문제인지: 캐시 데이터(current)는 존재하지만 conditionRecords 필드가 없거나 아직 로드되지 않은 상태일 경우, .filter 메서드를 호출하는 과정에서 앱이 크래시될 위험이 있습니다.
수정 방향: 옵셔널 체이닝과 기본값(?? [])을 사용하여 안전하게 배열 메서드를 호출하도록 수정합니다.
예상 영향: 캐시 구조가 불완전한 상황에서도 앱이 크래시되지 않고 안전하게 상태를 업데이트할 수 있습니다.
[high] src/domains/schedule/list.ts:270-276
문제: formatCardListDateValue가 날짜를 온점(.) 구분자 형식(YYYY.MM.DD)으로 반환하여 내부 필터 상태와 DateTimeSheet 간의 포맷 불일치가 발생합니다.
왜 문제인지: DateTimeSheet 및 API 경계에서는 보통 하이픈(-) 구분자 형식(YYYY-MM-DD)을 기대합니다. 온점 형식이 전달되면 날짜 파싱 오류나 크래시가 발생할 수 있으며, 사용자가 날짜를 변경하면 하이픈 형식으로 상태가 업데이트되어 상태의 일관성이 깨집니다.
수정 방향: 내부 필터 상태(startDate, endDate)는 항상 표준 하이픈 형식(YYYY-MM-DD)을 유지하도록 formatCardListDateValue를 수정합니다.
예상 영향: 날짜 파싱 오류를 방지하고 필터 상태의 일관성을 유지하며, UI 레이아웃이 깨지거나 포맷이 버벅이는 현상을 방지합니다.
Questions:
없음
Recommendations:
[medium] src/domains/schedule/list.ts:286-288
문제: startDate와 endDate가 하이픈(-) 형식일 때 온점(.) 형식으로 변환되지 않고 그대로 표시됩니다.
왜 문제인지: 내부 날짜 포맷을 YYYY-MM-DD로 통일할 경우, UI 상단 라벨이 2023-10~2024-01과 같이 하이픈으로 표시되어 피그마 디자인 컨벤션(온점 구분자)과 다르게 보일 수 있습니다.
수정 방향: replace('-', '.')를 사용하여 하이픈을 온점으로 치환해 줍니다.
예상 영향: 내부 상태 포맷에 관계없이 항상 일관되게 온점 형식(YYYY.MM)으로 기간 라벨이 표시됩니다.
[medium] src/components/features/card-list/card-list-filter-chips.tsx:381-383
문제: 선택된 태그 목록(selectedOptionsRow)이 가로로 길어질 때 화면 범위를 벗어날 수 있습니다.
왜 문제인지: selectedOptionsRow 스타일에 flexWrap: 'wrap'이 없어서 태그가 많아지거나 이름이 길 경우 화면 바깥으로 넘쳐서 UI가 깨질 수 있습니다.
수정 방향: flexWrap: 'wrap' 속성을 추가하여 여러 줄로 자연스럽게 줄바꿈되도록 합니다.
예상 영향: 텍스트가 잘리거나 화면을 벗어나는 현상을 방지하고 레이아웃이 안정적으로 유지됩니다.
Good Points:
- ConditionSleepConflictSheet를 통해 수면과 컨디션 기록 간의 충돌을 명확하게 안내하는 구조는 매우 좋은 아키텍처 선택입니다.
- useCurrentTime 훅과 isUpcomingScheduleRecommendation 유틸리티를 도입하여 시간 경계에 따른 추천 필터링 정확도를 높인 점이 훌륭합니다.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
작업 개요
변경 유형
UI 변경 사항
startDate/endDate, 개인 태그 조회returnTo=card-list복귀, 미래 추천만 후보 표시CardTagList로 태그 표시,personal_tags응답 반영테스트
npm run type-checknpm run lint환경변수/설정
.env.example업데이트 완료필요한 값:
참고 사항