From ae910da21ad6eea53cd66c73553e896304fcb8a0 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 16 Jan 2026 21:35:35 +0100 Subject: [PATCH] website refactor --- core/analytics/domain/entities/PageView.ts | 6 +++--- .../RecordRaceRatingEventsUseCase.integration.test.ts | 2 +- .../use-cases/RecordRaceRatingEventsUseCase.test.ts | 1 - .../use-cases/RecordRaceRatingEventsUseCase.ts | 2 -- .../use-cases/AppendTeamRatingEventsUseCase.test.ts | 3 +-- .../use-cases/GetTeamMembershipUseCase.test.ts | 5 +++++ .../RecomputeTeamRatingSnapshotUseCase.test.ts | 11 +++++------ .../RecordTeamRaceRatingEventsUseCase.test.ts | 5 +---- .../use-cases/RecordTeamRaceRatingEventsUseCase.ts | 4 ---- .../use-cases/TeamRatingIntegrationAdapter.test.ts | 3 +-- core/racing/domain/entities/Penalty.test.ts | 4 ++-- core/racing/domain/entities/penalty/Penalty.test.ts | 4 ++-- 12 files changed, 21 insertions(+), 29 deletions(-) diff --git a/core/analytics/domain/entities/PageView.ts b/core/analytics/domain/entities/PageView.ts index 2d1e8d513..84f454bb9 100644 --- a/core/analytics/domain/entities/PageView.ts +++ b/core/analytics/domain/entities/PageView.ts @@ -51,11 +51,11 @@ export class PageView extends Entity { this.validate(props); const baseProps: PageViewProps = { - id: props.id, + id: props.id.trim(), entityType: props.entityType, - entityId: props.entityId, + entityId: props.entityId.trim(), visitorType: props.visitorType, - sessionId: props.sessionId, + sessionId: props.sessionId.trim(), timestamp: props.timestamp ?? new Date(), ...(props.visitorId !== undefined ? { visitorId: props.visitorId } : {}), ...(props.referrer !== undefined ? { referrer: props.referrer } : {}), diff --git a/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.integration.test.ts b/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.integration.test.ts index 6f311e771..ae77156d2 100644 --- a/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.integration.test.ts +++ b/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.integration.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it, beforeEach } from 'vitest'; import { RatingEvent } from '../../domain/entities/RatingEvent'; import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository'; import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository'; @@ -148,7 +149,6 @@ describe('RecordRaceRatingEventsUseCase - Integration', () => { ); useCase = new RecordRaceRatingEventsUseCase( raceResultsProvider, - ratingEventRepository, userRatingRepository, appendRatingEventsUseCase ); diff --git a/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.test.ts b/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.test.ts index 6c233fce0..d998f6c20 100644 --- a/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.test.ts +++ b/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.test.ts @@ -130,7 +130,6 @@ describe('RecordRaceRatingEventsUseCase', () => { ); useCase = new RecordRaceRatingEventsUseCase( mockRaceResultsProvider, - mockRatingEventRepository, mockUserRatingRepository, appendRatingEventsUseCase ); diff --git a/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.ts b/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.ts index b18e744d4..475a33e0e 100644 --- a/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.ts +++ b/core/identity/application/use-cases/RecordRaceRatingEventsUseCase.ts @@ -1,4 +1,3 @@ -import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository'; import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository'; import { RatingEventFactory } from '../../domain/services/RatingEventFactory'; import { RecordRaceRatingEventsInput, RecordRaceRatingEventsOutput } from '../dtos/RecordRaceRatingEventsDto'; @@ -23,7 +22,6 @@ import { AppendRatingEventsUseCase } from './AppendRatingEventsUseCase'; export class RecordRaceRatingEventsUseCase { constructor( private readonly raceResultsProvider: RaceResultsProvider, - private readonly ratingEventRepository: RatingEventRepository, private readonly userRatingRepository: UserRatingRepository, private readonly appendRatingEventsUseCase: AppendRatingEventsUseCase, ) {} diff --git a/core/racing/application/use-cases/AppendTeamRatingEventsUseCase.test.ts b/core/racing/application/use-cases/AppendTeamRatingEventsUseCase.test.ts index 3ee21e41c..d7f13089a 100644 --- a/core/racing/application/use-cases/AppendTeamRatingEventsUseCase.test.ts +++ b/core/racing/application/use-cases/AppendTeamRatingEventsUseCase.test.ts @@ -1,12 +1,11 @@ import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent'; -import { TeamRatingEventRepository } from '@core/racing/domain/repositories/TeamRatingEventRepository'; +import { TeamRatingEventRepository, PaginatedResult } from '@core/racing/domain/repositories/TeamRatingEventRepository'; import { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository'; import { TeamRating } from '@core/racing/domain/value-objects/TeamRating'; import { TeamRatingDelta } from '@core/racing/domain/value-objects/TeamRatingDelta'; import { TeamRatingDimensionKey } from '@core/racing/domain/value-objects/TeamRatingDimensionKey'; import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository'; import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase'; // Mock repositories diff --git a/core/racing/application/use-cases/GetTeamMembershipUseCase.test.ts b/core/racing/application/use-cases/GetTeamMembershipUseCase.test.ts index 99ccde84a..e32d7f00a 100644 --- a/core/racing/application/use-cases/GetTeamMembershipUseCase.test.ts +++ b/core/racing/application/use-cases/GetTeamMembershipUseCase.test.ts @@ -2,6 +2,11 @@ import type { Logger } from '@core/shared/domain/Logger'; import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode'; import { beforeEach, describe, expect, it, vi, type Mock } from 'vitest'; import { TeamMembershipRepository } from '../../domain/repositories/TeamMembershipRepository'; +import { + GetTeamMembershipUseCase, + GetTeamMembershipInput, + GetTeamMembershipErrorCode, +} from './GetTeamMembershipUseCase'; describe('GetTeamMembershipUseCase', () => { const mockGetMembership = vi.fn(); diff --git a/core/racing/application/use-cases/RecomputeTeamRatingSnapshotUseCase.test.ts b/core/racing/application/use-cases/RecomputeTeamRatingSnapshotUseCase.test.ts index 97535c460..93751ecbe 100644 --- a/core/racing/application/use-cases/RecomputeTeamRatingSnapshotUseCase.test.ts +++ b/core/racing/application/use-cases/RecomputeTeamRatingSnapshotUseCase.test.ts @@ -1,12 +1,11 @@ import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent'; -import { TeamRatingEventRepository } from '@core/racing/domain/repositories/TeamRatingEventRepository'; +import { TeamRatingEventRepository, PaginatedResult } from '@core/racing/domain/repositories/TeamRatingEventRepository'; import { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository'; import { TeamRatingDelta } from '@core/racing/domain/value-objects/TeamRatingDelta'; import { TeamRatingDimensionKey } from '@core/racing/domain/value-objects/TeamRatingDimensionKey'; import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository'; -import { TeamRating } from '../../domain/value-objects/TeamRating'; +import { TeamRatingSnapshot } from '../../domain/services/TeamRatingSnapshotCalculator'; import { RecomputeTeamRatingSnapshotUseCase } from './RecomputeTeamRatingSnapshotUseCase'; // Mock repositories @@ -51,13 +50,13 @@ class MockTeamRatingEventRepository implements TeamRatingEventRepository { } class MockTeamRatingRepository implements TeamRatingRepository { - private snapshots: Map = new Map(); + private snapshots: Map = new Map(); - async findByTeamId(teamId: string): Promise { + async findByTeamId(teamId: string): Promise { return this.snapshots.get(teamId) || null; } - async save(snapshot: TeamRating): Promise { + async save(snapshot: TeamRatingSnapshot): Promise { this.snapshots.set(snapshot.teamId, snapshot); return snapshot; } diff --git a/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.test.ts b/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.test.ts index 268231199..c4c3fbb23 100644 --- a/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.test.ts +++ b/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.test.ts @@ -1,10 +1,9 @@ import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent'; -import { TeamRatingEventRepository } from '@core/racing/domain/repositories/TeamRatingEventRepository'; +import { TeamRatingEventRepository, PaginatedResult } from '@core/racing/domain/repositories/TeamRatingEventRepository'; import { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository'; import { TeamDrivingRaceFactsDto } from '@core/racing/domain/services/TeamDrivingRatingEventFactory'; import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository'; import { TeamRating } from '../../domain/value-objects/TeamRating'; import { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider'; import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase'; @@ -90,8 +89,6 @@ describe('RecordTeamRaceRatingEventsUseCase', () => { appendUseCase = new AppendTeamRatingEventsUseCase(mockEventRepo, mockRatingRepo); useCase = new RecordTeamRaceRatingEventsUseCase( mockResultsProvider, - mockEventRepo, - mockRatingRepo, appendUseCase ); }); diff --git a/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.ts b/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.ts index 8bd0410e2..55bae2cde 100644 --- a/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.ts +++ b/core/racing/application/use-cases/RecordTeamRaceRatingEventsUseCase.ts @@ -1,5 +1,3 @@ -import type { TeamRatingEventRepository } from '@core/racing/domain/repositories/TeamRatingEventRepository'; -import type { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository'; import { TeamDrivingRatingEventFactory } from '@core/racing/domain/services/TeamDrivingRatingEventFactory'; import { RecordTeamRaceRatingEventsInput, RecordTeamRaceRatingEventsOutput } from '../dtos/RecordTeamRaceRatingEventsDto'; import type { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider'; @@ -20,8 +18,6 @@ import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase'; export class RecordTeamRaceRatingEventsUseCase { constructor( private readonly teamRaceResultsProvider: TeamRaceResultsProvider, - private readonly ratingEventRepository: TeamRatingEventRepository, - private readonly ratingRepository: TeamRatingRepository, private readonly appendTeamRatingEventsUseCase: AppendTeamRatingEventsUseCase, ) {} diff --git a/core/racing/application/use-cases/TeamRatingIntegrationAdapter.test.ts b/core/racing/application/use-cases/TeamRatingIntegrationAdapter.test.ts index ee7b9ff17..35264a039 100644 --- a/core/racing/application/use-cases/TeamRatingIntegrationAdapter.test.ts +++ b/core/racing/application/use-cases/TeamRatingIntegrationAdapter.test.ts @@ -1,10 +1,9 @@ import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent'; -import { TeamRatingEventRepository } from '@core/racing/domain/repositories/TeamRatingEventRepository'; +import { TeamRatingEventRepository, PaginatedResult } from '@core/racing/domain/repositories/TeamRatingEventRepository'; import { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository'; import { TeamDrivingRaceFactsDto } from '@core/racing/domain/services/TeamDrivingRatingEventFactory'; import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository'; import { TeamRating } from '../../domain/value-objects/TeamRating'; import { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider'; import { TeamRatingIntegrationAdapter } from './TeamRatingIntegrationAdapter'; diff --git a/core/racing/domain/entities/Penalty.test.ts b/core/racing/domain/entities/Penalty.test.ts index 3e9fd970f..0ca3aaba3 100644 --- a/core/racing/domain/entities/Penalty.test.ts +++ b/core/racing/domain/entities/Penalty.test.ts @@ -15,7 +15,7 @@ describe('Penalty', () => { issuedBy: 'steward-1', }); - expect(penalty.id).toBe('penalty-1'); + expect(penalty.id.toString()).toBe('penalty-1'); expect(penalty.leagueId).toBe('league-1'); expect(penalty.raceId).toBe('race-1'); expect(penalty.driverId).toBe('driver-1'); @@ -46,7 +46,7 @@ describe('Penalty', () => { notes: 'Applied after review', }); - expect(penalty.id).toBe('penalty-1'); + expect(penalty.id.toString()).toBe('penalty-1'); expect(penalty.type).toBe('disqualification'); expect(penalty.value).toBeUndefined(); expect(penalty.protestId).toBe('protest-1'); diff --git a/core/racing/domain/entities/penalty/Penalty.test.ts b/core/racing/domain/entities/penalty/Penalty.test.ts index 437f3e410..7395bc5e2 100644 --- a/core/racing/domain/entities/penalty/Penalty.test.ts +++ b/core/racing/domain/entities/penalty/Penalty.test.ts @@ -16,7 +16,7 @@ describe('Penalty', () => { issuedBy: 'steward-1', }); - expect(penalty.id).toBe('penalty-1'); + expect(penalty.id.toString()).toBe('penalty-1'); expect(penalty.leagueId).toBe('league-1'); expect(penalty.raceId).toBe('race-1'); expect(penalty.driverId).toBe('driver-1'); @@ -47,7 +47,7 @@ describe('Penalty', () => { notes: 'Applied after review', }); - expect(penalty.id).toBe('penalty-1'); + expect(penalty.id.toString()).toBe('penalty-1'); expect(penalty.type).toBe('disqualification'); expect(penalty.value).toBeUndefined(); expect(penalty.protestId).toBe('protest-1');