41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
/**
|
|
* Sponsorship Requests View Data Builder
|
|
*
|
|
* Transforms API DTO to ViewData for templates.
|
|
*/
|
|
|
|
import type { GetPendingSponsorshipRequestsOutputDTO } from '@/lib/types/generated/GetPendingSponsorshipRequestsOutputDTO';
|
|
import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData';
|
|
|
|
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
|
|
|
|
export class SponsorshipRequestsViewDataBuilder {
|
|
/**
|
|
* Transform API DTO to ViewData
|
|
*
|
|
* @param apiDto - The DTO from the service
|
|
* @returns ViewData for the sponsorship requests
|
|
*/
|
|
public static build(apiDto: GetPendingSponsorshipRequestsOutputDTO): SponsorshipRequestsViewData {
|
|
return {
|
|
sections: [
|
|
{
|
|
entityType: apiDto.entityType as 'driver' | 'team' | 'season',
|
|
entityId: apiDto.entityId,
|
|
entityName: apiDto.entityType === 'driver' ? 'Driver' : apiDto.entityType,
|
|
requests: (apiDto.requests || []).map((request) => ({
|
|
id: request.id,
|
|
sponsorId: request.sponsorId,
|
|
sponsorName: request.sponsorName,
|
|
sponsorLogoUrl: request.sponsorLogo || null,
|
|
message: request.message || null,
|
|
createdAtIso: request.createdAt,
|
|
})),
|
|
},
|
|
],
|
|
};
|
|
}
|
|
}
|
|
|
|
SponsorshipRequestsViewDataBuilder satisfies ViewDataBuilder<GetPendingSponsorshipRequestsOutputDTO, SponsorshipRequestsViewData>;
|