syncLocationAudit static method
Future<void>
syncLocationAudit({
- required NotificationAuditDao notificationAuditDao,
- DateTime? lastSync,
- required String deviceId,
- required HttpService httpService,
Implementation
static Future<void> syncLocationAudit({
required NotificationAuditDao notificationAuditDao,
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 notificationAudits = await notificationAuditDao.findManyBetween(
lastSync ?? endOfYesterday.subtract(const Duration(days: 60)),
endOfYesterday);
if (notificationAudits.isEmpty) {
return;
}
Map<String, List<NotificationAuditData>> notificationAuditsByDate = {};
for (final notificationAudit in notificationAudits) {
final key = notificationAudit.happenedAt.toDateString();
if (notificationAuditsByDate[key] == null) {
notificationAuditsByDate[key] = [];
}
notificationAuditsByDate[key]!.add(notificationAudit);
}
List<Map<String, dynamic>> uploadData = [];
for (final key in notificationAuditsByDate.keys) {
if (notificationAuditsByDate[key] == null ||
notificationAuditsByDate[key]!.isEmpty == true) {
continue;
}
uploadData.add({
'date': key,
'deviceId': deviceId,
'data': notificationAuditsByDate[key]!
.map<Map<String, dynamic>>((item) => {
'packageName': item.packageName,
'checksum': item.checkSum,
'happenedAt': item.happenedAt.toIso8601StringWithTz(),
'summary': item.summary,
'type': item.type.name,
'key': item.key.toString(),
'title': item.title,
})
.toList(),
});
if (uploadData.length == 3) {
await httpService.post(NotificationAuditRoute.uploadPath, uploadData);
uploadData = [];
}
}
if (uploadData.isEmpty == false) {
await httpService.post(NotificationAuditRoute.uploadPath, uploadData);
}
}