added fitness

This commit is contained in:
2026-06-10 09:12:50 +03:00
parent 0b39692300
commit d0bdd1e95c
25 changed files with 2082 additions and 7 deletions
+118
View File
@@ -81,6 +81,99 @@ export interface MemoryFact {
updated_at?: string | null;
}
export interface FitnessComputed {
bmr: number;
tdee: number;
bmi: number;
}
export interface FitnessProfile {
sex?: string;
age?: number;
height_cm?: number;
weight_kg?: number;
activity_level?: string;
goal?: string;
target_weight_kg?: number | null;
weekly_workouts?: number;
calorie_target?: number;
protein_g?: number;
fat_g?: number;
carbs_g?: number;
water_l?: number;
computed?: FitnessComputed;
}
export interface FoodLogItem {
id: number;
meal_type: string;
description: string;
calories: number;
protein_g: number;
fat_g: number;
carbs_g: number;
estimated: boolean;
logged_at?: string;
}
export interface WaterLogItem {
id: number;
amount_ml: number;
logged_at?: string;
}
export interface WorkoutLogItem {
id: number;
title: string;
notes?: string;
duration_min?: number | null;
exercises?: unknown[];
logged_at?: string;
}
export interface FitnessDailySummary {
date: string;
totals: {
calories: number;
protein_g: number;
fat_g: number;
carbs_g: number;
water_ml: number;
};
targets: {
calories: number;
protein_g: number;
fat_g: number;
carbs_g: number;
water_ml: number;
};
meals: FoodLogItem[];
water: WaterLogItem[];
workouts: WorkoutLogItem[];
}
export interface BodyMetric {
id: number;
weight_kg: number;
recorded_at?: string;
}
export interface FitnessReminder {
id: number;
kind: string;
hour: number;
minute: number;
interval_hours?: number | null;
enabled: boolean;
}
export interface FitnessSnapshot {
profile: FitnessProfile | null;
today: FitnessDailySummary;
body_metrics: BodyMetric[];
reminders: FitnessReminder[];
}
export interface MemorySnapshot {
profile: UserProfile;
facts: MemoryFact[];
@@ -245,4 +338,29 @@ export const api = {
forgetMemoryFact: (id: number) =>
request<{ ok: boolean }>(`/api/v1/memory/facts/${id}`, { method: "DELETE" }),
getFitnessSnapshot: () => request<FitnessSnapshot>("/api/v1/fitness"),
updateFitnessProfile: (updates: Partial<FitnessProfile>) =>
request<{ ok: boolean; profile: FitnessProfile }>("/api/v1/fitness/profile", {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(updates),
}),
deleteFitnessMeal: (id: number) =>
request<{ ok: boolean }>(`/api/v1/fitness/meals/${id}`, { method: "DELETE" }),
deleteFitnessWater: (id: number) =>
request<{ ok: boolean }>(`/api/v1/fitness/water/${id}`, { method: "DELETE" }),
updateFitnessReminder: (
kind: string,
updates: { enabled?: boolean; hour?: number; minute?: number; interval_hours?: number }
) =>
request<{ ok: boolean }>(`/api/v1/fitness/reminders/${kind}`, {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(updates),
}),
};