Skip to content

fix(dashboard): 회원 홈 AI 문장 현지화·데모 요약 경로 단일화·미사용 요약 필드 정리 - #2654

Merged
subin21cc merged 4 commits into
mainfrom
fix/member-home-l10n-cleanup
Oct 1, 2026
Merged

subin21cc merged 4 commits into
mainfrom
fix/member-home-l10n-cleanup

Conversation

@subin21cc

@subin21cc subin21cc commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • 영어 화면에 한국어로 나오던 AI 문장 세 곳(홈 나트륨 경고, 지난 날짜 식단 AI 피드백, 앱 가이드 예시 조언)을 문장 키와 ko/en ARB 로 옮기고, 서버·데모 모두 요청 Accept-Language 를 따르게 함
  • 지난 날짜의 식단 코치 문장이 "오늘 … 저녁은" 이 아니라 그날을 되짚는 문장이 되고, 나트륨 기준은 회원 목표(daily_sodium_mg)를 따름
  • 데모 홈 요약을 목업 저장소 대신 실서버와 같은 DioDashboardRepository → 로컬 인터셉터 경로로 단일화. 끼니를 지우면 빈 상태와 실제 기록 기반 조언이 나옴
  • 홈이 읽지 않던 요약 필드(주간 점수·지난 주 비교선·운동 칼로리/횟수/소모 목표)와 이를 위한 백엔드 추가 조회, 쓰이지 않던 MockPlaceRepository 정리

Changes

✨ Features

  • 홈 조언 키 sodium_over_sources 와 ai_advice_params.foods(나트륨 상위 급원 음식 이름, 최대 두 개) 추가 — 앱은 homeAdviceSodiumOverSources·homeAdviceFoodPair ARB 문장 틀에 음식 이름을 끼워 그림

🔧 Improvements

  • dashboardRepositoryProvider 의 목업 갈래 제거, MockDashboardRepository 삭제(위젯 테스트 대역은 test/helpers/fake_dashboard_repository.dart 로 이동)
  • 로컬 인터셉터: 식단·운동 기록 추가·수정·삭제 시 시드 큐레이션 통합 조언과 그 날짜의 큐레이션 하루 코치 문장을 거두고, 이후로는 지금 기록으로 조언 생성
  • 로컬 인터셉터 홈 요약·하루 식단 문장이 서버와 같은 기준(주 150분, 회원 나트륨 목표)·같은 문장·같은 키를 사용
  • 백엔드 /dashboard/summary: week_score·week_score_delta·nutrition_week_prev·exercise_calories·exercise_count·exercise_burn_goal 제거, 주간 점수용 지난주 식단·운동 추가 조회 제거(세 지표와 주간 추이 일별 나트륨·당류는 유지)
  • 앱 DashboardSummary·NutritionDay 에서 같은 필드와 쓰이지 않던 getter 제거
  • MockPlaceRepository 삭제(헬스장 지도·위치 로직은 그대로)

🎨 UI/UX

  • 영어 화면: 홈 AI 조언 카드의 나트륨 경고, 식단 탭 하루 AI 피드백, 앱 가이드 예시 식단·운동 조언이 영어로 표시됨(음식 이름은 회원이 적은 그대로)
  • 지난 날짜 식단 AI 피드백이 그날을 되짚는 문장으로 표시됨
  • 데모 홈: 끼니를 모두 지우면 빈 영양 수치와 운동 기록 기반 조언이 표시됨. 운동 분은 고정 45분 대신 로컬 DB(drift ExerciseSessions)의 시드 기록 합계로 표시됨
  • 회원 앱 레이아웃·색은 그대로

📝 Docs

  • backend/API_CONTRACT.md 대시보드 절: 응답 필드, ai_advice_key 값 목록, ai_advice_params, 제거한 필드 명시
  • frontend/flutter/docs/API_CATALOG.md 대시보드 사용처·예시 payload 갱신
  • backend/app/api/v1/dashboard.py 모듈 설명의 기준치 문구를 회원 건강 목표·일일 권장 기준치 기준으로 수정

🐛 Fixes

  • 영어 화면 홈 나트륨 경고가 한국어 문장으로 나오던 문제(키 없이 한국어 문장만 내려오던 경로)
  • 지난 날짜 식단 AI 피드백이 오늘 기준 문장·고정 2,000mg 기준으로 나오던 문제, 데모 인터셉터가 Accept-Language 를 무시하던 문제
  • 앱 가이드 예시 조언이 키 없이 한국어 문장으로만 들어가 영어 가이드에서 한국어가 나오던 문제

Commits

  1. da92f6316 fix(l10n): 홈 나트륨 경고·지난 날짜 식단 피드백·가이드 조언 현지화
  2. aaffb4f21 refactor(dashboard): 데모 홈 요약 경로의 로컬 인터셉터 단일화
  3. f04c314ed chore(dashboard): 홈이 읽지 않는 요약 필드와 쓰이지 않는 목업 코드 정리

Notes


Screenshots (Optional)

Before After
영어 홈 AI 조언: "라면·김밥 섭취로 나트륨이 높아요." "Sodium is high from 라면 and 김밥."
지난 날짜 식단 AI 피드백: "오늘 나트륨 섭취가 많았어요. 저녁은 …" "그날은 나트륨 섭취가 많았어요. 다음 날은 국물·양념을 줄여 균형을 맞춰 봐요."

Test Plan

  • 기능 정상 동작 확인 — CI 에서 확인
  • 예외 케이스 확인 — CI 에서 확인(음식 이름 없는 경고, 옛 응답 파싱, 없는 기록 삭제)
  • UI 확인
  • 빌드 성공 — CI 에서 확인
  • 관련 테스트 통과 — CI 에서 확인

Manual Test Steps

  1. 데모로 들어가 MY 에서 언어를 English 로 바꾸고, 오늘 나트륨이 목표를 넘는 끼니를 기록한 뒤 홈 AI 조언 카드가 "Sodium is high from …" 영어 문장인지 확인
  2. 식단 탭에서 지난 날짜로 이동해 AI 피드백이 그날을 되짚는 문장(한국어/영어 각각)인지, MY 에서 나트륨 목표를 바꾸면 판정이 따라오는지 확인
  3. 데모 홈에서 오늘 끼니를 모두 삭제한 뒤 홈으로 돌아와 영양 수치가 0 이고 조언이 운동 기록 기반 문장으로 바뀌는지 확인
  4. 영어로 앱 가이드를 열어 예시 식단·운동 조언에 한글이 없는지 확인

Related Issues

Closes #2644
Closes #2645
Closes #2646

Checklist

  • 코드 리뷰 준비 완료
  • 불필요한 코드 제거
  • 하드코딩 값 점검
  • Merge 충돌 없음
  • 데모 시나리오 영향 확인

- 홈 나트륨 경고에 음식 이름이 붙는 경우도 문장 키(sodium_over_sources)와
  음식 이름 인자(ai_advice_params.foods)로 싣고, 앱은 ko/en ARB 문장으로 그린다.
  서버 문장도 Accept-Language 를 따른다.
- 하루 식단 코치 문장: 지난 날짜는 "그날"을 되짚는 문장으로, 나트륨 기준은
  회원 목표(daily_sodium_mg)로 판정. 데모 인터셉터도 같은 규칙·요청 언어를 따르고,
  시드의 한국어 큐레이션 문장은 한국어 화면에서만 쓴다.
- 앱 가이드 예시 식단·운동 조언을 기존 조언 ARB 키로 교체.
- 백엔드·인터셉터·표시 층별 테스트 추가.

Refs #2644
- dashboardRepositoryProvider 의 목업 갈래 제거. 데모도 실서버와 같은
  DioDashboardRepository 를 타고, dioProvider 의 LocalApiInterceptor 가 응답한다.
- MockDashboardRepository 삭제. 위젯 테스트용 대역은 test/helpers 의
  FakeDashboardRepository 로 이동.
- 로컬 인터셉터: 식단·운동 기록을 추가·수정·삭제하면 시드 큐레이션 통합 조언과
  그 날짜의 큐레이션 하루 코치 문장을 거두고, 이후로는 지금 기록으로 만든 조언을 낸다.
  끼니를 모두 지운 데모 홈이 빈 상태와 실제 기록 기반 조언을 보여 준다.
- 저장소 모드 테스트·데모 홈 위젯 테스트·인터셉터 테스트 갱신, API 카탈로그 사용처 수정.

Refs #2645
- 백엔드 /dashboard/summary 에서 week_score·week_score_delta·nutrition_week_prev·
  exercise_calories·exercise_count·exercise_burn_goal 제거. 주간 점수 계산용
  지난주 식단·운동 추가 조회와 _score_for·_avg_sodium_of_logged 도 함께 제거.
  세 지표와 주간 추이의 일별 나트륨·당류는 같은 조회에서 나오므로 유지.
- 모듈 docstring 의 기준치 설명을 회원 건강 목표·일일 권장 기준치 기준으로 수정.
- 앱 DashboardSummary 에서 같은 필드와 sodiumIndicator·sugarIndicator getter,
  NutritionDay 의 sodiumMg·sugarG 제거. 로컬 인터셉터 응답·앱 가이드 예시에서도 같은 필드 제거.
- 쓰이지 않던 MockPlaceRepository 삭제, 테스트는 placeRepositoryProvider 가
  DioPlaceRepository 를 내는지 확인하도록 교체.
- API_CONTRACT.md·API_CATALOG.md 대시보드 절 갱신, 필드 제거 확인 테스트 추가.

Refs #2646
@subin21cc subin21cc added bug Something isn't working chore Build / config / release / non-feature housekeeping labels Sep 30, 2026
@subin21cc subin21cc self-assigned this Sep 30, 2026
@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository: CSE-Sudo/on-care/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: d1e3a652-1818-4f3b-ae0d-391e22ca7b61

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…cleanup

# Conflicts:
#	backend/app/api/v1/dashboard.py
#	frontend/flutter/lib/core/network/interceptors/local_api_interceptor.dart
@subin21cc
subin21cc merged commit 4fc1328 into main Oct 1, 2026
5 checks passed
@subin21cc
subin21cc deleted the fix/member-home-l10n-cleanup branch October 1, 2026 01:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working chore Build / config / release / non-feature housekeeping

Projects

None yet

1 participant