feat: implement alias strategy for receipt import with user-scoped and global fallback, enhance validation and normalization, and update UI components
Test Suite / test (24.15.0) (push) Has been cancelled
Test Suite / test (24.15.0) (push) Has been cancelled
This commit is contained in:
@@ -158,6 +158,68 @@ Fil: `deploy.sh`
|
||||
3. UI för users: Om private rename/merge ska exponeras i användar-app (backend redan klart, saknas bara UI)
|
||||
4. Unit/integration tests för private endpoints
|
||||
|
||||
---
|
||||
|
||||
# Sessionlogg: Aliasstrategi i kvittoimport (samma dag, senare)
|
||||
|
||||
## Mål under denna del
|
||||
- Göra aliasstrategin konsekvent med user-scope som standard och global fallback via admin.
|
||||
- Sluta lära alias automatiskt vid manuell korrigering och kräva explicit val i UI.
|
||||
- Härda backend mot brusiga eller ogiltiga alias.
|
||||
|
||||
## Genomförda förändringar
|
||||
|
||||
### 1) Gemensam aliasnormalisering och guardrails (backend)
|
||||
Filer:
|
||||
- `backend/src/common/utils/receipt-alias.ts`
|
||||
- `backend/src/receipt-alias/receipt-alias.service.ts`
|
||||
- `backend/src/receipt-import/receipt-import.service.ts`
|
||||
|
||||
- Infört gemensam utility för aliasnormalisering (`trim`, lowercase, kollapsad whitespace).
|
||||
- Infört validering som blockerar tomma alias och brusiga alias som `rabatt`, `summa`, `pant`, `att betala`, `totalt`, m.fl.
|
||||
- Receipt import och alias-API använder nu samma regler för både lookup och sparande.
|
||||
|
||||
### 2) Receipt import lär inte längre alias automatiskt (Flutter)
|
||||
Filer:
|
||||
- `flutter/lib/features/import/data/receipt_import_session.dart`
|
||||
- `flutter/lib/features/import/presentation/edit_dialog.dart`
|
||||
- `flutter/lib/features/import/presentation/receipt_import_tab.dart`
|
||||
|
||||
- Infört explicit `learnAlias`-val i edit-dialogen.
|
||||
- Alias sparas nu bara om användaren aktivt markerar att kvittonamnet ska läras in.
|
||||
- Valet persisteras i receipt import-sessionen så att tabbyte inte tappar användarens val.
|
||||
- Om raden redan matchades via alias visas förklarande text i stället för ny aliasinlärning.
|
||||
|
||||
### 3) Aliasöversikter visar scope tydligare (Flutter)
|
||||
Filer:
|
||||
- `flutter/lib/features/admin/domain/receipt_alias.dart`
|
||||
- `flutter/lib/features/profile/presentation/user_aliases_screen.dart`
|
||||
- `flutter/lib/features/admin/presentation/admin_aliases_panel.dart`
|
||||
|
||||
- Aliasmodellen utökad med `ownerId` och `isGlobal`.
|
||||
- User alias-skärmen visar nu skillnad mellan `Privat alias` och `Global fallback`.
|
||||
- Delete-knapp visas bara för privata alias i användarvyn, så UI:t matchar backend-behörigheten.
|
||||
- Adminpanelen visar scope även för aliasposter.
|
||||
|
||||
### 4) Tester för aliasflödet
|
||||
Filer:
|
||||
- `backend/src/receipt-import/receipt-import.service.spec.ts`
|
||||
- `backend/src/receipt-alias/receipt-alias.service.spec.ts`
|
||||
|
||||
- Tester tillagda för normalisering av whitespace vid alias-lookup.
|
||||
- Tester tillagda för alias-upsert med normalisering.
|
||||
- Tester tillagda för blockering av brusalias.
|
||||
- Tester tillagda för behörighetsregler kring globala alias och borttagning.
|
||||
|
||||
## Verifiering
|
||||
- ✅ Backend tests: 31/31 gröna för berörda aliasspecar
|
||||
- ✅ Flutter analyze: OK för alla berörda alias/import-filer
|
||||
|
||||
## Kvar att göra
|
||||
1. Manuell test i appen: receipt import med explicit alias-inlärning.
|
||||
2. Produktionstest: verifiera att privata alias och global fallback beter sig rätt mot riktiga kvitton.
|
||||
3. Bedöm om aliasöversikterna behöver mer avancerad filtrering eller redigering senare.
|
||||
|
||||
## Snabb checklista för nästa session
|
||||
- [ ] Deploy backend + Flutter
|
||||
- [ ] Testa scroll-fix i prod
|
||||
|
||||
Reference in New Issue
Block a user