getGroupedFailedRequests method
Gruppiert die fehlgeschlagenen Requests nach PJNr
Implementation
Future<List<GroupedInspection>> getGroupedFailedRequests() async {
debugPrint('getGroupedFailedRequests: Starte...');
final failedReqs = await API().local.getAllFailedRequests() ?? [];
debugPrint('getGroupedFailedRequests: ${failedReqs.length} fehlgeschlagene Requests gefunden');
Map<String, Map<String, dynamic>> groupedRequests = {};
for (var (id, requestData) in failedReqs) {
try {
if (requestData != null) {
final jsonData = requestData.json;
if (jsonData != null) {
final data = jsonData['data'];
Map<String, dynamic> parsedData;
if (data is String) {
parsedData = Map<String, dynamic>.from(json.decode(data));
} else {
parsedData = Map<String, dynamic>.from(data);
}
final pjNr = parsedData['PjNr']?.toString() ?? 'Unbekannt';
final route = requestData.route;
final timestamp = DateTime.fromMillisecondsSinceEpoch(int.parse(id, radix: 36));
if (!groupedRequests.containsKey(pjNr)) {
groupedRequests[pjNr] = {
'requests': <String>[],
'total': 0,
'completed': 0,
'progress': 0.0,
'requestTypes': <String, int>{},
'totalSize': 0, // Set to 0 or skip for large batches
'lastModified': timestamp,
};
}
// Aktualisiere die Map mit den Request-Informationen
final group = groupedRequests[pjNr]!;
(group['requests'] as List<String>).add(route);
group['total'] = (group['total'] as int) + 1;
// Zähle die Request-Typen
final requestType = route.split('/').first;
group['requestTypes'][requestType] =
(group['requestTypes'][requestType] ?? 0) + 1;
// Do NOT serialize the full request, just estimate or skip size
// group['totalSize'] = (group['totalSize'] as int) + 0;
// Aktualisiere den Zeitstempel der letzten Änderung
if (timestamp.isAfter(group['lastModified'] as DateTime)) {
group['lastModified'] = timestamp;
}
if (parsedData['offline'] == false) {
group['completed'] = (group['completed'] as int) + 1;
}
}
}
} catch (e) {
debugPrint('Error parsing request: $e');
}
}
debugPrint('getGroupedFailedRequests: ${groupedRequests.length} verschiedene Inspektionen gefunden');
// Berechne den Fortschritt für jede Inspektion
for (var pjNr in groupedRequests.keys) {
final total = groupedRequests[pjNr]!['total'] as int;
final completed = groupedRequests[pjNr]!['completed'] as int;
groupedRequests[pjNr]!['progress'] = total > 0 ? completed / total : 0.0;
}
// Konvertiere die Map in eine Liste von GroupedInspection Objekten
final result = groupedRequests.entries
.map((entry) => GroupedInspection(
pjNr: entry.key,
requests: List<String>.from(entry.value['requests'] as List),
total: entry.value['total'] as int,
completed: entry.value['completed'] as int,
progress: entry.value['progress'] as double,
requestTypes:
Map<String, int>.from(entry.value['requestTypes'] as Map),
totalSize: entry.value['totalSize'] as int,
lastModified: entry.value['lastModified'] as DateTime,
))
.toList();
debugPrint('getGroupedFailedRequests: Fertig. ${result.length} Inspektionen zurückgegeben');
return result;
}