feat: přidána midnight snack

feat: přidány statistiky pohybu
This commit is contained in:
Ondřej Anděl committed 2026-10-02 19:33:08 +02:00
1 parent 8dac67bdd1
commit f1ce3ff297
13 files changed
+833 -163

No files matched your search

+2
View File
@@ -28,6 +28,8 @@ paths:
# Statistiky (/api/stats)
/stats/summary:
$ref: "./paths/stats/summary.yml"
/stats/activity:
$ref: "./paths/stats/activity.yml"
# Přehled dne (/api/day)
/day:
+278
View File
@@ -9,6 +9,7 @@ MealType:
- OBED
- ODPOLEDNI_SVACINA
- VECERE
- PULNOCNI_SVACINA
- JINE
MealEntry:
@@ -74,6 +75,9 @@ MealEntry:
Klíč pro rozpoznání duplicit při opakovaném importu stejného období.
Odvozuje se z data, typu, názvu jídla a částky importovaného řádku.
type: string
templateId:
description: Identifikátor šablony jídla, ze které záznam vznikl nebo ke které patří
type: string
createdAt:
description: Čas vzniku záznamu
type: string
@@ -977,3 +981,277 @@ RecipeIngredient:
price:
description: Cena použitého množství v haléřích
type: integer
ActivityPeriodTotal:
description: Výdej pohybem za jedno období (den, měsíc nebo rok)
type: object
additionalProperties: false
required:
- period
- templateCalories
- plannedCalories
- extraCalories
properties:
period:
description: Označení období — YYYY-MM-DD (den), YYYY-MM (měsíc) nebo YYYY (rok)
type: string
templateCalories:
description: Skutečně spálené kcal aktivitami založenými ze šablon
type: integer
plannedCalories:
description: Kolik kcal šablony slibovaly v okamžiku, kdy se použily
type: integer
extraCalories:
description: Spálené kcal aktivitami mimo šablony
type: integer
TemplateUsageTotal:
description: Plnění jedné šablony tréninku za období
type: object
additionalProperties: false
required:
- templateId
- name
- dayCount
- plannedCalories
- actualCalories
- plannedItemCount
- doneItemCount
properties:
templateId:
description: Identifikátor šablony
type: string
name:
description: Název šablony v době použití
type: string
dayCount:
description: Počet dní, ve kterých se šablona použila
type: integer
plannedCalories:
description: Součet kcal, které šablona slibovala
type: integer
actualCalories:
description: Součet kcal, které aktivity ze šablony skutečně spálily
type: integer
plannedItemCount:
description: Kolik cviků šablona založila
type: integer
doneItemCount:
description: Kolik z nich ve dni zůstalo (smazané se berou jako neprovedené)
type: integer
ActivityGroupTotal:
description: Součet výdeje jedné skupiny aktivit
type: object
additionalProperties: false
required:
- key
- calories
- count
properties:
key:
description: Klíč skupiny — název aktivity
type: string
calories:
description: Spálené kcal
type: integer
count:
description: Počet záznamů
type: integer
ActivityStats:
description: |
Statistiky výdeje pohybem za zvolené období. Aktivity se dělí na ty ze šablon
a ty mimo šablony; u šablon se porovnává skutečnost s plánem.
type: object
additionalProperties: false
required:
- from
- to
- totalCalories
- templateCalories
- plannedCalories
- extraCalories
- entryCount
- dayCount
- byDay
- byMonth
- byYear
- byTemplate
- extras
- days
properties:
from:
description: Začátek období (YYYY-MM-DD, včetně)
type: string
format: date
to:
description: Konec období (YYYY-MM-DD, včetně)
type: string
format: date
totalCalories:
description: Celkem spálené kcal pohybem
type: integer
templateCalories:
description: Z toho aktivity ze šablon
type: integer
plannedCalories:
description: |
Kolik kcal šablony slibovaly. Rozdíl proti templateCalories je odchylka
od šablon — záporný znamená, že se něco vynechalo nebo zkrátilo.
type: integer
extraCalories:
description: Z toho aktivity mimo šablony
type: integer
entryCount:
description: Počet aktivit v období
type: integer
dayCount:
description: Počet dní, ve kterých je alespoň jedna aktivita
type: integer
byDay:
description: Součty po dnech, vzestupně
type: array
items:
$ref: "#/ActivityPeriodTotal"
byMonth:
description: Součty po měsících, vzestupně
type: array
items:
$ref: "#/ActivityPeriodTotal"
byYear:
description: Součty po letech, vzestupně
type: array
items:
$ref: "#/ActivityPeriodTotal"
byTemplate:
description: Plnění jednotlivých šablon, sestupně dle plánu
type: array
items:
$ref: "#/TemplateUsageTotal"
extras:
description: Aktivity mimo šablony seskupené dle názvu, sestupně dle kcal
type: array
items:
$ref: "#/ActivityGroupTotal"
days:
description: Detail každého dne s pohybem, vzestupně dle data
type: array
items:
$ref: "#/ActivityDayStats"
ActivityDayStats:
description: Výdej jednoho dne — použité šablony s odchylkami a aktivity mimo ně
type: object
additionalProperties: false
required:
- date
- totalCalories
- templates
- extraCalories
- extras
properties:
date:
type: string
format: date
totalCalories:
description: Celkem spálené kcal pohybem v tento den
type: integer
templates:
description: Šablony použité v tento den
type: array
items:
$ref: "#/TemplateDayUsage"
extraCalories:
description: Součet kcal aktivit mimo šablony
type: integer
extras:
description: Jednotlivé aktivity mimo šablony
type: array
items:
$ref: "#/ActivitySummaryItem"
TemplateDayUsage:
description: Použití jedné šablony v konkrétní den
type: object
additionalProperties: false
required:
- templateId
- name
- plannedCalories
- actualCalories
- hasPlan
- deviations
properties:
templateId:
type: string
name:
description: Název šablony v době použití
type: string
plannedCalories:
type: integer
actualCalories:
type: integer
hasPlan:
description: |
False u aktivit ze šablony, ke kterým se plán neuložil (cvik přesunutý
z jiného dne). Odchylku u nich zjistit nejde.
type: boolean
deviations:
description: Cviky šablony, které se neprovedly nebo provedly jinak
type: array
items:
$ref: "#/PlanDeviation"
PlanDeviationKind:
description: |
ODEBRANO — cvik ze šablony ve dni chybí.
UPRAVENO — cvik je, ale s jiným množstvím, počtem sérií nebo násobkem.
type: string
enum:
- ODEBRANO
- UPRAVENO
PlanDeviation:
description: Odchylka jednoho cviku od plánu šablony
type: object
additionalProperties: false
required:
- kind
- planned
properties:
kind:
$ref: "#/PlanDeviationKind"
planned:
$ref: "#/ActivitySummaryItem"
actual:
description: Skutečné provedení; u odebraného cviku chybí
allOf:
- $ref: "#/ActivitySummaryItem"
ActivitySummaryItem:
description: Stručný popis jedné aktivity pro statistiky
type: object
additionalProperties: false
required:
- name
- unit
- quantity
- calories
properties:
name:
type: string
unit:
$ref: "#/ActivityUnit"
quantity:
description: Množství na jednu sérii
type: integer
sets:
description: Počet sérií, chybí-li, jedna
type: integer
multiplier:
description: Násobek, chybí-li, 1
type: number
calories:
description: Spálené kcal včetně násobku
type: integer