syncLocationAudit static method
Future<void>
syncLocationAudit({
- required LocationAuditDao locationAuditDao,
- DateTime? lastSync,
- required String deviceId,
- required HttpService httpService,
Implementation
static Future<void> syncLocationAudit({
required LocationAuditDao locationAuditDao,
DateTime? lastSync,
required String deviceId,
required HttpService httpService,
}) async {
final yesterday = DateTime.now().subtract(const Duration(days: 1));
final endOfYesterday =
DateTime(yesterday.year, yesterday.month, yesterday.day, 23, 59, 59);
final locationAudits = await locationAuditDao.findManyBetween(
lastSync ?? endOfYesterday.subtract(const Duration(days: 60)),
endOfYesterday);
if (locationAudits.isEmpty) {
return;
}
Map<String, List<LocationAuditData>> locationAuditsByDate = {};
for (final locationAudit in locationAudits) {
final key = locationAudit.createdAt.toDateString();
if (locationAuditsByDate[key] == null) {
locationAuditsByDate[key] = [];
}
locationAuditsByDate[key]!.add(locationAudit);
}
List<Map<String, dynamic>> uploadData = [];
for (final key in locationAuditsByDate.keys) {
if (locationAuditsByDate[key] == null ||
locationAuditsByDate[key]!.isEmpty == true) {
continue;
}
uploadData.add({
'date': key,
'deviceId': deviceId,
'data': locationAuditsByDate[key]!
.map<Map<String, dynamic>>((item) => {
'id': item.id,
'createdAt': item.createdAt.toIso8601StringWithTz(),
'altitude': item.altitude,
'accuracy': item.accuracy,
'speed': item.speed,
'distance': item.distance,
'longitude': item.long,
'latitude': item.lat,
})
.toList(),
});
if (uploadData.length == 3) {
await httpService.post(LocationAuditRoute.uploadPath, uploadData);
uploadData = [];
}
}
if (uploadData.isEmpty == false) {
await httpService.post(LocationAuditRoute.uploadPath, uploadData);
}
}