trainingpeaks-sdk
Version:
TypeScript SDK for TrainingPeaks API integration
51 lines (50 loc) • 1.95 kB
JavaScript
import { z } from 'zod';
export const WorkoutResponseSchema = z.object({
workout: z.object({
id: z.string().min(1),
name: z.string().min(1).max(200),
date: z.string(),
duration: z.number().nonnegative().finite(),
type: z.string().min(1),
description: z.string().optional(),
}),
});
export const WorkoutsListResponseSchema = z.object({
total: z.number().nonnegative().int(),
workouts: z.array(WorkoutResponseSchema),
});
export const WorkoutStatsSchema = z.object({
totalWorkouts: z.number().nonnegative().int(),
totalDistance: z.number().nonnegative().finite(),
totalDuration: z.number().nonnegative().finite(),
totalCalories: z.number().nonnegative().finite(),
averageDistance: z.number().nonnegative().finite(),
averageDuration: z.number().nonnegative().finite(),
favoriteType: z.string().min(1),
});
export const CreateWorkoutRequestSchema = z.object({
name: z.string().min(1).max(200),
date: z.string(),
duration: z.number().nonnegative().finite(),
type: z.string().min(1),
description: z.string().optional(),
distance: z.number().nonnegative().finite().optional(),
calories: z.number().nonnegative().finite().optional(),
});
export const UpdateWorkoutRequestSchema = z.object({
id: z.string().min(1),
name: z.string().min(1).max(200).optional(),
date: z.string().optional(),
duration: z.number().nonnegative().finite().optional(),
type: z.string().min(1).optional(),
description: z.string().optional(),
distance: z.number().nonnegative().finite().optional(),
calories: z.number().nonnegative().finite().optional(),
});
export const WorkoutFiltersSchema = z.object({
dateFrom: z.string().optional(),
dateTo: z.string().optional(),
type: z.string().min(1).optional(),
limit: z.number().positive().int().optional(),
offset: z.number().nonnegative().int().optional(),
});