syncBatteryAudit static method
Future<void>
syncBatteryAudit({
- required BatteryAuditDao batteryAuditDao,
- DateTime? lastSync,
- required String deviceId,
- required HttpService httpService,
Implementation
static Future<void> syncBatteryAudit({
required BatteryAuditDao batteryAuditDao,
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 batteryAudits = await batteryAuditDao.findManyBetween(
lastSync ?? endOfYesterday.subtract(const Duration(days: 60)),
endOfYesterday);
if (batteryAudits.isEmpty) {
return;
}
Map<String, List<BatteryAuditData>> batteryAuditsByDate = {};
for (final batteryAudit in batteryAudits) {
final key = batteryAudit.createdAt.toDateString();
if (batteryAuditsByDate[key] == null) {
batteryAuditsByDate[key] = [];
}
batteryAuditsByDate[key]!.add(batteryAudit);
}
List<Map<String, dynamic>> uploadData = [];
for (final key in batteryAuditsByDate.keys) {
if (batteryAuditsByDate[key] == null ||
batteryAuditsByDate[key]!.isEmpty == true) {
continue;
}
uploadData.add({
'date': key,
'deviceId': deviceId,
'data': batteryAuditsByDate[key]!
.map<Map<String, dynamic>>((item) => {
'id': item.id,
'status': item.status.name,
'createdAt': item.createdAt.toIso8601StringWithTz(),
'isScreenOn': item.isScreenOn,
'isCharging': item.isCharging,
'capacity': item.capacity,
'percentage': item.percentage,
})
.toList(),
});
if (uploadData.length == 3) {
await httpService.post(BatteryAuditRoute.uploadPath, uploadData);
uploadData = [];
}
}
if (uploadData.isEmpty == false) {
await httpService.post(BatteryAuditRoute.uploadPath, uploadData);
}
}