From fc9c4f6bb42e531d9b225be22f300bf65bc05b01 Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Fri, 1 May 2026 00:46:43 +0200 Subject: [PATCH] fix: enhance response parsing in ImportRepository to handle JSON array and improve logging --- .../import/data/import_repository.dart | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/flutter/lib/features/import/data/import_repository.dart b/flutter/lib/features/import/data/import_repository.dart index 4e65a474..2bbff0a2 100644 --- a/flutter/lib/features/import/data/import_repository.dart +++ b/flutter/lib/features/import/data/import_repository.dart @@ -71,18 +71,25 @@ class ImportRepository { } 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)).toList(); + developer.log('Successfully parsed ${items.length} items from array', name: 'ImportRepository'); + return items; + } + if (parsed is Map) { - // Structured receipt items from /receipt-import + // Wrapped format: { 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)).toList(); if (items != null) { developer.log('Successfully parsed ${items.length} items', name: 'ImportRepository'); 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')) { developer.log('Got markdown receipt, parsing lines into items', name: 'ImportRepository'); final lines = (parsed['markdown'] as String).split('\n'); @@ -94,7 +101,7 @@ class ImportRepository { return items; } } - + developer.log('Invalid response format: ${response.body}', name: 'ImportRepository', error: 'Invalid Data'); throw ApiException(type: ApiErrorType.unknown, message: 'Felaktigt svar från servern.'); } catch (e) {