Skip to content

Commit d11cbff

Browse files
committed
Merge branch 'hotfix/1.5.4'
2 parents 310f592 + 3924a60 commit d11cbff

4 files changed

Lines changed: 93 additions & 111 deletions

File tree

src/application/service/user.auth.data.service.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ export class UserAuthDataService implements IUserAuthDataService {
103103
.pubFitbitRevoke({ child_id: userId })
104104
.then(() => this._logger.info(`Fitbit revoke event for child ${userId} successfully published!`))
105105
.catch((err) => this._logger.error(`There was an error publishing Fitbit revoke event for child ${userId}. ${err.message}`))
106-
107106
return resolve(true)
108107
} else {
109108
return resolve(false)
@@ -127,12 +126,13 @@ export class UserAuthDataService implements IUserAuthDataService {
127126
return new Promise<DataSync>((resolve, reject) => {
128127
try {
129128
ObjectIdValidator.validate(userId)
130-
this._userAuthDataRepo.getUserAuthDataByUserId(userId)
129+
this._userAuthDataRepo
130+
.getUserAuthDataByUserId(userId)
131131
.then(async data => {
132132
if (!data || !data.fitbit) {
133133
throw new ValidationException(
134-
'User does not have authentication data. Please, submit authentication data ' +
135-
'and try again.')
134+
'User does not have authentication data. Please, submit authentication data and try again.'
135+
)
136136
}
137137
try {
138138
const result: DataSync = await this.syncFitbitData(data.fitbit!, userId)

src/infrastructure/repository/fitbit.data.repository.ts

Lines changed: 87 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,10 @@ export class FitbitDataRepository implements IFitbitDataRepository {
152152
minutesVeryActiveLogs = result[6] || []
153153

154154
// Filter list of data for does not sync data that was saved
155-
const weights: Array<any> = await this.filterDataAlreadySync(syncWeights, ResourceDataType.BODY)
156-
const sleep: Array<any> = await this.filterDataAlreadySync(syncSleep, ResourceDataType.SLEEP)
157-
const activities: Array<any> = await this.filterDataAlreadySync(syncActivities, ResourceDataType.ACTIVITIES)
155+
const weights: Array<any> = await this.filterDataAlreadySync(syncWeights, ResourceDataType.BODY, userId)
156+
const sleep: Array<any> = await this.filterDataAlreadySync(syncSleep, ResourceDataType.SLEEP, userId)
157+
const activities: Array<any> = await this.filterDataAlreadySync(syncActivities,
158+
ResourceDataType.ACTIVITIES, userId)
158159

159160
const weightList: Array<Weight> = await this.parseWeightList(weights, userId)
160161
const activitiesList: Array<PhysicalActivity> = await this.parsePhysicalActivityList(activities, userId)
@@ -174,7 +175,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
174175
.pubSyncPhysicalActivity(activitiesList.map(item => item.toJSON()))
175176
.then(() => {
176177
this._logger.info(`Physical activities from ${userId} successful published!`)
177-
this.saveResourceList(activities, data.user_id!)
178+
this.saveResourceList(activities, userId)
178179
.then(() => this._logger.info(`Physical Activity logs from ${userId} saved successful!`))
179180
.catch(err => this._logger.error(`Error at save physical activities logs: ${err.message}`))
180181
})
@@ -185,7 +186,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
185186
.pubSyncWeight(weightList.map(item => item.toJSON()))
186187
.then(() => {
187188
this._logger.info(`Weight Measurements from ${userId} successful published!`)
188-
this.saveResourceList(weights, data.user_id!)
189+
this.saveResourceList(weights, userId)
189190
.then(() => this._logger.info(`Weight logs from ${data.user_id} saved successful!`))
190191
.catch(err => this._logger.error(`Error at save weight logs: ${err.message}`))
191192
})
@@ -197,7 +198,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
197198
.pubSyncSleep(sleepList.map(item => item.toJSON()))
198199
.then(() => {
199200
this._logger.info(`Sleep from ${userId} successful published!`)
200-
this.saveResourceList(sleep, data.user_id!)
201+
this.saveResourceList(sleep, userId)
201202
.then(() => this._logger.info(`Sleep logs from ${userId} saved successful!`))
202203
.catch(err => this._logger.error(`Error at save sleep logs: ${err.message}`))
203204
})
@@ -300,12 +301,12 @@ export class FitbitDataRepository implements IFitbitDataRepository {
300301
})
301302
}
302303

303-
private async filterDataAlreadySync(data: Array<any>, type: string): Promise<Array<any>> {
304+
private async filterDataAlreadySync(data: Array<any>, type: string, userId: string): Promise<Array<any>> {
304305
try {
305306
const resources: Array<any> = []
306307
if (!data || !data.length) return resources
307308
for await(const item of data) {
308-
const query: Query = new Query().fromJSON({ filters: { 'resource.logId': item.logId } })
309+
const query: Query = new Query().fromJSON({ filters: { 'resource.logId': item.logId, 'user_id': userId } })
309310
if (type === ResourceDataType.BODY) query.addFilter({ 'resource.weight': item.weight })
310311
const exists: boolean = await this._resourceRepo.checkExists(query)
311312
if (!exists) resources.push(item)
@@ -321,7 +322,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
321322
this.getUserBodyDataFromInterval(data.access_token!, date, date)
322323
.then(async weights => {
323324
if (weights && weights.length) {
324-
const resources: Array<any> = await this.filterDataAlreadySync(weights, ResourceDataType.BODY)
325+
const resources: Array<any> = await this.filterDataAlreadySync(weights, ResourceDataType.BODY, userId)
325326

326327
// Parse list of weights
327328
const weightList: Array<Weight> = this.parseWeightList(resources, userId)
@@ -330,7 +331,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
330331
this._eventBus.bus.pubSyncWeight(weightList.map(item => item.toJSON()))
331332
.then(() => {
332333
this._logger.info(`Weight Measurements from ${userId} successful published!`)
333-
this.saveResourceList(resources, data.user_id!)
334+
this.saveResourceList(resources, userId)
334335
.then(() => {
335336
// If publish is successful, save the sync resources on database
336337
this._logger.info(`Weight logs from ${userId} saved successful!`)
@@ -353,7 +354,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
353354
.then(async activities => {
354355
if (activities && activities.length) {
355356
const resources: Array<any> =
356-
await this.filterDataAlreadySync(activities, ResourceDataType.ACTIVITIES)
357+
await this.filterDataAlreadySync(activities, ResourceDataType.ACTIVITIES, userId)
357358

358359
// Parse list of activities
359360
const activityList: Array<PhysicalActivity> = this.parsePhysicalActivityList(resources, userId)
@@ -362,7 +363,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
362363
this._eventBus.bus.pubSyncPhysicalActivity(activityList.map(item => item.toJSON()))
363364
.then(() => {
364365
this._logger.info(`Physical activities from ${userId} successful published!`)
365-
this.saveResourceList(resources, data.user_id!)
366+
this.saveResourceList(resources, userId)
366367
.then(() => {
367368
// If publish is successful, save the sync resources on database
368369
this._logger.info(`Physical activities from ${userId} saved successful!`)
@@ -413,7 +414,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
413414
this.getUserSleep(data.access_token!, 1, date)
414415
.then(async sleeps => {
415416
if (sleeps && sleeps.length) {
416-
const resources: Array<any> = await this.filterDataAlreadySync(sleeps, ResourceDataType.SLEEP)
417+
const resources: Array<any> = await this.filterDataAlreadySync(sleeps, ResourceDataType.SLEEP, userId)
417418

418419
// Parse list of sleep
419420
const sleepList: Array<Sleep> = this.parseSleepList(resources, userId)
@@ -422,7 +423,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
422423
this._eventBus.bus.pubSyncSleep(sleepList.map(item => item.toJSON()))
423424
.then(() => {
424425
this._logger.info(`Sleep from ${userId} successful published!`)
425-
this.saveResourceList(resources, data.user_id!)
426+
this.saveResourceList(resources, userId)
426427
.then(() => {
427428
// If publish is successful, save the sync resources on database
428429
this._logger.info(`Sleep logs from ${userId} saved successful!`)
@@ -460,108 +461,90 @@ export class FitbitDataRepository implements IFitbitDataRepository {
460461
})
461462
}
462463

463-
private async syncWeightData(data: FitbitAuthData): Promise<Array<any>> {
464-
try {
465-
const result: Array<any> = (data.last_sync && moment().diff(moment(data.last_sync), 'days') <= 31) ?
466-
await this.getUserBodyDataFromInterval(
467-
data.access_token!,
468-
moment(data.last_sync).format('YYYY-MM-DD'),
469-
moment().format('YYYY-MM-DD'))
470-
: [
471-
...await this.getUserBodyDataFromInterval(
472-
data.access_token!,
473-
moment().subtract(1, 'month').format('YYYY-MM-DD'),
474-
moment().format('YYYY-MM-DD')),
475-
...await this.getUserBodyDataFromInterval(
476-
data.access_token!,
477-
moment().subtract(2, 'month').format('YYYY-MM-DD'),
478-
moment().subtract(1, 'month').format('YYYY-MM-DD')),
479-
...await this.getUserBodyDataFromInterval(
480-
data.access_token!,
481-
moment().subtract(3, 'month').format('YYYY-MM-DD'),
482-
moment().subtract(2, 'month').format('YYYY-MM-DD')),
483-
...await this.getUserBodyDataFromInterval(
484-
data.access_token!,
485-
moment().subtract(4, 'month').format('YYYY-MM-DD'),
486-
moment().subtract(3, 'month').format('YYYY-MM-DD')),
487-
...await this.getUserBodyDataFromInterval(
464+
private syncWeightData(data: FitbitAuthData): Promise<Array<any>> {
465+
return new Promise<Array<any>>(async (resolve, reject) => {
466+
try {
467+
if ((data.last_sync && moment().diff(moment(data.last_sync), 'days') <= 31)) {
468+
return resolve(await this.getUserBodyDataFromInterval(
488469
data.access_token!,
489-
moment().subtract(5, 'month').format('YYYY-MM-DD'),
490-
moment().subtract(4, 'month').format('YYYY-MM-DD')),
491-
...await this.getUserBodyDataFromInterval(
470+
moment(data.last_sync).format('YYYY-MM-DD'),
471+
moment().format('YYYY-MM-DD')))
472+
}
473+
474+
const result: Array<any> = new Array<any>()
475+
result.push(
476+
this.getUserBodyDataFromInterval(
492477
data.access_token!,
493-
moment().subtract(6, 'month').format('YYYY-MM-DD'),
494-
moment().subtract(5, 'month').format('YYYY-MM-DD'))
495-
]
496-
return Promise.resolve(result)
497-
} catch (err) {
498-
return Promise.reject(err)
499-
}
478+
moment().subtract(1, 'month').format('YYYY-MM-DD'),
479+
moment().format('YYYY-MM-DD'))
480+
)
481+
for (let i = 1; i < 4; i++) {
482+
result.push(
483+
this.getUserBodyDataFromInterval(
484+
data.access_token!,
485+
moment().subtract(i + 1, 'month').format('YYYY-MM-DD'),
486+
moment().subtract(i, 'month').format('YYYY-MM-DD'))
487+
)
488+
}
489+
return resolve((await Promise.all(result)).reduce((prev, current) => prev.concat(current), []))
490+
} catch (err) {
491+
return reject(err)
492+
}
493+
})
500494
}
501495

496+
// @ts-ignore
502497
private async syncSleepData(data: FitbitAuthData): Promise<Array<any>> {
503-
try {
504-
const result: Array<any> = data.last_sync ?
505-
await this.getUserSleep(
506-
data.access_token!,
507-
100,
508-
moment(data.last_sync).format('YYYY-MM-DD')) :
509-
[
510-
...await this.getUserSleepFromInterval(
511-
data.access_token!,
512-
moment().subtract(1, 'month').format('YYYY-MM-DD'),
513-
moment().format('YYYY-MM-DD')),
514-
...await this.getUserSleepFromInterval(
515-
data.access_token!,
516-
moment().subtract(2, 'month').format('YYYY-MM-DD'),
517-
moment().subtract(1, 'month').format('YYYY-MM-DD')),
518-
...await this.getUserSleepFromInterval(
519-
data.access_token!,
520-
moment().subtract(3, 'month').format('YYYY-MM-DD'),
521-
moment().subtract(2, 'month').format('YYYY-MM-DD')),
522-
...await this.getUserSleepFromInterval(
523-
data.access_token!,
524-
moment().subtract(4, 'month').format('YYYY-MM-DD'),
525-
moment().subtract(3, 'month').format('YYYY-MM-DD')),
526-
...await this.getUserSleepFromInterval(
498+
return new Promise<Array<any>>(async (resolve, reject) => {
499+
try {
500+
if ((data.last_sync && moment().diff(moment(data.last_sync), 'days') <= 31)) {
501+
return resolve(await this.getUserSleep(
527502
data.access_token!,
528-
moment().subtract(5, 'month').format('YYYY-MM-DD'),
529-
moment().subtract(4, 'month').format('YYYY-MM-DD')),
530-
...await this.getUserSleepFromInterval(
503+
100,
504+
moment(data.last_sync).format('YYYY-MM-DD'))
505+
)
506+
}
507+
const result: Array<any> = new Array<any>()
508+
result.push(
509+
this.getUserSleepFromInterval(
531510
data.access_token!,
532-
moment().subtract(6, 'month').format('YYYY-MM-DD'),
533-
moment().subtract(5, 'month').format('YYYY-MM-DD'))
534-
]
535-
return Promise.resolve(result)
536-
} catch (err) {
537-
return Promise.reject(err)
538-
}
511+
moment().subtract(1, 'month').format('YYYY-MM-DD'),
512+
moment().format('YYYY-MM-DD'))
513+
)
514+
for (let i = 1; i < 12; i++) {
515+
result.push(
516+
this.getUserSleepFromInterval(
517+
data.access_token!,
518+
moment().subtract(i + 1, 'month').format('YYYY-MM-DD'),
519+
moment().subtract(i, 'month').format('YYYY-MM-DD'))
520+
)
521+
}
522+
return resolve((await Promise.all(result)).reduce((prev, current) => prev.concat(current), []))
523+
} catch (err) {
524+
return reject(err)
525+
}
526+
})
539527
}
540528

541-
private async syncUserActivities(data: FitbitAuthData): Promise<Array<any>> {
542-
try {
543-
const result: Array<any> = data.last_sync ?
544-
await this.getUserActivities(data.access_token!, 100, moment(data.last_sync).format('YYYY-MM-DD')) :
545-
await this.getLastUserActivities(data.access_token!)
546-
return Promise.resolve(result)
547-
} catch (err) {
548-
return Promise.reject(err)
529+
// @ts-ignore
530+
private syncUserActivities(data: FitbitAuthData): Promise<Array<any>> {
531+
if (data.last_sync) {
532+
return this.getUserActivities(
533+
data.access_token!, 100,
534+
moment(data.last_sync).format('YYYY-MM-DD')
535+
)
549536
}
537+
return this.getLastUserActivities(data.access_token!)
550538
}
551539

552540
private async syncUserActivitiesLogs(data: FitbitAuthData, lastSync: string, resource: string): Promise<Array<any>> {
553-
try {
554-
const result: Array<any> = await this.getUserActivityLogs(
555-
data.access_token!,
556-
resource,
557-
lastSync ? moment(lastSync).format('YYYY-MM-DD') :
558-
moment().subtract(6, 'month').format('YYYY-MM-DD'),
559-
'today'
560-
)
561-
return Promise.resolve(result)
562-
} catch (err) {
563-
return Promise.reject(err)
564-
}
541+
return this.getUserActivityLogs(
542+
data.access_token!,
543+
resource,
544+
lastSync ? moment(lastSync).format('YYYY-MM-DD') :
545+
moment().subtract(12, 'month').format('YYYY-MM-DD'),
546+
'today'
547+
)
565548
}
566549

567550
private async getUserActivityLogs(token: string, resource: string, baseDate: string, endDate: string): Promise<any> {
@@ -743,7 +726,6 @@ export class FitbitDataRepository implements IFitbitDataRepository {
743726
lightly_active_minutes: this.parseLogs(userId, 'lightly_active_minutes', minutesLightlyActiveLogs),
744727
sedentary_minutes: this.parseLogs(userId, 'sedentary_minutes', minutesSedentaryLogs)
745728
})
746-
747729
}
748730

749731
private parseLogs(userId: string, logType: string, logs: Array<any>): Array<Log> {
@@ -824,7 +806,7 @@ export class FitbitDataRepository implements IFitbitDataRepository {
824806
}
825807

826808
// MongoDb Error Listener
827-
protected mongoDBErrorListener(err: any): ValidationException | ConflictException | RepositoryException | undefined {
809+
private mongoDBErrorListener(err: any): ValidationException | ConflictException | RepositoryException | undefined {
828810
if (err && err.name) {
829811
if (err.name === 'ValidationError') {
830812
return new ValidationException('Required fields were not provided!', err.message)

0 commit comments

Comments
 (0)