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

105 lines
4.3 KiB
Markdown

# 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`
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.