2411906682
Co-authored-by: Copilot <copilot@github.com>
105 lines
4.3 KiB
Markdown
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.
|