view data fixes

This commit is contained in:
2026-01-24 00:52:27 +01:00
parent 62e8b768ce
commit ae59df61eb
321 changed files with 1157 additions and 2234 deletions

View File

@@ -1,14 +1,10 @@
import type { TeamDetailPageDto } from '@/lib/page-queries/TeamDetailPageQuery';
import type { GetTeamDetailsOutputDTO } from '@/lib/types/generated/GetTeamDetailsOutputDTO';
import type { TeamDetailViewData, TeamDetailData, TeamMemberData, SponsorMetric, TeamTab } from '@/lib/view-data/TeamDetailViewData';
import { DateDisplay } from '@/lib/display-objects/DateDisplay';
import { MemberDisplay } from '@/lib/display-objects/MemberDisplay';
import { LeagueDisplay } from '@/lib/display-objects/LeagueDisplay';
import { NumberDisplay } from '@/lib/display-objects/NumberDisplay';
/**
* TeamDetailViewDataBuilder - Transforms TeamDetailPageDto into ViewData
* Deterministic; side-effect free; no HTTP calls
*/
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
@@ -16,26 +12,25 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
return TeamDetailViewDataBuilder.build(input);
}
static build(
static build(apiDto: TeamDetailPageDto): TeamDetailViewData {
static build(apiDto: GetTeamDetailsOutputDTO): TeamDetailViewData {
const team: TeamDetailData = {
id: apiDto.team.id,
name: apiDto.team.name,
tag: apiDto.team.tag,
description: apiDto.team.description,
ownerId: apiDto.team.ownerId,
leagues: apiDto.team.leagues,
leagues: (apiDto.team as any).leagues || [],
createdAt: apiDto.team.createdAt,
foundedDateLabel: apiDto.team.createdAt ? DateDisplay.formatMonthYear(apiDto.team.createdAt) : 'Unknown',
specialization: apiDto.team.specialization,
region: apiDto.team.region,
languages: apiDto.team.languages,
category: apiDto.team.category,
membership: apiDto.team.membership,
canManage: apiDto.team.canManage,
specialization: (apiDto.team as any).specialization || null,
region: (apiDto.team as any).region || null,
languages: (apiDto.team as any).languages || [],
category: (apiDto.team as any).category || null,
membership: (apiDto.team as any).membership || 'open',
canManage: apiDto.canManage,
};
const memberships: TeamMemberData[] = apiDto.memberships.map((membership) => ({
const memberships: TeamMemberData[] = ((apiDto as any).memberships || []).map((membership: any) => ({
driverId: membership.driverId,
driverName: membership.driverName,
role: membership.role,
@@ -46,7 +41,8 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
}));
// Calculate isAdmin based on current driver's role
const currentDriverMembership = memberships.find(m => m.driverId === apiDto.currentDriverId);
const currentDriverId = (apiDto as any).currentDriverId;
const currentDriverMembership = memberships.find(m => m.driverId === currentDriverId);
const isAdmin = currentDriverMembership?.role === 'owner' || currentDriverMembership?.role === 'manager';
// Build sponsor metrics
@@ -89,7 +85,7 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder<any, any> {
return {
team,
memberships,
currentDriverId: apiDto.currentDriverId,
currentDriverId: currentDriverId || null,
isAdmin,
teamMetrics,
tabs,