feat: saved views of my work, across my projects

A person saves named views of «my work»: projects, assigned to me, that I
follow, status categories, priorities, bugs only, overdue and text. They
are private (Mongo my_views, no history), listed and deleted by their
owner (GraphQL myViews / saveMyView / deleteMyView, REST /api/me/views),
and run as the cross-project search, which gains project, priority,
bugsOnly and overdue filters (also in MCP my_issues). The home page shows
them as a bar above «my work», with a drawer to save a new one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 14:22:20 +02:00
parent e14f445e6b
commit 5b0396bc10
46 changed files with 2648 additions and 35 deletions

View File

@@ -1,4 +1,5 @@
import { IssuePriority } from '../issue/issue.enums';
import { StatusCategory } from '../project/project-settings';
import { UserRefReadModel } from './user-ref.read-model';
/** What a saved view of the board narrows the tickets to. Empty: everything. */
@@ -27,3 +28,31 @@ export class SavedFilterReadModel {
criteria!: SavedFilterCriteriaReadModel;
createdAt!: string;
}
/**
* What a view of «my work» narrows to, across the projects I belong to.
* Empty: every ticket of them.
*/
export class MyViewCriteriaReadModel {
/** Only these projects (empty: all of mine). */
projectIds?: string[];
assignedToMe?: boolean;
/** Only the tickets I follow. */
watching?: boolean;
categories?: StatusCategory[];
priorities?: IssuePriority[];
/** Only tickets of a type drawn with the bug icon. */
bugsOnly?: boolean;
/** Only open tickets past their due date. */
overdue?: boolean;
search?: string;
}
/** A named view of «my work», private to whoever saved it. */
export class MyViewReadModel {
id!: string;
ownerId!: string;
name!: string;
criteria!: MyViewCriteriaReadModel;
createdAt!: string;
}