MAJOR UPPDATE: "First Ai"
feat: add AI categorization for products and enhance user management - Integrated AI service for category suggestions in receipt import and product management. - Added premium subscription feature for users with corresponding API endpoints. - Implemented admin interface for managing pending product suggestions. - Enhanced user management to include premium status and corresponding UI updates. - Updated database schema to support new fields for premium status and product status.
This commit is contained in:
@@ -37,6 +37,7 @@ En fullstack-applikation för hantering av hemmavaror och recept. Håll koll på
|
||||
- **AI-tolkning via Mistral** — Mistral AI extraherar varunamn och mängder direkt från kvittobilden
|
||||
- **Alias-matchning** — kvittots produktnamn matchas mot kända alias (t.ex. "ICA Kvarg Jordg" → "Kvarg") och mot befintliga produkter
|
||||
- **Granska och lägg till** — se tolkningsresultatet, justera kvantitet och enhet, och lägg till direkt i inventariet
|
||||
- **AI-kategorisuggestion (premium)** — för varor som inte matchas mot befintliga produkter visas ett AI-förslag på kategori (t.ex. "✨ Mejeri och ägg > Kvarg och fil") som hjälp när användaren väljer produkt manuellt
|
||||
|
||||
### Baslager
|
||||
- **Ständigt lager** — markera produkter du alltid räknar med att ha hemma
|
||||
@@ -46,7 +47,9 @@ En fullstack-applikation för hantering av hemmavaror och recept. Håll koll på
|
||||
### Admin: Produkter
|
||||
- **Redigera produkter** — uppdatera visningsnamn, canonical name, kategori (hierarkisk dropdown) och varumärke inline direkt i listan
|
||||
- **Kategoritilldelning** — välj kategori ur ett 3-nivåträd (huvudkategori → underkategori → typ) som laddas dynamiskt från API:et
|
||||
- **Bulk-kategorisering** — filtrera fram okategoriserade produkter, markera flera (eller "välj alla synliga") och sätt kategori på alla markerade på en gång — effektivt för att kategorisera många produkter i ett svep
|
||||
- **Bulk-kategorisering** — filtrera fram okategoriserade produkter, markera flera (eller "välj alla synliga") och sätt kategori på alla markerade på en gång
|
||||
- **AI-kategorisering per produkt** — klicka "✨ Fråga AI" bredvid kategori-dropdown för att få ett AI-förslag med säkerhetsindikation (hög/medel/låg); godkänn eller avfärda med ett klick
|
||||
- **AI-bulk-kategorisering** — knappen "✨ AI-kategorisera okategoriserade" analyserar alla produkter utan kategori via Mistral AI och presenterar ett bekräftelsemodal; admin väljer vilka förslag som ska tillämpas
|
||||
- **Hitta dubbletter** — identifiera produkter med samma normaliserade namn
|
||||
- **Slå ihop produkter** — merge av två produktposter: alla inventarieföremål och receptreferenser flyttas till målprodukten, källan soft-deleteras
|
||||
- **Förhandsvisning** — granska vad som händer (inventarieräkningar, utfall) innan merge genomförs
|
||||
@@ -55,6 +58,10 @@ En fullstack-applikation för hantering av hemmavaror och recept. Håll koll på
|
||||
|
||||
> Obs: Destruktiva åtgärder (merge, ta bort, återställ, bulk-uppdatera, återställ all data) kräver admin-roll.
|
||||
|
||||
### Väntande produktförslag
|
||||
- **Produktförslags-kö** — produkter med status `pending` samlas på sidan `/admin/products/pending` (länk "⏳ Förslag" i navigeringen)
|
||||
- **Godkänn eller avvisa** — admin kan godkänna (status → `active`) eller avvisa (status → `rejected`) varje förslag med ett klick
|
||||
|
||||
### Användarprofil och administration (fliksida)
|
||||
Profilsidan `/profil` är en flikbaserad administrationsyta. Antalet flikar beror på rollen:
|
||||
|
||||
@@ -65,6 +72,7 @@ Profilsidan `/profil` är en flikbaserad administrationsyta. Antalet flikar bero
|
||||
- **Användare** — fullständig användarhantering:
|
||||
- Skapa ny användare (användarnamn, e-post, lösenord, roll)
|
||||
- Ändra roll via dropdown direkt i tabellen
|
||||
- Ändra **plan** (Free / Paid ✨) via dropdown — styr tillgång till premium-AI-funktioner
|
||||
- Ändra e-postadress inline
|
||||
- Återställ lösenord — genererar ett tillfälligt lösenord och visar ett kopierings-redo meddelande
|
||||
- Ta bort användare (skyddad: kan inte ta bort sig själv)
|
||||
@@ -72,10 +80,11 @@ Profilsidan `/profil` är en flikbaserad administrationsyta. Antalet flikar bero
|
||||
|
||||
### Autentisering och roller
|
||||
- **Rollbaserad åtkomstkontroll** — systemet har två roller: `user` (standard) och `admin`
|
||||
- **Premium-plan** — `isPremium`-flagga på användaren styr tillgång till AI-funktioner (kvittoimport AI-hints m.fl.); administreras via Plan-kolumnen i användarhanteringen
|
||||
- **Automatisk bootstrap** — fyra användare skapas eller uppdateras automatiskt när backend startar, baserat på miljövariabler:
|
||||
- `Nadmin` (admin), `Padmin` (admin), `user1` (user), `user2` (user)
|
||||
- **Skyddade admin-endpoints** — destruktiva produkt-endpoints och all användarhantering kräver `admin`-roll; försök utan rätt roll ger 403 Förbjuden
|
||||
- **Navigering** — admin-länkarna "👥 Användare" och admin-flikarna i profilen visas enbart för inloggade administratörer
|
||||
- **Navigering** — admin-länkarna "⚙️ Admin", "⏳ Förslag" och "👥 Användare" visas enbart för inloggade administratörer
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user