more work

This commit is contained in:
Cipher Vance
2026-02-18 09:56:14 -06:00
parent 8634a76a44
commit dfc81b4485
4 changed files with 133 additions and 4 deletions

View File

@@ -3,7 +3,7 @@ import {
getWorkoutsByMonth,
getTodaysWorkouts,
getWeeksWorkouts,
markWorkoutComplete,
completeWorkout as apiCompleteWorkout,
} from '../services/api';
import type { ApiWorkout } from '../types/api';
import type { Workout, WorkoutInterval } from '../types/workout';
@@ -166,17 +166,19 @@ export function useCalendarWorkouts(): UseCalendarWorkoutsReturn {
maxPower?: number;
maxHr?: number;
caloriesBurned?: number;
syncToStrava?: boolean;
}
) => {
try {
await markWorkoutComplete(workoutId, {
duration: Math.round(metrics.duration / 60),
await apiCompleteWorkout(workoutId, {
duration: Math.round(metrics.duration),
distance: metrics.distance,
avg_power: metrics.avgPower,
avg_hr: metrics.avgHr,
max_power: metrics.maxPower,
max_hr: metrics.maxHr,
calories_burned: metrics.caloriesBurned,
sync_to_strava: metrics.syncToStrava ?? true,
});
await refresh();
} catch (err) {

View File

@@ -1,5 +1,5 @@
import { api } from './client';
import type { ApiWorkout, WorkoutTemplate, WorkoutUpdatePayload } from '../../types/api';
import type { ApiWorkout, WorkoutTemplate, WorkoutUpdatePayload, WorkoutCompletionPayload } from '../../types/api';
export async function getWorkouts(): Promise<ApiWorkout[]> {
return api.get<ApiWorkout[]>('/protected/workouts');
@@ -35,6 +35,13 @@ export async function markWorkoutComplete(
});
}
export async function completeWorkout(
id: number,
completionData: WorkoutCompletionPayload
): Promise<ApiWorkout> {
return api.post<ApiWorkout>(`/protected/workouts/complete?id=${id}`, completionData);
}
export async function skipWorkout(id: number, notes?: string): Promise<ApiWorkout> {
return api.put<ApiWorkout>(`/protected/workouts?id=${id}`, {
status: 'skipped',

View File

@@ -151,3 +151,15 @@ export interface WorkoutUpdatePayload {
calories_burned?: number;
notes?: string;
}
export interface WorkoutCompletionPayload {
duration: number;
distance?: number;
avg_power?: number;
avg_hr?: number;
max_power?: number;
max_hr?: number;
calories_burned?: number;
notes?: string;
sync_to_strava?: boolean;
}