import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; import { DateFormatter } from '@/lib/formatters/DateFormatter'; import type { LeagueRosterJoinRequestDTO } from '@/lib/types/generated/LeagueRosterJoinRequestDTO'; import type { LeagueRosterMemberDTO } from '@/lib/types/generated/LeagueRosterMemberDTO'; import type { JoinRequestData, LeagueRosterAdminViewData, RosterMemberData } from '@/lib/view-data/LeagueRosterAdminViewData'; type LeagueRosterAdminInputDTO = { leagueId: string; members: LeagueRosterMemberDTO[]; joinRequests: LeagueRosterJoinRequestDTO[]; } export class LeagueRosterAdminViewDataBuilder { public static build(apiDto: LeagueRosterAdminInputDTO): LeagueRosterAdminViewData { const { leagueId, members, joinRequests } = apiDto; // Transform members const rosterMembers: RosterMemberData[] = members.map(member => ({ driverId: member.driverId, driver: { id: member.driverId, name: (member.driver as { name?: string })?.name || 'Unknown Driver', }, role: member.role, joinedAt: member.joinedAt, formattedJoinedAt: DateFormatter.formatShort(member.joinedAt), })); // Transform join requests const requests: JoinRequestData[] = joinRequests.map(req => ({ id: req.id, driver: { id: req.driverId, name: (req as { driver?: { name?: string } }).driver?.name || 'Unknown Driver', }, requestedAt: req.requestedAt, formattedRequestedAt: DateFormatter.formatShort(req.requestedAt), message: req.message ?? undefined, })); return { leagueId, members: rosterMembers, joinRequests: requests, }; } } LeagueRosterAdminViewDataBuilder satisfies ViewDataBuilder;