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 }; } }