import { IQueryHandler, QueryHandler } from '@nestjs/cqrs'; import { ProjectReadModel } from '@task-stream/api/tracker/domain'; import { FindProjectsRepository } from '../ports/find-projects.repository'; import { ReadAccess, UUID } from './read-access'; import { GetProjectQuery } from './get-project.query'; @QueryHandler(GetProjectQuery) export class GetProjectQueryHandler implements IQueryHandler { constructor( private readonly findProjects: FindProjectsRepository, private readonly access: ReadAccess, ) {} async execute(query: GetProjectQuery): Promise { const project = UUID.test(query.idOrKey) ? await this.findProjects.findById(query.idOrKey) : await this.findProjects.findByKey(query.idOrKey.toUpperCase()); const found = this.access.assertFound(project, 'Project', query.idOrKey); await this.access.assertCanView(found.id, query.viewerId, { entity: 'Project', ref: query.idOrKey, }); return found; } }