Files
gridpilot.gg/core/racing/application/use-cases/GetSponsorsUseCase.ts
2025-12-16 11:52:26 +01:00

43 lines
1.1 KiB
TypeScript

/**
* Application Use Case: GetSponsorsUseCase
*
* Retrieves all sponsors.
*/
import type { ISponsorRepository } from '../../domain/repositories/ISponsorRepository';
import type {
IGetSponsorsPresenter,
GetSponsorsResultDTO,
GetSponsorsViewModel,
} from '../presenters/IGetSponsorsPresenter';
import type { UseCase } from '@core/shared/application/UseCase';
export class GetSponsorsUseCase
implements UseCase<void, GetSponsorsResultDTO, GetSponsorsViewModel, IGetSponsorsPresenter>
{
constructor(
private readonly sponsorRepository: ISponsorRepository,
) {}
async execute(
_input: void,
presenter: IGetSponsorsPresenter,
): Promise<void> {
presenter.reset();
const sponsors = await this.sponsorRepository.findAll();
const dto: GetSponsorsResultDTO = {
sponsors: sponsors.map(sponsor => ({
id: sponsor.id,
name: sponsor.name,
contactEmail: sponsor.contactEmail,
websiteUrl: sponsor.websiteUrl,
logoUrl: sponsor.logoUrl,
createdAt: sponsor.createdAt,
})),
};
presenter.present(dto);
}
}