# Import Image Debug Log (2026-04-22) ## Kontext Målet var att få med receptbild vid URL-import (exempel: ICA-länk) i både Next-frontend och Flutter. ## Verifierat läge just nu - Backend `quick-import` lyckas hämta och spara bild: - Loggar visar: `Bild optimerad och sparad: /images/.jpg` - Bild saknas ändå i slutresultatet i UI efter import/spara. ## Viktiga fynd 1. Ursprungligt problem i Next-importflödet: - Endast `prefilled_markdown` sparades i sessionStorage. - `prefilled_image_url` saknades. - Fixat i båda importvägar: - `frontend/app/recipes/import/ImportFilePage.tsx` - `frontend/app/import/ImportTabsClient.tsx` 2. Flutter-flödet tappade `imageUrl` i router-extra: - Extra skickades först som bara markdown. - Fixat så både markdown + imageUrl skickas och läses robust. 3. Backend förbättringar gjorda: - Robustare JSON-LD-iterering i parsers (alla script-block, inte bara första). - Normalisering av bild-URL (stöd för `//...` och relativa URL:er). - `imageWarning` tillagt i quick-import-svar. - Fallback till extern URL om lokal nedladdning misslyckas. - Recept-delete raderar nu lokal bildfil för `/images/...`. 4. Indikation att server kan köra äldre build: - Nya diagnostikloggar syntes inte i de delade loggutdragen. - Trolig orsak: containrar ej uppdaterade med senaste kod. ## Filer som ändrats under passet ### Flutter - `flutter/lib/features/inventory/presentation/swipeable_inventory_tile.dart` - `flutter/lib/features/inventory/presentation/inventory_screen.dart` - `flutter/lib/core/ui/product_picker_field.dart` - `flutter/lib/features/import/domain/quick_import_result.dart` - `flutter/lib/features/import/data/import_repository.dart` - `flutter/lib/features/import/data/import_providers.dart` - `flutter/lib/features/import/presentation/recipe_import_tab.dart` - `flutter/lib/features/import/presentation/import_screen.dart` - `flutter/lib/features/recipes/presentation/create_recipe_screen.dart` - `flutter/lib/core/router/app_router.dart` - `flutter/lib/core/ui/app_shell.dart` - `flutter/pubspec.yaml` ### Backend - `backend/src/quick-import/quick-import.service.ts` - `backend/src/quick-import/parsers/ica.parser.ts` - `backend/src/quick-import/parsers/generic.parser.ts` - `backend/src/common/utils/download-image.ts` - `backend/src/recipes/recipes.service.ts` ### Next frontend - `frontend/app/recipes/import/ImportFilePage.tsx` - `frontend/app/import/ImportTabsClient.tsx` - `frontend/app/api/quick-import-proxy/route.ts` - `frontend/app/recipes/write/WriteRecipePage.tsx` ## Diagnostikloggar tillagda (att leta efter) ### Backend (`recipe-api`) - `Bildkandidat från parser: ...` - `Normaliserad bild-URL: ...` - `Incoming imageUrl from client: ...` - `Final imageUrl persisted to DB: ...` ### Frontend server (`recipe-frontend`) - `[QuickImportProxy] backend response ...` ### Browser console - `[ImportFilePage:*] quick-import response ...` - `[ImportTabsClient:*] quick-import response ...` - `[WriteRecipePage] prefilled values ...` - `[WriteRecipePage] create payload imageUrl ...` ## Rekommenderad start imorgon 1. Rebuild + recreate containrar: ```bash docker compose build recipe-api recipe-frontend recipe-flutter docker compose up -d --force-recreate recipe-api recipe-frontend recipe-flutter ``` 2. Kör en import av samma ICA-länk. 3. Hämta loggar med filter: ```bash docker logs --since 15m recipe-api | grep -E "QuickImportService|RecipesService|Bildkandidat|Normaliserad bild-URL|Incoming imageUrl|Final imageUrl|imageWarning" docker logs --since 15m recipe-frontend | grep -E "QuickImportProxy|ImportFilePage|ImportTabsClient|WriteRecipePage|quick-import response|sessionStorage snapshot|create payload imageUrl" ``` 4. I browser DevTools: - Network: svar för `/api/quick-import-proxy` (imageUrl, imageWarning) - Network: payload för `POST /api/recipes` (imageUrl) - Console: rader från `Import*` och `WriteRecipePage`. ## Säkerhetsnotering En JWT råkade postas i klartext under felsökningen. Behandla den som komprometterad: - logga ut/in för ny token - rotera hemligheter vid behov om detta är produktion. ## Kort hypotes (nuvarande) `quick-import` får fram och sparar bild, men värdet tappas troligen i klientflödet före `POST /api/recipes` eller så kör servern inte senaste build med loggar/fixar.