1717
1818package org .radarbase .connect .rest .fitbit .route ;
1919
20- import static java .time .format .DateTimeFormatter .ISO_LOCAL_TIME ;
21- import static java .time .temporal .ChronoUnit .SECONDS ;
20+ import static java .time .ZoneOffset .UTC ;
2221
2322import io .confluent .connect .avro .AvroData ;
23+
24+ import java .time .Instant ;
25+ import java .time .temporal .ChronoUnit ;
26+ import java .util .List ;
2427import java .util .stream .Stream ;
2528import org .radarbase .connect .rest .fitbit .converter .FitbitIntradayHeartRateAvroConverter ;
2629import org .radarbase .connect .rest .fitbit .request .FitbitRequestGenerator ;
2730import org .radarbase .connect .rest .fitbit .request .FitbitRestRequest ;
2831import org .radarbase .connect .rest .fitbit .user .User ;
2932import org .radarbase .connect .rest .fitbit .user .UserRepository ;
33+ import org .radarbase .connect .rest .fitbit .util .DateRange ;
3034
3135public class FitbitIntradayHeartRateRoute extends FitbitPollingRoute {
3236 private final FitbitIntradayHeartRateAvroConverter converter ;
@@ -39,15 +43,22 @@ public FitbitIntradayHeartRateRoute(FitbitRequestGenerator generator,
3943
4044 @ Override
4145 protected String getUrlFormat (String baseUrl ) {
42- return baseUrl + "/1/user/%s/activities/heart/date/%s/1d/1sec/time/%s/%s.json?timezone=UTC" ;
46+ // URL format args: user-id, date
47+ return baseUrl + "/1/user/%s/activities/heart/date/%s/1d/1sec.json?timezone=UTC" ;
4348 }
4449
4550 protected Stream <FitbitRestRequest > createRequests (User user ) {
46- return startDateGenerator (getOffset (user ).plus (ONE_SECOND ).truncatedTo (SECONDS ))
51+ // Important: heart rate is queried at the resolution of a single
52+ // day, so the offset for the next request will be set to the next day.
53+ Instant startDate = this .getOffset (user ).plus (ONE_DAY )
54+ .atZone (UTC )
55+ .truncatedTo (ChronoUnit .DAYS ).toInstant ();
56+ List <DateRange > dateRangeStream = startDateGenerator (startDate ).toList ();
57+ return dateRangeStream .stream ()
4758 .map (dateRange -> newRequest (user , dateRange ,
48- user .getExternalUserId (), DATE_FORMAT . format ( dateRange . start ()),
49- ISO_LOCAL_TIME .format (dateRange .start ()),
50- ISO_LOCAL_TIME . format ( dateRange . end (). truncatedTo ( SECONDS )) ));
59+ user .getExternalUserId (),
60+ DATE_FORMAT .format (dateRange .start ())
61+ ));
5162 }
5263
5364 @ Override
0 commit comments