garmin-api-handler
Version:
Unofficial handler for Garmin connect API
113 lines (96 loc) • 2.67 kB
JavaScript
'use strict';
var fitnessModels = require('fitness-models');
var luxon = require('luxon');
var mathjs = require('mathjs');
var category = require('../constants/category.js');
class Activity extends fitnessModels.Workout {
constructor(options) {
super(options);
this.typeId = options.typeId;
this.id = options.id;
this.source = options.source;
this.category = options.category || category.Category.UNCATEGORIZED;
this.isRace = this.category === category.Category.RACE;
this.isCommute = this.category === category.Category.TRANSPORTATION;
}
static fromApi(activity) {
return new Activity({
start: luxon.DateTime.fromFormat(activity.summaryDTO.startTimeLocal, "yyyy-MM-dd'T'HH:mm:ss.0", {
zone: activity.timeZoneUnitDTO.timeZone
}),
id: activity.activityId,
duration: luxon.Duration.fromObject({
seconds: activity.summaryDTO.duration
}),
typeId: activity.activityTypeDTO.typeKey,
source: activity,
distance: activity.summaryDTO.distance != null ? mathjs.unit(activity.summaryDTO.distance, 'm') : undefined,
title: activity.activityName,
category: activity.eventTypeDTO.typeKey,
avgHeartRate: activity.summaryDTO.averageHR,
maxHeartRate: activity.summaryDTO.maxHR
});
}
static fromListApi(activity) {
return new Activity({
start: luxon.DateTime.fromFormat(activity.startTimeLocal, 'yyyy-MM-dd HH:mm:ss', {
zone: 'Europe/Prague'
}),
id: activity.activityId,
duration: luxon.Duration.fromObject({
seconds: activity.duration
}),
typeId: activity.activityType.typeKey,
source: activity,
distance: activity.distance != null ? mathjs.unit(activity.distance, 'm') : undefined,
title: activity.activityName,
category: activity.eventType.typeKey,
avgHeartRate: activity.averageHR,
maxHeartRate: activity.maxHR
});
}
clone(extension) {
return new Activity({ ...this.toObject(),
...extension
});
}
getId() {
return this.id;
}
setId(id) {
return this.clone({
id
});
}
getTypeId() {
return this.typeId;
}
getTypeName() {
return this.typeId;
}
setTypeId(typeId) {
return this.clone({
typeId
});
}
getSource() {
return this.source;
}
getCategory() {
return this.category;
}
setCategory(category) {
return this.clone({
category
});
}
toObject() {
return { ...super.toObject(),
id: this.id,
typeId: this.typeId,
source: this.source,
category: this.category
};
}
}
module.exports = Activity;