This commit is contained in:
2025-12-16 21:05:01 +01:00
parent f61e3a4e5a
commit 7532c7ed6d
207 changed files with 7861 additions and 2606 deletions

View File

@@ -5,39 +5,33 @@
*/
import type { ISponsorRepository } from '../../domain/repositories/ISponsorRepository';
import type {
IGetSponsorsPresenter,
GetSponsorsResultDTO,
GetSponsorsViewModel,
} from '../presenters/IGetSponsorsPresenter';
import type { UseCase } from '@core/shared/application/UseCase';
import type { GetSponsorsViewModel } from '../presenters/IGetSponsorsPresenter';
import { Result } from '@core/shared/application/Result';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
export class GetSponsorsUseCase
implements UseCase<void, GetSponsorsResultDTO, GetSponsorsViewModel, IGetSponsorsPresenter>
{
export class GetSponsorsUseCase {
constructor(
private readonly sponsorRepository: ISponsorRepository,
) {}
async execute(
_input: void,
presenter: IGetSponsorsPresenter,
): Promise<void> {
presenter.reset();
async execute(): Promise<Result<GetSponsorsViewModel, ApplicationErrorCode<'REPOSITORY_ERROR'>>> {
try {
const sponsors = await this.sponsorRepository.findAll();
const sponsors = await this.sponsorRepository.findAll();
const viewModel: GetSponsorsViewModel = {
sponsors: sponsors.map(sponsor => ({
id: sponsor.id,
name: sponsor.name,
contactEmail: sponsor.contactEmail,
websiteUrl: sponsor.websiteUrl,
logoUrl: sponsor.logoUrl,
createdAt: sponsor.createdAt,
})),
};
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);
return Result.ok(viewModel);
} catch {
return Result.err({ code: 'REPOSITORY_ERROR', message: 'Failed to fetch sponsors' });
}
}
}