website refactor

This commit is contained in:
2026-01-16 21:35:35 +01:00
parent 77a923e6a3
commit ae910da21a
12 changed files with 21 additions and 29 deletions

View File

@@ -51,11 +51,11 @@ export class PageView extends Entity<string> {
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 } : {}),

View File

@@ -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
);

View File

@@ -130,7 +130,6 @@ describe('RecordRaceRatingEventsUseCase', () => {
);
useCase = new RecordRaceRatingEventsUseCase(
mockRaceResultsProvider,
mockRatingEventRepository,
mockUserRatingRepository,
appendRatingEventsUseCase
);

View File

@@ -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,
) {}

View File

@@ -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

View File

@@ -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();

View File

@@ -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<string, TeamRating> = new Map();
private snapshots: Map<string, TeamRatingSnapshot> = new Map();
async findByTeamId(teamId: string): Promise<TeamRating | null> {
async findByTeamId(teamId: string): Promise<TeamRatingSnapshot | null> {
return this.snapshots.get(teamId) || null;
}
async save(snapshot: TeamRating): Promise<TeamRating> {
async save(snapshot: TeamRatingSnapshot): Promise<TeamRatingSnapshot> {
this.snapshots.set(snapshot.teamId, snapshot);
return snapshot;
}

View File

@@ -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
);
});

View File

@@ -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,
) {}

View File

@@ -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';

View File

@@ -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');

View File

@@ -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');