feat: allow application/octet-stream MIME type for PDF uploads in receipt import
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import {
|
||||
Controller,
|
||||
HttpCode,
|
||||
Post,
|
||||
Request,
|
||||
UploadedFile,
|
||||
@@ -19,12 +20,14 @@ const ALLOWED_MIMES = [
|
||||
'image/heic',
|
||||
'image/heif',
|
||||
'application/pdf',
|
||||
'application/octet-stream', // Flutter Web skickar detta för PDF-filer
|
||||
];
|
||||
|
||||
@Controller('receipt-import')
|
||||
export class ReceiptImportController {
|
||||
constructor(private readonly receiptImportService: ReceiptImportService) {}
|
||||
|
||||
@HttpCode(200)
|
||||
@Post()
|
||||
@Throttle({ default: { ttl: 60_000, limit: 20 } })
|
||||
@UseInterceptors(
|
||||
|
||||
@@ -32,12 +32,12 @@ Relaterade dokument:
|
||||
## Arbetsplan
|
||||
|
||||
### Pågående arbete
|
||||
- **Kvittoimport (Fas 6b):** Påbörjad men granskningssteg och bulk-spara återstår.
|
||||
- **Kvittoimport (Fas 6b):** Grundflödet fungerar (2026-04-30) — PDF laddas upp, Mistral AI tolkar kvittot och returnerar strukturerade poster. Återstår: granskningssteg i UI och bulk-spara till pantry/inventarie.
|
||||
- **Bildimport:** Säkerställa att containrar är uppdaterade med senaste kod och att diagnostikloggar syns vid felsökning.
|
||||
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
|
||||
|
||||
### Prioriterade nästa steg
|
||||
1. Slutför kvittoimport och bulk-spara.
|
||||
1. Slutför kvittoimport: granskningssteg + bulk-spara.
|
||||
2. Säkerställa robust bildimport och diagnostik.
|
||||
3. Implementera avancerad AI-integration för produktkategorisering.
|
||||
4. Utöka adminfunktioner för användarhantering och produktadministration.
|
||||
|
||||
@@ -44,8 +44,27 @@ Viktigt att komma ihåg vid implementering av nya funktioner och kodning är att
|
||||
### Auth
|
||||
- Login endpoint: `POST /api/auth/login`.
|
||||
|
||||
## Kända fallgropar och API-gotchas
|
||||
|
||||
### Flutter Web och PDF MIME-typ
|
||||
- Flutter Web skickar PDF-filer med MIME-typ `application/octet-stream` istället för `application/pdf`.
|
||||
- Backend (`receipt-import.controller.ts`) måste tillåta båda: `application/pdf` och `application/octet-stream` i `ALLOWED_MIMES`.
|
||||
- Symptom om detta saknas: HTTP 400 "Otillåten filtyp. Använd JPEG, PNG, WebP eller PDF."
|
||||
|
||||
### NestJS @Post() returnerar HTTP 201 som standard
|
||||
- NestJS returnerar 201 (Created) för alla `@Post()`-endpoints som standard.
|
||||
- Flutter-klienten (`ImportRepository`) accepterar nu alla 2xx-svar (`statusCode < 200 || statusCode >= 300`).
|
||||
- Alternativt: lägg till `@HttpCode(200)` på backend-controllern för att returnera 200.
|
||||
- Detta gjordes i `receipt-import.controller.ts` (2026-04-30).
|
||||
|
||||
### Kvittoimport — backend och arkitektur
|
||||
- `/receipt-import` hanteras av en **dedikerad** `ReceiptImportController` och `ReceiptImportService`, **inte** av `QuickImportController`.
|
||||
- `ReceiptImportService` använder **Mistral AI** för att parsa kvitton till strukturerade `ParsedReceiptItem[]` direkt — inget markdown.
|
||||
- Svaret från `/receipt-import` är en array av `ParsedReceiptItem`, inte `{ markdown: "..." }`.
|
||||
- `{ markdown: "..." }` är svaret från `/quick-import` (receptimport) — inte kvittoimport.
|
||||
|
||||
## Övrigt
|
||||
- **Kvittoimport (Fas 6b):** Påbörjad men granskningssteg och bulk-spara återstår.
|
||||
- **Kvittoimport (Fas 6b):** Grundflödet fungerar. Återstår: granskningssteg i UI och bulk-spara till pantry/inventarie.
|
||||
- **Bildimport:** Säkerställa att containrar är uppdaterade med senaste kod och att diagnostikloggar syns vid felsökning.
|
||||
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user