56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import type { GetPendingSponsorshipRequestsResult } from '@core/racing/application/use-cases/GetPendingSponsorshipRequestsUseCase';
|
|
import { GetPendingSponsorshipRequestsOutputDTO } from '../dtos/GetPendingSponsorshipRequestsOutputDTO';
|
|
import { SponsorshipRequestDTO } from '../dtos/SponsorshipRequestDTO';
|
|
|
|
export class GetPendingSponsorshipRequestsPresenter {
|
|
private result: GetPendingSponsorshipRequestsOutputDTO | null = null;
|
|
|
|
reset() {
|
|
this.result = null;
|
|
}
|
|
|
|
present(outputPort: GetPendingSponsorshipRequestsResult | null) {
|
|
if (!outputPort) {
|
|
this.result = null;
|
|
return;
|
|
}
|
|
|
|
this.result = {
|
|
entityType: outputPort.entityType,
|
|
entityId: outputPort.entityId,
|
|
requests: outputPort.requests.map(r => {
|
|
const request = new SponsorshipRequestDTO();
|
|
request.id = r.request.id;
|
|
request.sponsorId = r.request.sponsorId;
|
|
request.sponsorName = r.sponsor?.name?.toString() || 'Unknown Sponsor';
|
|
request.tier = r.request.tier;
|
|
request.offeredAmount = r.financials.offeredAmount.amount;
|
|
request.currency = r.financials.offeredAmount.currency;
|
|
request.formattedAmount = `${r.financials.offeredAmount.amount} ${r.financials.offeredAmount.currency}`;
|
|
request.createdAt = r.request.createdAt;
|
|
request.platformFee = r.financials.platformFee.amount;
|
|
request.netAmount = r.financials.netAmount.amount;
|
|
|
|
if (r.sponsor?.logoUrl) {
|
|
request.sponsorLogo = r.sponsor.logoUrl.toString();
|
|
}
|
|
|
|
if (r.request.message) {
|
|
request.message = r.request.message;
|
|
}
|
|
|
|
return request;
|
|
}),
|
|
totalCount: outputPort.totalCount,
|
|
};
|
|
}
|
|
|
|
getViewModel(): GetPendingSponsorshipRequestsOutputDTO | null {
|
|
return this.result;
|
|
}
|
|
|
|
get viewModel(): GetPendingSponsorshipRequestsOutputDTO | null {
|
|
return this.result;
|
|
}
|
|
}
|