Files
gridpilot.gg/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts
Marc Mintel d97f50ed72
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 6m4s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-23 11:59:49 +01:00

57 lines
1.9 KiB
TypeScript

import type { LeagueRosterMemberDTO } from '@/lib/types/generated/LeagueRosterMemberDTO';
import type { LeagueRosterJoinRequestDTO } from '@/lib/types/generated/LeagueRosterJoinRequestDTO';
import type { LeagueRosterAdminViewData, RosterMemberData, JoinRequestData } from '@/lib/view-data/LeagueRosterAdminViewData';
import { DateDisplay } from '@/lib/display-objects/DateDisplay';
/**
* LeagueRosterAdminViewDataBuilder
*
* Transforms API DTOs into LeagueRosterAdminViewData for server-side rendering.
* Deterministic; side-effect free; no HTTP calls.
*/
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
export class LeagueRosterAdminViewDataBuilder implements ViewDataBuilder<any, any> {
build(input: any): any {
return LeagueRosterAdminViewDataBuilder.build(input);
}
static build(
static build(input: {
leagueId: string;
members: LeagueRosterMemberDTO[];
joinRequests: LeagueRosterJoinRequestDTO[];
}): LeagueRosterAdminViewData {
const { leagueId, members, joinRequests } = input;
// Transform members
const rosterMembers: RosterMemberData[] = members.map(member => ({
driverId: member.driverId,
driver: {
id: member.driverId,
name: member.driver?.name || 'Unknown Driver',
},
role: member.role,
joinedAt: member.joinedAt,
formattedJoinedAt: DateDisplay.formatShort(member.joinedAt),
}));
// Transform join requests
const requests: JoinRequestData[] = joinRequests.map(req => ({
id: req.id,
driver: {
id: req.driverId,
name: 'Unknown Driver', // driver field is unknown type
},
requestedAt: req.requestedAt,
formattedRequestedAt: DateDisplay.formatShort(req.requestedAt),
message: req.message,
}));
return {
leagueId,
members: rosterMembers,
joinRequests: requests,
};
}
}