Files
gridpilot.gg/apps/api/src/domain/team/presenters/DriverTeamPresenter.ts
2025-12-16 15:42:38 +01:00

41 lines
1.2 KiB
TypeScript

import { IDriverTeamPresenter, DriverTeamResultDTO, DriverTeamViewModel } from '@core/racing/application/presenters/IDriverTeamPresenter';
export class DriverTeamPresenter implements IDriverTeamPresenter {
private result: DriverTeamViewModel | null = null;
reset() {
this.result = null;
}
present(dto: DriverTeamResultDTO) {
const isOwner = dto.team.ownerId === dto.driverId;
const canManage = isOwner || dto.membership.role === 'owner' || dto.membership.role === 'manager';
this.result = {
team: {
id: dto.team.id,
name: dto.team.name,
tag: dto.team.tag,
description: dto.team.description || '',
ownerId: dto.team.ownerId,
leagues: dto.team.leagues || [],
},
membership: {
role: dto.membership.role as 'owner' | 'manager' | 'member',
joinedAt: dto.membership.joinedAt.toISOString(),
isActive: dto.membership.status === 'active',
},
isOwner,
canManage,
};
}
getViewModel(): DriverTeamViewModel | null {
return this.result;
}
get viewModel(): DriverTeamViewModel {
if (!this.result) throw new Error('Presenter not presented');
return this.result;
}
}