mirror of
https://github.com/escalante29/healthy-fit.git
synced 2026-03-21 09:08:46 +01:00
All checks were successful
Deploy to VPS / deploy (push) Successful in 24s
- Interactive routine generation wizard with AI refinement loop (generate-draft, refine, save-draft endpoints + RoutineWizard modal component) - Replace +/- stepper buttons with slider controls for reps/weight during workout - Persist user-modified reps/weight across sets of the same exercise - Add pause/resume by tapping timer dials, with back-button confirmation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
import client from './client';
|
|
import type { KettlebellSession, KettlebellSetLog, DraftSession } from '../types/kettlebell';
|
|
|
|
export interface GenerateSessionRequest {
|
|
focus: string;
|
|
duration_minutes: number;
|
|
available_weights: number[];
|
|
}
|
|
|
|
export interface RefineRequest {
|
|
draft: DraftSession;
|
|
feedback: string;
|
|
focus: string;
|
|
duration_minutes: number;
|
|
available_weights: number[];
|
|
}
|
|
|
|
export interface SaveDraftRequest {
|
|
draft: DraftSession;
|
|
}
|
|
|
|
export interface LogSetRequest {
|
|
exercise_order: number;
|
|
set_number: number;
|
|
actual_reps: number;
|
|
actual_weight_kg: number;
|
|
actual_duration_seconds: number;
|
|
perceived_effort: number;
|
|
}
|
|
|
|
export interface CompleteSessionRequest {
|
|
notes?: string;
|
|
}
|
|
|
|
export const generateSession = (data: GenerateSessionRequest) =>
|
|
client.post<KettlebellSession>('/kettlebell/generate', data).then(r => r.data);
|
|
|
|
export const getSessions = () =>
|
|
client.get<KettlebellSession[]>('/kettlebell/').then(r => r.data);
|
|
|
|
export const getSession = (id: number) =>
|
|
client.get<KettlebellSession>(`/kettlebell/${id}`).then(r => r.data);
|
|
|
|
export const startSession = (id: number) =>
|
|
client.patch<KettlebellSession>(`/kettlebell/${id}/start`).then(r => r.data);
|
|
|
|
export const logSet = (id: number, data: LogSetRequest) =>
|
|
client.post<KettlebellSetLog>(`/kettlebell/${id}/sets`, data).then(r => r.data);
|
|
|
|
export const getSets = (id: number) =>
|
|
client.get<KettlebellSetLog[]>(`/kettlebell/${id}/sets`).then(r => r.data);
|
|
|
|
export const completeSession = (id: number, data: CompleteSessionRequest = {}) =>
|
|
client.patch<KettlebellSession>(`/kettlebell/${id}/complete`, data).then(r => r.data);
|
|
|
|
export const retrySession = (id: number) =>
|
|
client.post<KettlebellSession>(`/kettlebell/${id}/retry`).then(r => r.data);
|
|
|
|
export const abandonSession = (id: number) =>
|
|
client.patch<KettlebellSession>(`/kettlebell/${id}/abandon`).then(r => r.data);
|
|
|
|
export const deleteSession = (id: number) =>
|
|
client.delete(`/kettlebell/${id}`);
|
|
|
|
export const generateDraft = (data: GenerateSessionRequest) =>
|
|
client.post<DraftSession>('/kettlebell/generate-draft', data).then(r => r.data);
|
|
|
|
export const refineDraft = (data: RefineRequest) =>
|
|
client.post<DraftSession>('/kettlebell/refine', data).then(r => r.data);
|
|
|
|
export const saveDraft = (data: SaveDraftRequest) =>
|
|
client.post<KettlebellSession>('/kettlebell/save-draft', data).then(r => r.data);
|