Listenuebergreifende Uebersicht "Heute faellig / Ueberfaellig" #165
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#165
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: Listenuebergreifende Uebersicht "Heute faellig / Ueberfaellig"
As a Mitglied mit Todos in mehreren Listen,
I want to an einer Stelle alles sehen, was heute faellig oder ueberfaellig ist, ueber alle meine Listen hinweg,
so that ich nicht jede Liste einzeln durchklicken muss, um faellige Aufgaben zu finden.
Background
TodoItem.tsxzeigt bereits ein Faelligkeits-Badge (ueberfaellig/heute/zukuenftig) pro Zeile innerhalb einer einzelnen Liste, aber es gibt keine aggregierende Ansicht ueber mehrere Listen hinweg - man sieht faellige Aufgaben nur, wenn man zufaellig in der richtigen Liste ist.Acceptance criteria:
Out of scope for this story:
Open questions: (escalate to human if unanswered)
Claiming this. Plan: a new
GetDueOrOverdueTodosForCurrentUserQuerythat reuses the existing per-todo due-date logic (reads across every Standard/Priority todo list the current user is a member of, filtered toDoneDate == null && DueDate != null && DueDate <= todayin the user's own local date, same shapeSendDailyDigestEmailsCommandHandler's own due/overdue query already uses). Each result carries itsTodoListId/Nr/Title/DueDate/TodoListTitleso the frontend can link back to the source list and reuse the existingCheckTodoCommand/UncheckTodoCommandtoggle in place, no separate completion state. New frontend route/view (sidebar or account-menu entry, per the AC's own "z. B.") lists these across lists with an empty-state message. No open questions on the issue itself, so proceeding directly to design + implementation.Implemented and merged in commits
3415e2e(backend) and28abd430(frontend) on master.Scope: A new
GetDueOrOverdueTodosForCurrentUserQueryaggregates every not-done todo with a due date today or in the past, across all of the current user's Standard and Priority todo lists, excluding archived lists (a list's own archived state already means "hidden from the default view", surfacing its overdue todos here would work against that - a deliberate scope decision, not in the original AC text). A new sidebar entry ("Due today / Overdue") links to a new/duepage listing every result with its source-list name, a due/overdue badge, and a link back into the source list (reusingSearchModal's ownhighlightTodoNrnavigation-state convention). Checking a todo off from this view calls the exact sameCheckTodoCommandthe source list's own checkbox uses - no separate completion state, per the AC.Out of scope, as specified: Shopping/Pantry/MasterPacking (no comparable due-date concept); a configurable time window beyond today/overdue.
Tests: 6 new backend unit tests (overdue vs. due-today vs. future, no-due-date exclusion, done-todo exclusion, non-member exclusion, archived-list exclusion, source-list-name passthrough) - confirmed to reach the expected
DockerUnavailableExceptionin this sandbox. 9 new/updated frontend tests (empty state, item rendering + back-links, badge distinction, check-off + optimistic removal, check-off failure re-adds the item, the new sidebar link, and the/dueroute rendering without triggering the default-list redirect).Verification:
dotnet buildclean; full frontend suite green (126 files/1182 tests, up from 1175);tsc -b/npm run buildclean. A dedicated security-review pass confirmed the new query's membership-scoping is structurally identical to the already-shippedSearchTodosQueryHandler(sameUserEntity.TodoListsnavigation-property traversal,userIdalways server-derived, never client input) and that the check-off path is independently re-authorized byCheckTodoCommandHandlerregardless of what the aggregation query returns (defense in depth) - no IDOR or other findings.Closing as done.