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, memberCount: team.memberCount, logoUrl: team.logoUrl, ratingLabel: RatingDisplay.format(team.rating), ratingValue: team.rating || 0, winsLabel: NumberDisplay.format(team.totalWins || 0), racesLabel: NumberDisplay.format(team.totalRaces || 0), region: team.region, isRecruiting: team.isRecruiting, category: team.category, performanceLevel: team.performanceLevel, description: team.description, countryCode: team.region, // Assuming region contains country code for now })); return { teams }; } }