feat: přidána midnight snack
feat: přidány statistiky pohybu
This commit is contained in:
1 parent
8dac67bdd1
commit
f1ce3ff297
13 files changed
+833
-163
No files matched your search
@@ -72,7 +72,7 @@ cd client && yarn build # tsc --noEmit + vite build → client/dist
|
||||
- **Entry:** `index.tsx` → `AppRoutes.tsx`; `Login.tsx` je přihlašovací obrazovka
|
||||
- **Pages:** `pages/` — `DayPage` (přehled dne se záložkami Příjem/Výdej),
|
||||
`TemplatesPage` (šablony tréninků), `ProfilePage` (tělesné údaje a klidový výdej),
|
||||
`StatsPage` (statistiky + import)
|
||||
`StatsPage` (statistiky příjmu a výdeje + import; výdej v `ActivityStatsPanel`)
|
||||
- **Components:** `components/` (Header, CalorieLookup) a `components/modals/`
|
||||
(MealModal, ActivityModal, ApplyWorkoutModal, ApplyMealModal, SettingsModal, ImportModal)
|
||||
- **Klientské enumy** patří do `enums.ts` jako TypeScript `enum` s mapou popisků,
|
||||
@@ -211,6 +211,18 @@ spánku a žádná ze standardních rovnic délku spánku jako proměnnou nemá
|
||||
nebo odečítat za něj kalorie by bylo vymýšlení čísla. Test to hlídá:
|
||||
bilance se po zadání spánku nesmí změnit.
|
||||
|
||||
**Statistiky výdeje** (`getActivityStats` ve `statsService.ts`, `GET /api/stats/activity`)
|
||||
dělí pohyb na aktivity ze šablon a mimo ně a u šablon porovnává skutečnost s plánem.
|
||||
Plán si `applyWorkoutTemplate` ukládá při použití (`workoutPlans.ts`, klíč
|
||||
`workoutPlans:<login>:<datum>`) — **nesrovnává se se současnou podobou šablony**,
|
||||
ta se mohla mezitím změnit, a smazaná aktivita by beze stopy zmizela. Plán nese
|
||||
jednotlivé cviky s `entryId` aktivity, která z nich vznikla; podle něj
|
||||
`analyzeDay` u každého dne pozná cvik **odebraný** (aktivita chybí) a **upravený**
|
||||
(jiné množství, série nebo násobek) — podle názvu by to nešlo, šablona může mít
|
||||
stejný cvik dvakrát. Smazání všech cviků šablony ve dni `dropOrphanedPlans`
|
||||
bere jako vrácené použití a plán zahodí. Aktivity ze šablony bez plánu (cvik
|
||||
přesunutý z jiného dne) se počítají jako splněné přesně dle plánu.
|
||||
|
||||
`GET /api/day?date=` vrací `DayOverview` se vším naráz (jídlo, pohyb, bilance),
|
||||
takže `DayPage` si vystačí s jedním voláním.
|
||||
|
||||
@@ -239,6 +251,10 @@ načtení doplní na `HOTOVE`, v úložišti se nic nepřepisuje.
|
||||
`createMealTemplateFromMeal` recept stejného názvu **nepřepíše** (přišel by
|
||||
o suroviny a postup) a odmítne to chybou.
|
||||
|
||||
Jídlo založené ze šablony nese `templateId`. Nastavuje ho jen server
|
||||
(`addMeal` s třetím parametrem) — `MealInput` ho nemá, takže ho klient
|
||||
nepodstrčí a úprava jídla ho zachová.
|
||||
|
||||
Kontrakt má vlastní `MealTemplateInput`, kde je `id` volitelné — `MealTemplate`
|
||||
ho vyžaduje a nešlo by jím posílat novou šablonu.
|
||||
|
||||
|
||||
Reference in new issue
Block a user