website refactor
This commit is contained in:
@@ -51,11 +51,11 @@ export class PageView extends Entity<string> {
|
|||||||
this.validate(props);
|
this.validate(props);
|
||||||
|
|
||||||
const baseProps: PageViewProps = {
|
const baseProps: PageViewProps = {
|
||||||
id: props.id,
|
id: props.id.trim(),
|
||||||
entityType: props.entityType,
|
entityType: props.entityType,
|
||||||
entityId: props.entityId,
|
entityId: props.entityId.trim(),
|
||||||
visitorType: props.visitorType,
|
visitorType: props.visitorType,
|
||||||
sessionId: props.sessionId,
|
sessionId: props.sessionId.trim(),
|
||||||
timestamp: props.timestamp ?? new Date(),
|
timestamp: props.timestamp ?? new Date(),
|
||||||
...(props.visitorId !== undefined ? { visitorId: props.visitorId } : {}),
|
...(props.visitorId !== undefined ? { visitorId: props.visitorId } : {}),
|
||||||
...(props.referrer !== undefined ? { referrer: props.referrer } : {}),
|
...(props.referrer !== undefined ? { referrer: props.referrer } : {}),
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { describe, expect, it, beforeEach } from 'vitest';
|
||||||
import { RatingEvent } from '../../domain/entities/RatingEvent';
|
import { RatingEvent } from '../../domain/entities/RatingEvent';
|
||||||
import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository';
|
import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository';
|
||||||
import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository';
|
import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository';
|
||||||
@@ -148,7 +149,6 @@ describe('RecordRaceRatingEventsUseCase - Integration', () => {
|
|||||||
);
|
);
|
||||||
useCase = new RecordRaceRatingEventsUseCase(
|
useCase = new RecordRaceRatingEventsUseCase(
|
||||||
raceResultsProvider,
|
raceResultsProvider,
|
||||||
ratingEventRepository,
|
|
||||||
userRatingRepository,
|
userRatingRepository,
|
||||||
appendRatingEventsUseCase
|
appendRatingEventsUseCase
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -130,7 +130,6 @@ describe('RecordRaceRatingEventsUseCase', () => {
|
|||||||
);
|
);
|
||||||
useCase = new RecordRaceRatingEventsUseCase(
|
useCase = new RecordRaceRatingEventsUseCase(
|
||||||
mockRaceResultsProvider,
|
mockRaceResultsProvider,
|
||||||
mockRatingEventRepository,
|
|
||||||
mockUserRatingRepository,
|
mockUserRatingRepository,
|
||||||
appendRatingEventsUseCase
|
appendRatingEventsUseCase
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository';
|
|
||||||
import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository';
|
import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository';
|
||||||
import { RatingEventFactory } from '../../domain/services/RatingEventFactory';
|
import { RatingEventFactory } from '../../domain/services/RatingEventFactory';
|
||||||
import { RecordRaceRatingEventsInput, RecordRaceRatingEventsOutput } from '../dtos/RecordRaceRatingEventsDto';
|
import { RecordRaceRatingEventsInput, RecordRaceRatingEventsOutput } from '../dtos/RecordRaceRatingEventsDto';
|
||||||
@@ -23,7 +22,6 @@ import { AppendRatingEventsUseCase } from './AppendRatingEventsUseCase';
|
|||||||
export class RecordRaceRatingEventsUseCase {
|
export class RecordRaceRatingEventsUseCase {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly raceResultsProvider: RaceResultsProvider,
|
private readonly raceResultsProvider: RaceResultsProvider,
|
||||||
private readonly ratingEventRepository: RatingEventRepository,
|
|
||||||
private readonly userRatingRepository: UserRatingRepository,
|
private readonly userRatingRepository: UserRatingRepository,
|
||||||
private readonly appendRatingEventsUseCase: AppendRatingEventsUseCase,
|
private readonly appendRatingEventsUseCase: AppendRatingEventsUseCase,
|
||||||
) {}
|
) {}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent';
|
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 { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository';
|
||||||
import { TeamRating } from '@core/racing/domain/value-objects/TeamRating';
|
import { TeamRating } from '@core/racing/domain/value-objects/TeamRating';
|
||||||
import { TeamRatingDelta } from '@core/racing/domain/value-objects/TeamRatingDelta';
|
import { TeamRatingDelta } from '@core/racing/domain/value-objects/TeamRatingDelta';
|
||||||
import { TeamRatingDimensionKey } from '@core/racing/domain/value-objects/TeamRatingDimensionKey';
|
import { TeamRatingDimensionKey } from '@core/racing/domain/value-objects/TeamRatingDimensionKey';
|
||||||
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
||||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
||||||
import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository';
|
|
||||||
import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase';
|
import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase';
|
||||||
|
|
||||||
// Mock repositories
|
// Mock repositories
|
||||||
|
|||||||
@@ -2,6 +2,11 @@ import type { Logger } from '@core/shared/domain/Logger';
|
|||||||
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
||||||
import { beforeEach, describe, expect, it, vi, type Mock } from 'vitest';
|
import { beforeEach, describe, expect, it, vi, type Mock } from 'vitest';
|
||||||
import { TeamMembershipRepository } from '../../domain/repositories/TeamMembershipRepository';
|
import { TeamMembershipRepository } from '../../domain/repositories/TeamMembershipRepository';
|
||||||
|
import {
|
||||||
|
GetTeamMembershipUseCase,
|
||||||
|
GetTeamMembershipInput,
|
||||||
|
GetTeamMembershipErrorCode,
|
||||||
|
} from './GetTeamMembershipUseCase';
|
||||||
|
|
||||||
describe('GetTeamMembershipUseCase', () => {
|
describe('GetTeamMembershipUseCase', () => {
|
||||||
const mockGetMembership = vi.fn();
|
const mockGetMembership = vi.fn();
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent';
|
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 { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository';
|
||||||
import { TeamRatingDelta } from '@core/racing/domain/value-objects/TeamRatingDelta';
|
import { TeamRatingDelta } from '@core/racing/domain/value-objects/TeamRatingDelta';
|
||||||
import { TeamRatingDimensionKey } from '@core/racing/domain/value-objects/TeamRatingDimensionKey';
|
import { TeamRatingDimensionKey } from '@core/racing/domain/value-objects/TeamRatingDimensionKey';
|
||||||
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
||||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
||||||
import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository';
|
import { TeamRatingSnapshot } from '../../domain/services/TeamRatingSnapshotCalculator';
|
||||||
import { TeamRating } from '../../domain/value-objects/TeamRating';
|
|
||||||
import { RecomputeTeamRatingSnapshotUseCase } from './RecomputeTeamRatingSnapshotUseCase';
|
import { RecomputeTeamRatingSnapshotUseCase } from './RecomputeTeamRatingSnapshotUseCase';
|
||||||
|
|
||||||
// Mock repositories
|
// Mock repositories
|
||||||
@@ -51,13 +50,13 @@ class MockTeamRatingEventRepository implements TeamRatingEventRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MockTeamRatingRepository implements TeamRatingRepository {
|
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;
|
return this.snapshots.get(teamId) || null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async save(snapshot: TeamRating): Promise<TeamRating> {
|
async save(snapshot: TeamRatingSnapshot): Promise<TeamRatingSnapshot> {
|
||||||
this.snapshots.set(snapshot.teamId, snapshot);
|
this.snapshots.set(snapshot.teamId, snapshot);
|
||||||
return snapshot;
|
return snapshot;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent';
|
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 { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository';
|
||||||
import { TeamDrivingRaceFactsDto } from '@core/racing/domain/services/TeamDrivingRatingEventFactory';
|
import { TeamDrivingRaceFactsDto } from '@core/racing/domain/services/TeamDrivingRatingEventFactory';
|
||||||
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
||||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
||||||
import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository';
|
|
||||||
import { TeamRating } from '../../domain/value-objects/TeamRating';
|
import { TeamRating } from '../../domain/value-objects/TeamRating';
|
||||||
import { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider';
|
import { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider';
|
||||||
import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase';
|
import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase';
|
||||||
@@ -90,8 +89,6 @@ describe('RecordTeamRaceRatingEventsUseCase', () => {
|
|||||||
appendUseCase = new AppendTeamRatingEventsUseCase(mockEventRepo, mockRatingRepo);
|
appendUseCase = new AppendTeamRatingEventsUseCase(mockEventRepo, mockRatingRepo);
|
||||||
useCase = new RecordTeamRaceRatingEventsUseCase(
|
useCase = new RecordTeamRaceRatingEventsUseCase(
|
||||||
mockResultsProvider,
|
mockResultsProvider,
|
||||||
mockEventRepo,
|
|
||||||
mockRatingRepo,
|
|
||||||
appendUseCase
|
appendUseCase
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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 { TeamDrivingRatingEventFactory } from '@core/racing/domain/services/TeamDrivingRatingEventFactory';
|
||||||
import { RecordTeamRaceRatingEventsInput, RecordTeamRaceRatingEventsOutput } from '../dtos/RecordTeamRaceRatingEventsDto';
|
import { RecordTeamRaceRatingEventsInput, RecordTeamRaceRatingEventsOutput } from '../dtos/RecordTeamRaceRatingEventsDto';
|
||||||
import type { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider';
|
import type { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider';
|
||||||
@@ -20,8 +18,6 @@ import { AppendTeamRatingEventsUseCase } from './AppendTeamRatingEventsUseCase';
|
|||||||
export class RecordTeamRaceRatingEventsUseCase {
|
export class RecordTeamRaceRatingEventsUseCase {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly teamRaceResultsProvider: TeamRaceResultsProvider,
|
private readonly teamRaceResultsProvider: TeamRaceResultsProvider,
|
||||||
private readonly ratingEventRepository: TeamRatingEventRepository,
|
|
||||||
private readonly ratingRepository: TeamRatingRepository,
|
|
||||||
private readonly appendTeamRatingEventsUseCase: AppendTeamRatingEventsUseCase,
|
private readonly appendTeamRatingEventsUseCase: AppendTeamRatingEventsUseCase,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { TeamRatingEvent } from '@core/racing/domain/entities/TeamRatingEvent';
|
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 { TeamRatingRepository } from '@core/racing/domain/repositories/TeamRatingRepository';
|
||||||
import { TeamDrivingRaceFactsDto } from '@core/racing/domain/services/TeamDrivingRatingEventFactory';
|
import { TeamDrivingRaceFactsDto } from '@core/racing/domain/services/TeamDrivingRatingEventFactory';
|
||||||
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
import { TeamRatingEventId } from '@core/racing/domain/value-objects/TeamRatingEventId';
|
||||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
||||||
import { PaginatedResult } from '../../domain/repositories/TeamRatingEventRepository';
|
|
||||||
import { TeamRating } from '../../domain/value-objects/TeamRating';
|
import { TeamRating } from '../../domain/value-objects/TeamRating';
|
||||||
import { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider';
|
import { TeamRaceResultsProvider } from '../ports/TeamRaceResultsProvider';
|
||||||
import { TeamRatingIntegrationAdapter } from './TeamRatingIntegrationAdapter';
|
import { TeamRatingIntegrationAdapter } from './TeamRatingIntegrationAdapter';
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ describe('Penalty', () => {
|
|||||||
issuedBy: 'steward-1',
|
issuedBy: 'steward-1',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(penalty.id).toBe('penalty-1');
|
expect(penalty.id.toString()).toBe('penalty-1');
|
||||||
expect(penalty.leagueId).toBe('league-1');
|
expect(penalty.leagueId).toBe('league-1');
|
||||||
expect(penalty.raceId).toBe('race-1');
|
expect(penalty.raceId).toBe('race-1');
|
||||||
expect(penalty.driverId).toBe('driver-1');
|
expect(penalty.driverId).toBe('driver-1');
|
||||||
@@ -46,7 +46,7 @@ describe('Penalty', () => {
|
|||||||
notes: 'Applied after review',
|
notes: 'Applied after review',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(penalty.id).toBe('penalty-1');
|
expect(penalty.id.toString()).toBe('penalty-1');
|
||||||
expect(penalty.type).toBe('disqualification');
|
expect(penalty.type).toBe('disqualification');
|
||||||
expect(penalty.value).toBeUndefined();
|
expect(penalty.value).toBeUndefined();
|
||||||
expect(penalty.protestId).toBe('protest-1');
|
expect(penalty.protestId).toBe('protest-1');
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ describe('Penalty', () => {
|
|||||||
issuedBy: 'steward-1',
|
issuedBy: 'steward-1',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(penalty.id).toBe('penalty-1');
|
expect(penalty.id.toString()).toBe('penalty-1');
|
||||||
expect(penalty.leagueId).toBe('league-1');
|
expect(penalty.leagueId).toBe('league-1');
|
||||||
expect(penalty.raceId).toBe('race-1');
|
expect(penalty.raceId).toBe('race-1');
|
||||||
expect(penalty.driverId).toBe('driver-1');
|
expect(penalty.driverId).toBe('driver-1');
|
||||||
@@ -47,7 +47,7 @@ describe('Penalty', () => {
|
|||||||
notes: 'Applied after review',
|
notes: 'Applied after review',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(penalty.id).toBe('penalty-1');
|
expect(penalty.id.toString()).toBe('penalty-1');
|
||||||
expect(penalty.type).toBe('disqualification');
|
expect(penalty.type).toBe('disqualification');
|
||||||
expect(penalty.value).toBeUndefined();
|
expect(penalty.value).toBeUndefined();
|
||||||
expect(penalty.protestId).toBe('protest-1');
|
expect(penalty.protestId).toBe('protest-1');
|
||||||
|
|||||||
Reference in New Issue
Block a user