# api-tracker-domain El modelo del producto: proyectos, tickets, comentarios y releases. - **Import**: `@task-stream/api/tracker/domain` - **Capa**: `domain` · **Tags**: `scope:api-tracker`, `type:domain` ## Contenido - Agregados event-sourced: `Project`, `Issue`, `Comment`, `Release`. Validan en sus métodos y cambian de estado en `on`. - `events/`: un fichero por evento (`IssueCreatedEvent`, `IssueStatusChangedEvent`…), todos con `@AutowiredEvent`. - `factories/`: `ProjectFactory`, `IssueFactory`, `CommentFactory`, `ReleaseFactory` (`@Injectable()`). - `project/project-settings.ts`: configuración por proyecto (estados con categoría, transiciones, tipos, áreas), sus valores por defecto, `ProjectWorkflow` (lo que consultan tickets y queries) y `validateProjectSettings` (archivar, nunca borrar). - `read-models/`: forma de las vistas de lectura (`ProjectReadModel`, `IssueReadModel`…), incluida la línea temporal de los tickets y las estadísticas (`analytics.read-model.ts`). Reglas y workflow: [API](../../../../docs/03-api.md#31-modelo-de-dominio-contexto-tracker). ## Comandos ```sh npx nx lint api-tracker-domain npx nx test api-tracker-domain # Jest ``` Reglas de dependencia entre capas: [Arquitectura](../../../../docs/02-arquitectura.md#21-capas-hexagonales).