Files
task-stream/libs/api/tracker/presenters
Josep Piguillem f60d4c8346 feat: presence on tickets
A ticket's page beats every 10 s (touchPresence / PUT
/issues/{issue}/presence, with whether I am editing) and gets back who
else is there, editing ones first. Entries live in Redis, one hash per
ticket, and fade after 30 s without a beat; leaving the page takes me out
at once. Only for people who can read the ticket; never in the event
store. The ticket shows «Bob está editando · Ana también lo está viendo»
above its title; editing means a ticket or comment form is open or a
comment is being written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:53:47 +02:00
..
2026-10-15 16:53:47 +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-presenters

API GraphQL y REST (OpenAPI) del tracker.

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

Contenido

  • Resolvers ProjectResolver, IssueResolver, CommentResolver, ReleaseResolver y SubscriptionResolver; solo llaman a services.
  • Tipos, inputs (con class-validator) y enums de GraphQL (code-first).
  • http/: controladores REST ProjectsController, IssuesController, CommentsController, ReleasesController (mismos services), DTOs con @nestjs/swagger y Refs (proyectos y tickets por id o clave; añade a cada ticket sus transiciones permitidas según el workflow de su proyecto).
  • ExploreController (GET /api/explore/projects, sin token). Las lecturas usan @OptionalAuth() y viewerOf(me) (null = anónimo) para servir proyectos públicos sin sesión.
  • common/settings.ts: configuración del proyecto con las transiciones como lista (lo que viaja por GraphQL y REST).

Operaciones disponibles: GraphQL y REST.

Comandos

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

Reglas de dependencia entre capas: Arquitectura.