import type { UseCase, UseCaseOutputPort } from '@core/shared/application'; import { Result } from '@core/shared/application/Result'; import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode'; import type { IDriverRepository } from '../../domain/repositories/IDriverRepository'; /** * Input type for retrieving total number of drivers. */ export type GetTotalDriversInput = {}; /** * Domain result model for the total number of drivers. */ export type GetTotalDriversResult = { totalDrivers: number; }; export type GetTotalDriversErrorCode = 'REPOSITORY_ERROR'; export class GetTotalDriversUseCase implements UseCase { constructor( private readonly driverRepository: IDriverRepository, private readonly output: UseCaseOutputPort, ) {} async execute( _input: GetTotalDriversInput, ): Promise>> { void _input; try { const drivers = await this.driverRepository.findAll(); const result: GetTotalDriversResult = { totalDrivers: drivers.length }; this.output.present(result); return Result.ok(void 0); } catch (error) { const message = (error as Error | undefined)?.message ?? 'Failed to compute total drivers'; return Result.err({ code: 'REPOSITORY_ERROR', details: { message }, }); } } }