Files
recipe-app/IMPORT_IMAGE_DEBUG_2026-04-22.md
T

4.3 KiB

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/<uuid>.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
  1. 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.
  1. 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/....
  1. 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:
docker compose build recipe-api recipe-frontend recipe-flutter
docker compose up -d --force-recreate recipe-api recipe-frontend recipe-flutter
  1. Kör en import av samma ICA-länk.

  2. Hämta loggar med filter:

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"
  1. 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.