11package org.radarbase.oura.route
22
33import org.radarbase.oura.converter.OuraHeartRateConverter
4+ import org.radarbase.oura.user.User
45import org.radarbase.oura.user.UserRepository
6+ import org.radarcns.connector.oura.OuraHeartRate
7+ import org.radarcns.connector.oura.OuraHeartRateSource
8+ import org.slf4j.LoggerFactory
9+ import java.time.Duration
10+ import java.time.Instant
11+ import java.time.LocalDateTime
12+ import org.radarbase.oura.request.RestRequest
513
614class OuraHeartRateRoute (
715 private val userRepository : UserRepository ,
@@ -12,4 +20,37 @@ class OuraHeartRateRoute(
1220 override fun toString (): String = " oura_heart_rate"
1321
1422 override var converters = listOf (OuraHeartRateConverter ())
23+
24+ override var maxIntervalPerRequest = Duration .ofDays(1 )
25+
26+ var maxRequestsPerInterval = 1000
27+
28+ override fun generateRequests (
29+ user : User ,
30+ start : Instant ,
31+ end : Instant ,
32+ ): Sequence <RestRequest > {
33+ return generateRequests(user, start, end, maxRequestsPerInterval)
34+ }
35+
36+ override fun generateRequests (
37+ user : User ,
38+ start : Instant ,
39+ end : Instant ,
40+ max : Int ,
41+ ): Sequence <RestRequest > {
42+ return generateSequence(start) { it + maxIntervalPerRequest }
43+ .takeWhile { it < end }
44+ .take(maxRequestsPerInterval)
45+ .map { startRange ->
46+ val endRange = (startRange + maxIntervalPerRequest).coerceAtMost(end)
47+ val request = createRequest(
48+ user,
49+ " $OURA_API_BASE_URL /${subPath()} " ,
50+ " ?start_datetime=${startRange.toLocalDate()} " +
51+ " &end_datetime=${endRange.toLocalDate()} " ,
52+ )
53+ RestRequest (request, user, this , startRange, endRange)
54+ }
55+ }
1556}
0 commit comments