feat(#331): Listen-Reihenfolge persistieren + UI-Reorder via ↑↓ #342
No reviewers
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp!342
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/331-listen-reorder"
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?
Closes #331
Was
Globale Listen-Reihenfolge via
position-Feld auflistsplus Reorder-UI in der Übersicht.Backend
position(int NOT NULL DEFAULT 0) zurlists-Tabelle (das Issue war hier ungenau — die Spalte gabs bisher nur auflist_items)listForOwnerordnet jetzt nachposition,createdAtals TiebreakerPOST /lists/reorderEndpoint: nimmt{ orderedIds: string[] }und schreibt 0..n-1 in einer Transaktion; 404 wenn fremde IDs dabei sindcreate()vergibt nextListPosition (max+1 pro Owner), neue Listen landen untenpositioninlistSchema+reorderListsDtoSchemaFrontend
api-client.lists.reorder()+useReorderLists-Hook mit optimistischem Update und Rollback bei FehlerListsOverviewScreenbekommt ↑/↓-Buttons pro Zeile; reorder bewegt nachbarschaftlich in der globalen Reihenfolge (auch untertypeFilter)/listen,/einkaufenund/todoBewusst nicht im Scope
react-native-draggable-flatlist, Web:@dnd-kit) — Reorder funktioniert jetzt einheitlich cross-platform via Buttons, ohne Lib-Pflege. DnD-UX kann als Folge-Issue auf dieses Fundament aufsetzen.Tests
lists.int-spec.ts: aufsteigendeposition, Sortierung, Reorder, Persistenz, fremde IDs (404), leeres Array (400), neue Liste am EndeShoppingList-Typ strippt es weiterhin)pnpm -r typecheck✅,pnpm -r test✅,pnpm test:integration(56 tests) ✅Test plan
/listenListe mit ↑/↓ verschieben → bleibt nach ReloadBackend - Migration 0016: position-Spalte auf lists (int NOT NULL DEFAULT 0) - listForOwner sortiert nach position, createdAt (Tiebreaker) - create() vergibt nextListPosition (max+1 pro Owner) - Neuer Endpoint POST /lists/reorder mit { orderedIds: string[] }, schreibt position 0..n-1 in einer Transaktion; 404 wenn IDs nicht dem Owner gehören - shared-types: position-Feld auf listSchema, reorderListsDtoSchema - Integration-Tests (7 neu): aufsteigende position beim Anlegen, GET sortiert, Reorder ändert Reihenfolge, persistent nach Reload, 404 für fremde Liste, 400 für leeres Array, neue Liste landet am Ende Frontend - api-client.lists.reorder(orderedIds) - useReorderLists-Hook mit optimistischem Update + Rollback bei Fehler - ListsOverviewScreen: ↑/↓-Buttons pro Zeile reorder die globale Position (auch wenn typeFilter aktiv ist — Reorder bewegt die Liste in der globalen Anordnung, nachbarschaftlich zur sichtbaren Position) - Reorder funktioniert in Listen-, Einkaufen- und Todo-Bereich identisch - Echte Drag-and-Drop-UX (Mobile: react-native-draggable-flatlist, Web: @dnd-kit) bleibt als Folge-Issue für späteren UX-Polish offen feature-shopping-list-Adapter strippt position (nicht Teil der flachen ShoppingList-Projektion). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>