import type { IRaceRegistrationRepository } from '@core/racing/domain/repositories/IRaceRegistrationRepository'; import type { GetRaceRegistrationsQueryParamsDTO } from '../dto/RaceRegistrationQueryDTO'; import type { RaceRegistrationsOutputPort } from '../ports/output/RaceRegistrationsOutputPort'; import type { AsyncUseCase } from '@core/shared/application/AsyncUseCase'; import { Result } from '@core/shared/application/Result'; import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode'; /** * Use Case: GetRaceRegistrationsUseCase * * Returns registered driver IDs for a race. * Orchestrates domain logic and delegates presentation to the presenter. */ export class GetRaceRegistrationsUseCase implements AsyncUseCase { constructor( private readonly registrationRepository: IRaceRegistrationRepository, ) {} async execute(params: GetRaceRegistrationsQueryParamsDTO): Promise>> { const { raceId } = params; const registrations = await this.registrationRepository.findByRaceId(raceId); const outputPort: RaceRegistrationsOutputPort = { registrations, }; return Result.ok(outputPort); } }