From af1a3cd6eb22409f29719fdcaca3bb6194450c7b Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Wed, 22 Apr 2026 08:01:49 +0200 Subject: [PATCH] feat: update routing and authentication details in technical documentation; enhance API and recipes sections --- teknisk_beskrivning_flutter.md | 45 ++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/teknisk_beskrivning_flutter.md b/teknisk_beskrivning_flutter.md index 38034b1c..7a1aa8b8 100644 --- a/teknisk_beskrivning_flutter.md +++ b/teknisk_beskrivning_flutter.md @@ -33,19 +33,54 @@ Relaterade dokument: ### Routing - GoRouter i [flutter/lib/core/router/app_router.dart](flutter/lib/core/router/app_router.dart). - Nuvarande routes: - - `/login` - - `/recipes` - - `/profile` + - `/login` — loginskarm + - `/recipes` — receptlista (ShellRoute med AppShell) + - `/recipes/create` — nytt recept, utanfor ShellRoute + - `/recipes/:id` — receptdetalj, utanfor ShellRoute + - `/recipes/:id/edit` — redigera recept, utanfor ShellRoute + - `/profile` — profil (ShellRoute med AppShell) +- `/recipes/create` maste vara listad fore `/recipes/:id` i routelistan for att undvika konflikt. +- Detaljsidor (detalj, skapa, redigera) ligger utanfor ShellRoute for att fa full-screen med automatisk back-knapp. ### Auth - Login endpoint: `POST /api/auth/login`. - Backend kontrakt anvander `username` + `password`. - Token-falt i svar: `accessToken`. - Token lagras via `ITokenStorage` (web implementation med SharedPreferences). +- Auth-gate i router: utloggad anvandare redirectas till `/login`, inloggad redirectas fran `/login` till `/recipes`. +- Splash-skarm (`/`) visas medan auth-state lases fran storage vid app-start. +- `guardedApiCall()` i `flutter/lib/core/api/guarded_api_call.dart` hanterar automatisk logout vid 401. + +### API-lager +- `ApiClient` i `flutter/lib/core/api/api_client.dart` exponerar: `getJson`, `postJson`, `patchJson`, `putJson`, `deleteJson`. +- Centralicerad HTTP-felklassning: 401 -> `ApiErrorType.unauthorized`, 403 -> `forbidden`, 5xx -> `server`, natverksfel -> `network`. +- `ApiException` i `flutter/lib/core/api/api_exception.dart` ar den enda feltypen som propageras fran repositories. +- `mapErrorToUserMessage()` i `flutter/lib/core/api/api_error_mapper.dart` oversatter fel till svenska anvandarmedddelanden. ### Recipes -- Recipes endpoint: `GET /api/recipes`. -- Flutter model ar hardad for backend-falt (`name` fallback till `title`) och null-safe parsing. +- `GET /api/recipes` — receptlista. +- `GET /api/recipes/:id` — receptdetalj inkl. ingredienser. +- `POST /api/recipes` — skapa recept. +- `PATCH /api/recipes/:id` — uppdatera recept (OBS: PATCH, inte PUT). +- `DELETE /api/recipes/:id` — ta bort recept (returnerar 204, ingen body). +- `POST /api/recipes/parse-markdown` — tolka Markdown, returnerar ParsedRecipe med ingrediensforslagslistor. +- Flutter Recipe-model: `name`-fallback till `title`, null-safe parsing av Decimal-strang till double. + +### Gemensamma UI-komponenter +- `LoadingStateView`, `EmptyStateView`, `ErrorStateView` i `flutter/lib/core/ui/async_state_views.dart`. +- `AppShell` i `flutter/lib/core/ui/app_shell.dart`: responsiv NavigationRail (bred) / NavigationBar (smal), delad AppBar med logout. + +## Kanda API-fallgropar (viktigt!) + +> **Regel: Kontrollera alltid HTTP-metod i [TEKNISK_BESKRIVNING.md](TEKNISK_BESKRIVNING.md) innan en ny repository-metod implementeras.** + +| Operation | Korrekt metod | Fel som gjorts | +|-----------|--------------|----------------| +| Uppdatera recept | `PATCH /api/recipes/:id` | `PUT` — ger 404 | +| Uppdatera inventariepost | `PATCH /api/inventory/:id` | Anvand PATCH | +| Uppdatera matplan | `POST /api/meal-plan` (upsert) | Ingen PUT/PATCH | + +Generell regel: NestJS-backenden anvander `PATCH` for partiella uppdateringar, inte `PUT`. `PUT` exponeras inte pa nagra resurser i detta projekt. ## Drift och deploy ### Build/run