website refactor

This commit is contained in:
2026-01-18 13:26:35 +01:00
parent 350c78504d
commit 0b301feb61
225 changed files with 1678 additions and 26666 deletions

View File

@@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { LeagueDetailViewModel, LeagueViewModel, DriverViewModel, RaceViewModel } from './LeagueDetailViewModel';
import { LeagueDetailViewModel, LeagueViewModel, LeagueDetailDriverViewModel, LeagueDetailRaceViewModel } from './LeagueDetailViewModel';
describe('LeagueDetailViewModel', () => {
const baseLeague = {
@@ -40,9 +40,9 @@ describe('LeagueDetailViewModel', () => {
expect(vm.league).toBeInstanceOf(LeagueViewModel);
expect(vm.drivers).toHaveLength(2);
expect(vm.drivers[0]).toBeInstanceOf(DriverViewModel);
expect(vm.drivers[0]).toBeInstanceOf(LeagueDetailDriverViewModel);
expect(vm.races).toHaveLength(2);
expect(vm.races[0]).toBeInstanceOf(RaceViewModel);
expect(vm.races[0]).toBeInstanceOf(LeagueDetailRaceViewModel);
});
it('keeps core league metrics available on LeagueViewModel', () => {

View File

@@ -8,13 +8,39 @@ import { RaceViewModel as SharedRaceViewModel } from "./RaceViewModel";
*/
export class LeagueDetailViewModel {
league: LeagueViewModel;
drivers: SharedDriverViewModel[];
races: SharedRaceViewModel[];
drivers: LeagueDetailDriverViewModel[];
races: LeagueDetailRaceViewModel[];
constructor(data: { league: unknown; drivers: unknown[]; races: unknown[] }) {
this.league = new LeagueViewModel(data.league);
this.drivers = data.drivers.map(driver => new SharedDriverViewModel(driver as any));
this.races = data.races.map(race => new SharedRaceViewModel(race as any));
this.drivers = data.drivers.map(driver => new LeagueDetailDriverViewModel(driver as any));
this.races = data.races.map(race => new LeagueDetailRaceViewModel(race as any));
}
}
export class LeagueDetailDriverViewModel extends SharedDriverViewModel {
impressions: number;
constructor(dto: any) {
super(dto);
this.impressions = dto.impressions || 0;
}
get formattedImpressions(): string {
return this.impressions.toLocaleString();
}
}
export class LeagueDetailRaceViewModel extends SharedRaceViewModel {
views: number;
constructor(dto: any) {
super(dto);
this.views = dto.views || 0;
}
get formattedViews(): string {
return this.views.toLocaleString();
}
}

View File

@@ -1,7 +1,7 @@
export interface LeagueSummaryViewModel {
id: string;
name: string;
description: string;
description: string | null;
logoUrl: string | null;
ownerId: string;
createdAt: string;
@@ -12,7 +12,7 @@ export interface LeagueSummaryViewModel {
structureSummary: string;
scoringPatternSummary?: string;
timingSummary: string;
category?: string;
category?: string | null;
scoring?: {
gameId: string;
gameName: string;