Balance/trend/charts follow the selected day; kcal weight is per-ride (stored) and settings weight auto-syncs to the latest weigh-in

This commit is contained in:
4aiman 2026-09-22 11:12:24 +03:00
commit dff9342c0d
5 changed files with 92 additions and 32 deletions

View file

@ -0,0 +1,35 @@
# Сессия 2026-09-22 - баланс/графики от выбранного дня + вес
По утверждённому плану `~/.claude/plans/merry-discovering-dream.md`.
## Часть 1 - окно от выбранного дня
- `getRecentWeights/getDailyFoodTotals/getDailyActivityTotals` (db.js) получили опциональный
`endDate` (по умолч. 'now'). Диапазон сменён с `date >= date('now','-N days')` на
`date > date(<end>,'-N days') AND date <= date(<end>)` - ровно N дней, кончая на endDate
(заодно чинит старый off-by-one N+1).
- `renderToday` (main.js): BMR верхнего баланса `getRecentWeights(7, state.date)`; тренд
`getDaily*(7, state.date)` (убрал костыль `slice(-7)`); `renderStatsCharts(...,refDate=state.date)`
- все три запроса графиков и чипы 30/90 теперь от выбранного дня.
- Единый BMR у баланс-графика оставлен (от веса выбранного дня); per-day BMR не делал.
## Часть 2 - вес
### 2a синк настроек
- `DB.addWeight`: после вставки `setProfileValue("weight_kg", latest.weight_kg)` - настройки
всегда = последнее взвешивание. Колбэк модалки веса (main.js) обновляет `state.latestWeight`
и `state.profile.weight_kg`.
### 2b вес на момент поездки
- Миграция `gps_sessions.rider_weight_kg REAL`. Новый сеттер `DB.setSessionRiderWeight` (отдельно
от finishGpsSession, её зовёт и пересчёт).
- Запись: при финализации трека (gps.js) сохраняется `GPS.recording.weightKg`.
- Резолв веса везде первым берёт `session.rider_weight_kg`: `recalculateSession` (recorded+manual),
`recomputeAllStats` (per-session в цикле), деталь трека (2 места), `recomputeStatsFor`, разбор
повторов. Старые сессии (NULL) -> latest weigh-in (без регресса).
## Ответ пользователю (вопрос)
Ккал брал вес из последнего взвешивания (не из настроек; настройки - запас). Теперь новые
поездки хранят вес на момент записи, пересчёт использует его; настройки авто-синкаются с весом.
## Проверка
- SQL-диапазон на десктоп-БД: `> date(end,'-7') AND <= date(end)` = ровно 7 дней, кончая на
выбранном дне (старый `>=` давал 8). Подтверждено.
- Дальше: десктоп (Xvfb) - листание дней двигает баланс/тренд/графики; вес-синк; затем APK+тело.