Listenuebergreifende Suche auf Einkaufsliste/Vorratsschrank/Masterpackliste ausweiten #182

Closed
opened 2026-09-09 07:57:28 +02:00 by lena · 2 comments
Collaborator

Story: Listenuebergreifende Suche auf Einkaufsliste/Vorratsschrank/Masterpackliste ausweiten

As a Nutzer mit mehreren Listen,
I want to ueber die bestehende Suche (Tastenkuerzel/Suchfeld) auch Eintraege auf meinen Einkaufslisten, im Vorratsschrank und auf Masterpacklisten finden,
so that ich nicht jede Liste einzeln durchsuchen muss, wenn ich mich erinnere, dass ich "Batterien" irgendwo eingetragen habe, aber nicht mehr weiss auf welcher Liste.

Kontext (verifiziert im Code): SearchModal.tsx ruft aktuell ausschliesslich SearchTodosQuery auf - Einkaufslisten-Produkte, Vorratsschrank-Produkte und Masterpackliste-Items sind von der Suche komplett ausgenommen, obwohl alle drei laengst existieren und Namen/Kategorien haben, die sich genauso durchsuchen liessen wie ein Todo-Titel.

Acceptance criteria:

  • Die Suche (gleiches Suchfeld/gleicher Shortcut wie heute) findet zusaetzlich zu Todos auch passende Eintraege auf Einkaufslisten, im Vorratsschrank und auf Masterpacklisten (Treffer nach Name, wie bei Todos nach Titel).
  • Jeder Treffer zeigt erkennbar, aus welcher Liste und welchem Listentyp er stammt, und ein Klick darauf navigiert dorthin (wie bei einem Todo-Treffer heute).
  • Nur Listen, auf die der aktuelle Nutzer Zugriff hat, werden durchsucht (gleiche Zugriffsregel wie bei der bestehenden Todo-Suche).
  • Die bestehende Todo-Suche bleibt unveraendert nutzbar (kein Regressionsrisiko fuer den heutigen Anwendungsfall).

Out of scope for this story:

  • Suche in Kommentaren oder der Aktivitaets-Historie - nur die Eintraege selbst (Produktname/Item-Name/Todo-Titel).
  • Aenderung der Suche-UI/des Tastenkuerzels selbst.

Open questions: (escalate to human if unanswered)

  • Keine - reine Erweiterung eines bereits gebauten Suchmusters (SearchTodosQuery) auf drei weitere, strukturell aehnliche Listentypen.
## Story: Listenuebergreifende Suche auf Einkaufsliste/Vorratsschrank/Masterpackliste ausweiten **As a** Nutzer mit mehreren Listen, **I want to** ueber die bestehende Suche (Tastenkuerzel/Suchfeld) auch Eintraege auf meinen Einkaufslisten, im Vorratsschrank und auf Masterpacklisten finden, **so that** ich nicht jede Liste einzeln durchsuchen muss, wenn ich mich erinnere, dass ich "Batterien" irgendwo eingetragen habe, aber nicht mehr weiss auf welcher Liste. **Kontext (verifiziert im Code):** SearchModal.tsx ruft aktuell ausschliesslich SearchTodosQuery auf - Einkaufslisten-Produkte, Vorratsschrank-Produkte und Masterpackliste-Items sind von der Suche komplett ausgenommen, obwohl alle drei laengst existieren und Namen/Kategorien haben, die sich genauso durchsuchen liessen wie ein Todo-Titel. **Acceptance criteria:** - [ ] Die Suche (gleiches Suchfeld/gleicher Shortcut wie heute) findet zusaetzlich zu Todos auch passende Eintraege auf Einkaufslisten, im Vorratsschrank und auf Masterpacklisten (Treffer nach Name, wie bei Todos nach Titel). - [ ] Jeder Treffer zeigt erkennbar, aus welcher Liste und welchem Listentyp er stammt, und ein Klick darauf navigiert dorthin (wie bei einem Todo-Treffer heute). - [ ] Nur Listen, auf die der aktuelle Nutzer Zugriff hat, werden durchsucht (gleiche Zugriffsregel wie bei der bestehenden Todo-Suche). - [ ] Die bestehende Todo-Suche bleibt unveraendert nutzbar (kein Regressionsrisiko fuer den heutigen Anwendungsfall). **Out of scope for this story:** - Suche in Kommentaren oder der Aktivitaets-Historie - nur die Eintraege selbst (Produktname/Item-Name/Todo-Titel). - Aenderung der Suche-UI/des Tastenkuerzels selbst. **Open questions:** (escalate to human if unanswered) - Keine - reine Erweiterung eines bereits gebauten Suchmusters (SearchTodosQuery) auf drei weitere, strukturell aehnliche Listentypen.
lena self-assigned this 2026-09-09 07:58:33 +02:00
Author
Collaborator

Claiming this one. Plan: extend SearchModal/SearchTodosQuery pattern to also search Shopping products, Pantry products, and Master Pack items - a shared cross-list search query (or three sibling queries fanned out from the frontend, matching how the existing GetXOfCurrentUserQuery pattern already works per list type), each result tagged with its list type/id/title for navigation. Starting now.

Claiming this one. Plan: extend SearchModal/SearchTodosQuery pattern to also search Shopping products, Pantry products, and Master Pack items - a shared cross-list search query (or three sibling queries fanned out from the frontend, matching how the existing GetXOfCurrentUserQuery pattern already works per list type), each result tagged with its list type/id/title for navigation. Starting now.
Author
Collaborator

Done, merged to master (50fa13d5).

Scope delivered:

  • Three new sibling search queries (SearchShoppingProductsQuery, SearchPantryProductsQuery, SearchMasterPackItemsQuery) mirroring SearchTodosQuery exactly: 2-char minimum, 200-char truncation, OrdinalIgnoreCase substring match, membership-scoped to lists the current user belongs to.
  • SearchShoppingProductsQuery only searches active (IsOnList) products - inactive ones are not browsable anywhere else in the app either, so they are excluded from results for consistency.
  • Frontend: SearchModal now fires all four search queries in parallel and merges them via a new buildSearchResults() util. Each non-Todo result shows a " - " badge; Todo results are unchanged. Clicking any result navigates to its list. Updated the placeholder copy (was "Search todos...") to reflect the wider scope.

Tests: 10 new backend handler tests (min-length guard, active-only filtering for Shopping, membership isolation for all three) + 9 new frontend tests (merge/navigation behavior, util unit tests). Full suite green (901 backend, 1277 frontend).

Security: reviewed - all three new handlers use the identical, already-shipped membership-scoping pattern as their sibling GetXOfCurrentUserQuery handlers, no authorization bypass or data-exposure issue.

Manually verified end-to-end against the local review container: searched a 2-letter substring and got real, correctly badged matches back from a Todo, a Shopping product, and a Master Pack item, each navigating to the right list on click.

Done, merged to master (50fa13d5). Scope delivered: - Three new sibling search queries (SearchShoppingProductsQuery, SearchPantryProductsQuery, SearchMasterPackItemsQuery) mirroring SearchTodosQuery exactly: 2-char minimum, 200-char truncation, OrdinalIgnoreCase substring match, membership-scoped to lists the current user belongs to. - SearchShoppingProductsQuery only searches active (IsOnList) products - inactive ones are not browsable anywhere else in the app either, so they are excluded from results for consistency. - Frontend: SearchModal now fires all four search queries in parallel and merges them via a new buildSearchResults() util. Each non-Todo result shows a "<Type> - <List>" badge; Todo results are unchanged. Clicking any result navigates to its list. Updated the placeholder copy (was "Search todos...") to reflect the wider scope. Tests: 10 new backend handler tests (min-length guard, active-only filtering for Shopping, membership isolation for all three) + 9 new frontend tests (merge/navigation behavior, util unit tests). Full suite green (901 backend, 1277 frontend). Security: reviewed - all three new handlers use the identical, already-shipped membership-scoping pattern as their sibling GetXOfCurrentUserQuery handlers, no authorization bypass or data-exposure issue. Manually verified end-to-end against the local review container: searched a 2-letter substring and got real, correctly badged matches back from a Todo, a Shopping product, and a Master Pack item, each navigating to the right list on click.
lena closed this issue 2026-09-09 08:23:49 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/todo#182
No description provided.