@@ -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