import { IQueryHandler, QueryHandler } from '@nestjs/cqrs'; import { ReleaseProgressReadModel } from '@task-stream/api/tracker/domain'; import { FindIssuesRepository } from '../ports/find-issues.repository'; import { FindReleasesRepository } from '../ports/find-releases.repository'; import { ReadAccess } from './read-access'; import { GetReleaseProgressQuery } from './get-release-progress.query'; @QueryHandler(GetReleaseProgressQuery) export class GetReleaseProgressQueryHandler implements IQueryHandler { constructor( private readonly findReleases: FindReleasesRepository, private readonly findIssues: FindIssuesRepository, private readonly access: ReadAccess, ) {} async execute( query: GetReleaseProgressQuery, ): Promise { const release = this.access.assertFound( await this.findReleases.findById(query.releaseId), 'Release', query.releaseId, ); await this.access.assertSeesWholeProject( release.projectId, query.viewerId, { entity: 'Release', ref: query.releaseId, }, ); return this.findIssues.releaseProgress(release.id); } }