Files
task-stream/libs/api/tracker/application/src/lib/tracker-application.module.ts
Josep Piguillem 298383f19f 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>
2026-10-08 14:14:38 +02:00

89 lines
2.7 KiB
TypeScript

import { DynamicModule, Module, Type } from '@nestjs/common';
import { CqrsModule } from '@nestjs/cqrs';
import { TRACKER_FACTORIES } from '@task-stream/api/tracker/domain';
import { ChangesService } from './changes.service';
import { COMMAND_HANDLERS } from './commands/command-handlers';
import { WriteAccess } from './commands/write-access';
import { IssueTree } from './commands/issue-tree';
import { CommentsService } from './comments.service';
import {
EVENT_HANDLERS,
ReadModelNotifier,
} from './event-handlers/event-handlers';
import { IssuesService } from './issues.service';
import { ProjectsService } from './projects.service';
import { QUERY_HANDLERS } from './queries/query-handlers';
import { ReadAccess } from './queries/read-access';
import { ReleasesService } from './releases.service';
import { SAGAS } from './sagas/sagas';
import { WorkflowsService } from './workflows.service';
import { NotificationsService } from './notifications.service';
import { Notifier } from './notifications/notifier';
import { NotificationsEventHandler } from './notifications/notifications.event-handler';
import {
GetMyNotificationSettingsQueryHandler,
GetMyNotificationsQueryHandler,
} from './notifications/notifications.queries';
import {
MarkNotificationsReadCommandHandler,
UpdateNotificationSettingsCommandHandler,
} from './notifications/notifications.commands';
import { SAVED_FILTERS } from './saved-filters/saved-filters';
import { SavedFiltersService } from './saved-filters.service';
/** Notifications: derived from events, kept and dismissed per person. */
const NOTIFICATIONS = [
Notifier,
NotificationsEventHandler,
GetMyNotificationsQueryHandler,
GetMyNotificationSettingsQueryHandler,
MarkNotificationsReadCommandHandler,
UpdateNotificationSettingsCommandHandler,
];
const SERVICES = [
ProjectsService,
IssuesService,
CommentsService,
ReleasesService,
ChangesService,
WorkflowsService,
NotificationsService,
SavedFiltersService,
];
/**
* Use cases of the tracker context. The infrastructure module implementing
* its ports (lookups, read model, change feed, user directory) is plugged in
* by the composition root; the event store comes from the SharedModule.
*/
@Module({
imports: [CqrsModule],
providers: [
...SERVICES,
...TRACKER_FACTORIES,
WriteAccess,
IssueTree,
ReadAccess,
ReadModelNotifier,
...COMMAND_HANDLERS,
...QUERY_HANDLERS,
...EVENT_HANDLERS,
...SAGAS,
...NOTIFICATIONS,
...SAVED_FILTERS,
],
exports: SERVICES,
})
export class TrackerApplicationModule {
static withInfrastructure(
infrastructureModule: Type | DynamicModule,
): DynamicModule {
return {
module: TrackerApplicationModule,
imports: [infrastructureModule],
};
}
}