feat: saved board views and richer board filters

The board now filters by text, type, priority and unassigned tickets as
well. Any combination can be saved as a named view, private or shared with
the project, and opened again with one click.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 14:14:38 +02:00
parent 0606f53026
commit 298383f19f
46 changed files with 2922 additions and 26 deletions

View File

@@ -20,3 +20,4 @@ export * from './tracker-streams.repository';
export * from './attachment-storage';
export * from './notifications.repository';
export * from './notification-mailer';
export * from './saved-filters.repository';

View File

@@ -0,0 +1,14 @@
import { SavedFilterReadModel } from '@task-stream/api/tracker/domain';
/** Saved board views: per person (or shared with a project), no history. */
export abstract class SavedFiltersRepository {
/** Whoever's own views of the project, then the shared ones, by name. */
abstract findVisible(
projectId: string,
userId: string,
): Promise<SavedFilterReadModel[]>;
abstract findById(id: string): Promise<SavedFilterReadModel | null>;
abstract countOwned(projectId: string, userId: string): Promise<number>;
abstract insert(filter: SavedFilterReadModel): Promise<void>;
abstract delete(id: string): Promise<void>;
}