27 lines
1.0 KiB
TypeScript
27 lines
1.0 KiB
TypeScript
import type { TeamsPageDto } from '@/lib/page-queries/TeamsPageQuery';
|
|
import type { TeamsViewData, TeamSummaryData } from '@/lib/view-data/TeamsViewData';
|
|
import type { TeamListItemDTO } from '@/lib/types/generated/TeamListItemDTO';
|
|
import { RatingDisplay } from '@/lib/display-objects/RatingDisplay';
|
|
import { NumberDisplay } from '@/lib/display-objects/NumberDisplay';
|
|
|
|
/**
|
|
* TeamsViewDataBuilder - Transforms TeamsPageDto into ViewData for TeamsTemplate
|
|
* Deterministic; side-effect free; no HTTP calls
|
|
*/
|
|
export class TeamsViewDataBuilder {
|
|
static build(apiDto: TeamsPageDto): TeamsViewData {
|
|
const teams: TeamSummaryData[] = apiDto.teams.map((team: TeamListItemDTO): TeamSummaryData => ({
|
|
teamId: team.id,
|
|
teamName: team.name,
|
|
leagueName: team.leagues[0] || '',
|
|
memberCount: team.memberCount,
|
|
logoUrl: team.logoUrl,
|
|
ratingLabel: RatingDisplay.format(team.rating),
|
|
winsLabel: NumberDisplay.format(team.totalWins || 0),
|
|
racesLabel: NumberDisplay.format(team.totalRaces || 0),
|
|
}));
|
|
|
|
return { teams };
|
|
}
|
|
}
|