added fitness
This commit is contained in:
@@ -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),
|
||||
}),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user