Globale, nutzeruebergreifende Produkt-Kategorie-Datenbank fuer Einkaufsliste und Vorratsschrank #212
Labels
No labels
priority/could
priority/must
priority/should
priority/wont
status/blocked
status/claimed
status/done-migrated
type/bug
type/feature
type/infra
type/tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
robert/todo#212
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Story: Globale Produkt-Kategorie-Datenbank ueber alle Nutzer hinweg
As a Nutzer der Einkaufsliste oder des Vorratsschranks,
I want to dass neue Produkte automatisch die passende Kategorie bekommen - gelernt aus allen Listen aller Nutzer,
so that ich Kategorien kaum noch selbst zuordnen muss, auch auf einer ganz neuen Liste.
Kontext (verifiziert im Code / Historie):
ProductSectionKnowledgeEntityist app-weit (#178 wurde nach Rueckmeldung wieder auf app-weit zurueckgedreht), wird aber nur in Einkaufslisten-Texteingabe-Flows genutzt - der Vorratsschrank hat keine serverseitige Kategorie-Wissensbasis fuer eingetippte Produkte.ProductBarcodeKnowledgeEntity) ist bewusst NUR pro Einkaufsliste + verknuepftem Vorratsschrank gescopt, nicht nutzeruebergreifend.Acceptance criteria:
Open questions (escalate to human if unanswered):
Start: Claim durch den autonomen Loop (auf Wunsch des Menschen). Entscheidungen des Menschen (vorab im Chat abgefragt):
Plan: zwei neue app-weite Tabellen (Produktname -> Kategoriename, Barcode -> Produktname/Kategoriename), nur generische Daten, keine Listen-/Nutzerbezuege. Die bestehenden listenbezogenen Tabellen bleiben als vorrangige lokale Ebene. Der Vorratsschrank bekommt bei Texteingabe dieselbe Aufloesung (lokal, dann global).
Erledigt (Commits auf master: feat(#212) Tabellen + Logik, test(#212)).
Umfang
Entscheidungen (vom Menschen vorab): zuletzt gewinnt; eigene Liste zuerst; fehlende Kategorie wird nicht angelegt; alle genannten Lernquellen inkl. CSV-Import; Seed aus CSV + Bestandsdaten; automatische Zuordnung beim Speichern ohne neues UI.
Tests: 11 neue Backend-Tests (GlobalProductKnowledgeTests), gesamte Suite gruen (1063 Checkly.Tests, 63 WebApi.Tests). Migrationen gegen das echte Postgres des Review-Containers angewendet.
Security-Review: keine Findings (Upserts parametrisiert, Kategorie-IDs vor Nutzung pro Liste validiert). Bewusst akzeptierter Trade-off: durch zuletzt-gewinnt kann jeder Nutzer einen Vorschlag fuer alle ueberschreiben - betrifft nur Vorschlaege, die beim Scan bestaetigt bzw. per Verschieben korrigiert werden.
Bekannte Grenze: Produkte, die offline angelegt werden, bleiben bis zur Synchronisierung unkategorisiert (unveraendert zum bisherigen Verhalten).