UNPKG

garmin-api-handler

Version:
113 lines (96 loc) 2.67 kB
'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;