trainingpeaks-sdk
Version:
TypeScript SDK for TrainingPeaks API integration
71 lines (70 loc) • 3.31 kB
JavaScript
import { WorkoutStructureBuilder } from '../../domain/builders/workout-structure-builder.js';
import { WorkoutStructureElementBuilder } from '../../domain/builders/workout-structure-element-builder.js';
import { ElementType } from '../../types/index.js';
import { createCooldownStep, createIntervalStep, createRecoveryStep, createSteadyStep, createWarmupStep, } from './workout-steps.js';
export const createIntervalWorkout = (warmupMinutes = 10, intervalMinutes = 5, intervalIntensity = 120, recoveryMinutes = 3, intervals = 6, cooldownMinutes = 10) => {
const builder = new WorkoutStructureBuilder();
const warmupElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createWarmupStep(warmupMinutes))
.build();
builder.addElement(warmupElement);
for (let i = 0; i < intervals; i++) {
const intervalElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createIntervalStep(intervalMinutes, intervalIntensity))
.build();
builder.addElement(intervalElement);
if (i < intervals - 1) {
const recoveryElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createRecoveryStep(recoveryMinutes))
.build();
builder.addElement(recoveryElement);
}
}
const cooldownElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createCooldownStep(cooldownMinutes))
.build();
builder.addElement(cooldownElement);
return builder.build();
};
export const createTempoWorkout = (warmupMinutes = 15, tempoMinutes = 30, tempoIntensity = 90, cooldownMinutes = 10) => {
const builder = new WorkoutStructureBuilder();
const warmupElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createWarmupStep(warmupMinutes))
.build();
builder.addElement(warmupElement);
const tempoElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createSteadyStep(tempoMinutes, tempoIntensity))
.build();
builder.addElement(tempoElement);
const cooldownElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createCooldownStep(cooldownMinutes))
.build();
builder.addElement(cooldownElement);
return builder.build();
};
export const createLongSteadyWorkout = (warmupMinutes = 10, steadyMinutes = 120, steadyIntensity = 75, cooldownMinutes = 10) => {
const builder = new WorkoutStructureBuilder();
const warmupElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createWarmupStep(warmupMinutes))
.build();
builder.addElement(warmupElement);
const steadyElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createSteadyStep(steadyMinutes, steadyIntensity))
.build();
builder.addElement(steadyElement);
const cooldownElement = new WorkoutStructureElementBuilder()
.type(ElementType.STEP)
.addStep(createCooldownStep(cooldownMinutes))
.build();
builder.addElement(cooldownElement);
return builder.build();
};