85 lines
3.3 KiB
TypeScript
85 lines
3.3 KiB
TypeScript
import type { GetDriverProfileOutputDTO } from '@/lib/types/generated/GetDriverProfileOutputDTO';
|
|
import type { DriverProfileViewData } from '@/lib/types/view-data/DriverProfileViewData';
|
|
|
|
export class DriverProfileViewDataBuilder {
|
|
static build(dto: GetDriverProfileOutputDTO): DriverProfileViewData {
|
|
return {
|
|
currentDriver: dto.currentDriver ? {
|
|
id: dto.currentDriver.id,
|
|
name: dto.currentDriver.name,
|
|
country: dto.currentDriver.country,
|
|
avatarUrl: dto.currentDriver.avatarUrl || '',
|
|
iracingId: dto.currentDriver.iracingId || null,
|
|
joinedAt: dto.currentDriver.joinedAt,
|
|
rating: dto.currentDriver.rating || null,
|
|
globalRank: dto.currentDriver.globalRank || null,
|
|
consistency: dto.currentDriver.consistency || null,
|
|
bio: dto.currentDriver.bio || null,
|
|
totalDrivers: dto.currentDriver.totalDrivers || null,
|
|
} : null,
|
|
stats: dto.stats ? {
|
|
totalRaces: dto.stats.totalRaces,
|
|
wins: dto.stats.wins,
|
|
podiums: dto.stats.podiums,
|
|
dnfs: dto.stats.dnfs,
|
|
avgFinish: dto.stats.avgFinish || null,
|
|
bestFinish: dto.stats.bestFinish || null,
|
|
worstFinish: dto.stats.worstFinish || null,
|
|
finishRate: dto.stats.finishRate || null,
|
|
winRate: dto.stats.winRate || null,
|
|
podiumRate: dto.stats.podiumRate || null,
|
|
percentile: dto.stats.percentile || null,
|
|
rating: dto.stats.rating || null,
|
|
consistency: dto.stats.consistency || null,
|
|
overallRank: dto.stats.overallRank || null,
|
|
} : null,
|
|
finishDistribution: dto.finishDistribution ? {
|
|
totalRaces: dto.finishDistribution.totalRaces,
|
|
wins: dto.finishDistribution.wins,
|
|
podiums: dto.finishDistribution.podiums,
|
|
topTen: dto.finishDistribution.topTen,
|
|
dnfs: dto.finishDistribution.dnfs,
|
|
other: dto.finishDistribution.other,
|
|
} : null,
|
|
teamMemberships: dto.teamMemberships.map(m => ({
|
|
teamId: m.teamId,
|
|
teamName: m.teamName,
|
|
teamTag: m.teamTag || null,
|
|
role: m.role,
|
|
joinedAt: m.joinedAt,
|
|
isCurrent: m.isCurrent,
|
|
})),
|
|
socialSummary: {
|
|
friendsCount: dto.socialSummary.friendsCount,
|
|
friends: dto.socialSummary.friends.map(f => ({
|
|
id: f.id,
|
|
name: f.name,
|
|
country: f.country,
|
|
avatarUrl: f.avatarUrl || '',
|
|
})),
|
|
},
|
|
extendedProfile: dto.extendedProfile ? {
|
|
socialHandles: dto.extendedProfile.socialHandles.map(h => ({
|
|
platform: h.platform,
|
|
handle: h.handle,
|
|
url: h.url,
|
|
})),
|
|
achievements: dto.extendedProfile.achievements.map(a => ({
|
|
id: a.id,
|
|
title: a.title,
|
|
description: a.description,
|
|
icon: a.icon,
|
|
rarity: a.rarity,
|
|
earnedAt: a.earnedAt,
|
|
})),
|
|
racingStyle: dto.extendedProfile.racingStyle,
|
|
favoriteTrack: dto.extendedProfile.favoriteTrack,
|
|
favoriteCar: dto.extendedProfile.favoriteCar,
|
|
timezone: dto.extendedProfile.timezone,
|
|
availableHours: dto.extendedProfile.availableHours,
|
|
lookingForTeam: dto.extendedProfile.lookingForTeam,
|
|
openToRequests: dto.extendedProfile.openToRequests,
|
|
} : null,
|
|
};
|
|
}
|
|
} |