Files
healthy-fit/frontend/src/api/kettlebell.ts
Carlos Escalante 11e086166c
All checks were successful
Deploy to VPS / deploy (push) Successful in 24s
Add interactive routine wizard, slider controls, value persistence, and timer pause
- 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>
2026-03-20 22:29:06 -06:00

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);