Files
task-stream/libs/api/tracker/application
Josep Piguillem 8994590b54 feat: automation rules
Owners and admins can set rules of the kind «when a ticket is created,
moves, gets assigned, gets a comment or its pull request merges; if it is
of this type, priority, area or label; then move it, assign it, label it,
change its priority, comment or put it in the active sprint». Rules act as
TaskStream within the workflow, run once per event and trigger no others.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:53:31 +02:00
..
2026-10-08 15:53:31 +02:00
2026-10-03 13:40:26 +02:00
2026-10-03 13:40:26 +02:00
2026-10-03 13:40:26 +02:00
2026-10-03 13:40:26 +02:00
2026-10-03 13:40:26 +02:00

api-tracker-application

Casos de uso del tracker (CQRS).

  • Import: @task-stream/api/tracker/application
  • Capa: application · Tags: scope:api-tracker, type:application

Contenido

  • Services: ProjectsService, IssuesService, CommentsService, ReleasesService, ChangesService (subscriptions), WorkflowsService (workflow de cada proyecto para presentar tickets, con una caché de 2 s).
  • commands/: un fichero por command y otro por handler; cargan con WriteAccess (rehydrator) y guardan con commitAndWait().
  • queries/: un fichero por query y otro por handler; leen de los puertos Find*Repository y comprueban el acceso (ReadAccess: miembros, o cualquiera si el proyecto es público; viewerId null = anónimo); SearchMyIssuesQuery y GetUpcomingReleasesQuery cruzan todos los proyectos del usuario («Mi trabajo»).
  • event-handlers/: proyecciones (@EventsHandler) hacia el read model (incluida la línea temporal de cada ticket), notificaciones en tiempo real y feed de actividad.
  • sagas/: ProjectDeletionSaga (cascada al borrar un proyecto y sus tickets), ReleaseArchivedSaga (los tickets sin terminar salen de una release archivada) y UserDeactivatedSaga (desasigna los tickets abiertos de un usuario que Pireon desactiva). Las ejecuta el EventsBridge; sus comandos son internos e idempotentes. Tests en sagas.spec.ts.
  • analytics/: estadísticas y burnup calculados con funciones puras sobre la línea temporal (con tests).
  • ports/: lookups de escritura, Find*, UpsertMaterialized*, ReleaseIssuesRepository, ChangeFeed, UserDirectory.
  • TrackerApplicationModule.withInfrastructure(...).

Cómo añadir un caso de uso: Desarrollo.

Comandos

npx nx lint api-tracker-application
npx nx test api-tracker-application    # Jest

Reglas de dependencia entre capas: Arquitectura.