trainingpeaks-sdk
Version:
TypeScript SDK for TrainingPeaks API integration
57 lines (56 loc) • 1.89 kB
JavaScript
import { IntensityMetric, IntensityTargetType, LengthMetric, LengthUnit, } from '../../types/index.js';
export class WorkoutStructureBuilder {
constructor(averageSpeed = 25) {
this.structure = {
structure: [],
polyline: [],
primaryLengthMetric: LengthMetric.DURATION,
primaryIntensityMetric: IntensityMetric.PERCENT_OF_THRESHOLD_POWER,
primaryIntensityTargetOrRange: IntensityTargetType.TARGET,
};
this.currentTime = 0;
this.averageSpeed = averageSpeed;
}
setAverageSpeed(speed) {
this.averageSpeed = speed;
return this;
}
addElement(element) {
element.begin = this.currentTime;
const lengthInSeconds = this.convertLengthToSeconds(element.length);
element.end = this.currentTime + lengthInSeconds;
this.currentTime = element.end;
this.structure.structure.push(element);
return this;
}
addElements(elements) {
elements.forEach((element) => this.addElement(element));
return this;
}
build() {
return { ...this.structure };
}
convertLengthToSeconds(length) {
switch (length.unit) {
case LengthUnit.SECOND: {
return length.value;
}
case LengthUnit.MINUTE: {
return length.value * 60;
}
case LengthUnit.HOUR: {
return length.value * 3600;
}
case LengthUnit.KILOMETER:
case LengthUnit.MILE: {
const distanceInKm = length.unit === LengthUnit.MILE
? length.value * 1.60934
: length.value;
return (distanceInKm / this.averageSpeed) * 3600;
}
default: {
return length.value * 60;
}
}
}
}