website refactor
This commit is contained in:
85
lib/builders/view-data/DriverProfileViewDataBuilder.ts
Normal file
85
lib/builders/view-data/DriverProfileViewDataBuilder.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user