fix: enhance response parsing in ImportRepository to handle JSON array and improve logging

This commit is contained in:
Nils-Johan Gynther
2026-05-01 00:46:43 +02:00
parent 9417d30574
commit fc9c4f6bb4
@@ -71,18 +71,25 @@ class ImportRepository {
} }
final parsed = _parseResponse(response); final parsed = _parseResponse(response);
developer.log('Response parsed, keys: ${parsed is Map ? parsed.keys.toList() : "list"}', name: 'ImportRepository'); developer.log('Response parsed, keys: ${parsed is Map ? parsed.keys.toList() : "list[${(parsed as List?)?.length}]"}', name: 'ImportRepository');
// Backend returns ParsedReceiptItem[] directly as a JSON array
if (parsed is List) {
final items = parsed.map((e) => ParsedReceiptItem.fromJson(e as Map<String, dynamic>)).toList();
developer.log('Successfully parsed ${items.length} items from array', name: 'ImportRepository');
return items;
}
if (parsed is Map<String, dynamic>) { if (parsed is Map<String, dynamic>) {
// Structured receipt items from /receipt-import // Wrapped format: { items: [...] }
if (parsed.containsKey('items')) { if (parsed.containsKey('items')) {
final items = (parsed['items'] as List?)?.map((e) => ParsedReceiptItem.fromJson(e)).toList(); final items = (parsed['items'] as List?)?.map((e) => ParsedReceiptItem.fromJson(e as Map<String, dynamic>)).toList();
if (items != null) { if (items != null) {
developer.log('Successfully parsed ${items.length} items', name: 'ImportRepository'); developer.log('Successfully parsed ${items.length} items', name: 'ImportRepository');
return items; return items;
} }
} }
// Markdown-based receipt from /quick-import fallback — parse lines into items // Markdown-based receipt fallback — parse lines into items
if (parsed.containsKey('markdown')) { if (parsed.containsKey('markdown')) {
developer.log('Got markdown receipt, parsing lines into items', name: 'ImportRepository'); developer.log('Got markdown receipt, parsing lines into items', name: 'ImportRepository');
final lines = (parsed['markdown'] as String).split('\n'); final lines = (parsed['markdown'] as String).split('\n');
@@ -94,7 +101,7 @@ class ImportRepository {
return items; return items;
} }
} }
developer.log('Invalid response format: ${response.body}', name: 'ImportRepository', error: 'Invalid Data'); developer.log('Invalid response format: ${response.body}', name: 'ImportRepository', error: 'Invalid Data');
throw ApiException(type: ApiErrorType.unknown, message: 'Felaktigt svar från servern.'); throw ApiException(type: ApiErrorType.unknown, message: 'Felaktigt svar från servern.');
} catch (e) { } catch (e) {