On the releases page, «Página pública» (owners and admins) opens a
secret link to a page with the release's notes, readable without an
account, also for private projects: the notes written, or the draft
from its finished tickets while there are none (without repeating the
title the page already shows). The link can be copied, renewed (the old
one stops working) or withdrawn. Stored in Mongo (`release_note_shares`).
API: shareReleaseNotes / unshareReleaseNotes / releaseNotesShare,
publicReleaseNotes(token); GET/PUT/DELETE /api/releases/{id}/public-notes,
GET /api/shared/release-notes/{token}. Web: /notes/:token.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 conWriteAccess(rehydrator) y guardan concommitAndWait().queries/: un fichero por query y otro por handler; leen de los puertosFind*Repositoryy comprueban el acceso (ReadAccess: miembros, o cualquiera si el proyecto es público;viewerIdnull = anónimo);SearchMyIssuesQueryyGetUpcomingReleasesQuerycruzan 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) yUserDeactivatedSaga(desasigna los tickets abiertos de un usuario que Pireon desactiva). Las ejecuta elEventsBridge; sus comandos son internos e idempotentes. Tests ensagas.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.