view data fixes

This commit is contained in:
2026-01-23 15:30:23 +01:00
parent e22033be38
commit f8099f04bc
213 changed files with 3466 additions and 3003 deletions

View File

@@ -1,120 +1,26 @@
import { ViewModel } from "../contracts/view-models/ViewModel";
import type { ProfileOverviewViewData } from "../view-data/ProfileOverviewViewData";
import type {
ProfileOverviewDriverSummaryViewModel,
ProfileOverviewStatsViewModel,
ProfileOverviewFinishDistributionViewModel,
ProfileOverviewTeamMembershipViewModel,
ProfileOverviewSocialSummaryViewModel,
ProfileOverviewExtendedProfileViewModel
} from "./ProfileOverviewSubViewModels";
export interface ProfileOverviewDriverSummaryViewModel extends ViewModel {
id: string;
name: string;
country: string;
avatarUrl: string;
iracingId: string | null;
joinedAt: string;
rating: number | null;
globalRank: number | null;
consistency: number | null;
bio: string | null;
totalDrivers: number | null;
export class ProfileOverviewViewModel extends ViewModel {
private readonly data: ProfileOverviewViewData;
constructor(data: ProfileOverviewViewData) {
super();
this.data = data;
}
get currentDriver(): ProfileOverviewDriverSummaryViewModel | null { return this.data.currentDriver; }
get stats(): ProfileOverviewStatsViewModel | null { return this.data.stats; }
get finishDistribution(): ProfileOverviewFinishDistributionViewModel | null { return this.data.finishDistribution; }
get teamMemberships(): ProfileOverviewTeamMembershipViewModel[] { return this.data.teamMemberships; }
get socialSummary(): ProfileOverviewSocialSummaryViewModel { return this.data.socialSummary; }
get extendedProfile(): ProfileOverviewExtendedProfileViewModel | null { return this.data.extendedProfile; }
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewStatsViewModel extends ViewModel {
totalRaces: number;
wins: number;
podiums: number;
dnfs: number;
avgFinish: number | null;
bestFinish: number | null;
worstFinish: number | null;
finishRate: number | null;
winRate: number | null;
podiumRate: number | null;
percentile: number | null;
rating: number | null;
consistency: number | null;
overallRank: number | null;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewFinishDistributionViewModel extends ViewModel {
totalRaces: number;
wins: number;
podiums: number;
topTen: number;
dnfs: number;
other: number;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewTeamMembershipViewModel extends ViewModel {
teamId: string;
teamName: string;
teamTag: string | null;
role: string;
joinedAt: string;
isCurrent: boolean;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewSocialFriendSummaryViewModel extends ViewModel {
id: string;
name: string;
country: string;
avatarUrl: string;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewSocialSummaryViewModel extends ViewModel {
friendsCount: number;
friends: ProfileOverviewSocialFriendSummaryViewModel[];
}
export type ProfileOverviewSocialPlatform = 'twitter' | 'youtube' | 'twitch' | 'discord';
export type ProfileOverviewAchievementRarity = 'common' | 'rare' | 'epic' | 'legendary';
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewAchievementViewModel extends ViewModel {
id: string;
title: string;
description: string;
icon: 'trophy' | 'medal' | 'star' | 'crown' | 'target' | 'zap';
rarity: ProfileOverviewAchievementRarity;
earnedAt: string;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewSocialHandleViewModel extends ViewModel {
platform: ProfileOverviewSocialPlatform;
handle: string;
url: string;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewExtendedProfileViewModel extends ViewModel {
socialHandles: ProfileOverviewSocialHandleViewModel[];
achievements: ProfileOverviewAchievementViewModel[];
racingStyle: string;
favoriteTrack: string;
favoriteCar: string;
timezone: string;
availableHours: string;
lookingForTeam: boolean;
openToRequests: boolean;
}
import { ViewModel } from "../contracts/view-models/ViewModel";
export interface ProfileOverviewViewModel extends ViewModel {
currentDriver: ProfileOverviewDriverSummaryViewModel | null;
stats: ProfileOverviewStatsViewModel | null;
finishDistribution: ProfileOverviewFinishDistributionViewModel | null;
teamMemberships: ProfileOverviewTeamMembershipViewModel[];
socialSummary: ProfileOverviewSocialSummaryViewModel;
extendedProfile: ProfileOverviewExtendedProfileViewModel | null;
}