This commit is contained in:
2025-12-10 18:28:32 +01:00
parent 6d61be9c51
commit 1303a14493
108 changed files with 3366 additions and 1559 deletions

View File

@@ -1,6 +1,6 @@
/**
* Application Query: GetSponsorDashboardQuery
*
* Application Use Case: GetSponsorDashboardUseCase
*
* Returns sponsor dashboard metrics including sponsorships, impressions, and investment data.
*/
@@ -10,6 +10,7 @@ import type { ISeasonRepository } from '../../domain/repositories/ISeasonReposit
import type { ILeagueRepository } from '../../domain/repositories/ILeagueRepository';
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
import type { ISponsorDashboardPresenter } from '../presenters/ISponsorDashboardPresenter';
export interface GetSponsorDashboardQueryParams {
sponsorId: string;
@@ -46,7 +47,7 @@ export interface SponsorDashboardDTO {
};
}
export class GetSponsorDashboardQuery {
export class GetSponsorDashboardUseCase {
constructor(
private readonly sponsorRepository: ISponsorRepository,
private readonly seasonSponsorshipRepository: ISeasonSponsorshipRepository,
@@ -54,14 +55,16 @@ export class GetSponsorDashboardQuery {
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: IRaceRepository,
private readonly presenter: ISponsorDashboardPresenter,
) {}
async execute(params: GetSponsorDashboardQueryParams): Promise<SponsorDashboardDTO | null> {
async execute(params: GetSponsorDashboardQueryParams): Promise<void> {
const { sponsorId } = params;
const sponsor = await this.sponsorRepository.findById(sponsorId);
if (!sponsor) {
return null;
this.presenter.present(null);
return;
}
// Get all sponsorships for this sponsor
@@ -140,7 +143,7 @@ export class GetSponsorDashboardQuery {
? Math.min(100, (mainSponsorships * 30) + (sponsorships.length * 10))
: 0;
return {
this.presenter.present({
sponsorId,
sponsorName: sponsor.name,
metrics: {
@@ -159,6 +162,6 @@ export class GetSponsorDashboardQuery {
totalInvestment,
costPerThousandViews: Math.round(costPerThousandViews * 100) / 100,
},
};
});
}
}