website refactor

This commit is contained in:
2026-01-16 13:48:18 +01:00
parent 20a42c52fd
commit 7e02fc3ea5
796 changed files with 1946 additions and 2545 deletions

View File

@@ -5,7 +5,7 @@
* Immutable entity with factory methods and domain validation.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { CarName } from './CarName';
import { Manufacturer } from './Manufacturer';
@@ -18,7 +18,7 @@ import { GameId } from './GameId';
import { CarId } from './CarId';
import { ImageUrl } from './ImageUrl';
export class Car implements IEntity<CarId> {
export class Car implements Entity<CarId> {
readonly id: CarId;
readonly name: CarName;
readonly shortName: string;

View File

@@ -6,15 +6,15 @@
*/
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import { IRacingId } from '../value-objects/IRacingId';
import type { Entity } from '@core/shared/domain';
import { RacingId } from '../value-objects/RacingId';
import { DriverName } from '../value-objects/driver/DriverName';
import { CountryCode } from '../value-objects/CountryCode';
import { DriverBio } from '../value-objects/driver/DriverBio';
import { JoinedAt } from '../value-objects/JoinedAt';
import { MediaReference } from '@core/domain/media/MediaReference';
export class Driver implements IEntity<string> {
export class Driver implements Entity<string> {
readonly id: string;
readonly iracingId: IRacingId;
readonly name: DriverName;

View File

@@ -5,7 +5,7 @@
* Includes user-placed decals and league-specific overrides.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import { LiveryDecal } from '../value-objects/LiveryDecal';
@@ -28,7 +28,7 @@ export interface DriverLiveryProps {
validatedAt: Date | undefined;
}
export class DriverLivery implements IEntity<string> {
export class DriverLivery implements Entity<string> {
readonly id: string;
readonly driverId: DriverId;
readonly gameId: GameId;

View File

@@ -1,8 +1,8 @@
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { GameId } from './GameId';
import { GameName } from './GameName';
export class Game implements IEntity<GameId> {
export class Game implements Entity<GameId> {
readonly id: GameId;
readonly name: GameName;

View File

@@ -4,7 +4,7 @@
* Represents a request to join a league.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { LeagueId } from './LeagueId';
import { LeagueOwnerId } from './LeagueOwnerId';
@@ -18,7 +18,7 @@ export interface JoinRequestProps {
message?: string;
}
export class JoinRequest implements IEntity<string> {
export class JoinRequest implements Entity<string> {
readonly id: string;
readonly leagueId: LeagueId;
readonly driverId: LeagueOwnerId;

View File

@@ -5,7 +5,7 @@
* Immutable entity with factory methods and domain validation.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { LeagueId } from './LeagueId';
import { LeagueName } from './LeagueName';
import { LeagueDescription } from './LeagueDescription';
@@ -91,7 +91,7 @@ export interface LeagueSettings {
visibility?: LeagueVisibilityType;
}
export class League implements IEntity<LeagueId> {
export class League implements Entity<LeagueId> {
readonly id: LeagueId;
readonly name: LeagueName;
readonly description: LeagueDescription;

View File

@@ -4,7 +4,7 @@
* Represents a driver's membership in a league.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { LeagueId } from './LeagueId';
import { MembershipRole, MembershipRoleValue } from './MembershipRole';
@@ -22,7 +22,7 @@ export interface LeagueMembershipProps {
joinedAt?: Date;
}
export class LeagueMembership implements IEntity<string> {
export class LeagueMembership implements Entity<string> {
readonly id: string;
readonly leagueId: LeagueId;
readonly driverId: DriverId;

View File

@@ -4,7 +4,7 @@
* Represents the scoring configuration for a league season.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import type { ChampionshipConfig } from '../types/ChampionshipConfig';
import { SeasonId } from './season/SeasonId';
@@ -25,7 +25,7 @@ export interface LeagueScoringConfigRehydrateProps {
championships: ChampionshipConfig[];
}
export class LeagueScoringConfig implements IEntity<LeagueScoringConfigId> {
export class LeagueScoringConfig implements Entity<LeagueScoringConfigId> {
readonly id: LeagueScoringConfigId;
readonly seasonId: SeasonId;
readonly scoringPresetId: ScoringPresetId | undefined;

View File

@@ -5,7 +5,7 @@
* Contains base image and sponsor decal placements.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import type { LiveryDecal } from '../value-objects/LiveryDecal';
import { LiveryTemplateId } from './LiveryTemplateId';
@@ -16,7 +16,7 @@ import { ImageUrl } from './ImageUrl';
import { LiveryTemplateCreatedAt } from './LiveryTemplateCreatedAt';
import { LiveryTemplateUpdatedAt } from './LiveryTemplateUpdatedAt';
export class LiveryTemplate implements IEntity<LiveryTemplateId> {
export class LiveryTemplate implements Entity<LiveryTemplateId> {
readonly id: LiveryTemplateId;
readonly leagueId: LeagueId;
readonly seasonId: SeasonId;

View File

@@ -12,7 +12,7 @@
* - withdrawn: Protesting driver withdrew the protest
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { ProtestId } from './ProtestId';
import { RaceId } from './RaceId';
import { DriverId } from './DriverId';
@@ -58,7 +58,7 @@ export interface ProtestProps {
defenseRequestedBy?: StewardId;
}
export class Protest implements IEntity<string> {
export class Protest implements Entity<string> {
private constructor(private readonly props: ProtestProps) {}
static create(props: {

View File

@@ -6,7 +6,7 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { SessionType } from '../value-objects/SessionType';
import { RaceStatus, RaceStatusValue } from '../value-objects/RaceStatus';
import { ParticipantCount } from '../value-objects/ParticipantCount';
@@ -15,7 +15,7 @@ import { StrengthOfField } from '../value-objects/StrengthOfField';
export type { RaceStatus, RaceStatusValue } from '../value-objects/RaceStatus';
export class Race implements IEntity<string> {
export class Race implements Entity<string> {
readonly id: string;
readonly leagueId: string;
readonly scheduledAt: Date;

View File

@@ -6,13 +6,13 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { Session } from './Session';
import { SessionType } from '../value-objects/SessionType';
export type RaceEventStatus = 'scheduled' | 'in_progress' | 'awaiting_stewarding' | 'closed' | 'cancelled';
export class RaceEvent implements IEntity<string> {
export class RaceEvent implements Entity<string> {
readonly id: string;
readonly seasonId: string;
readonly leagueId: string;

View File

@@ -4,7 +4,7 @@
* Represents a registration of a driver for a specific race.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { RaceId } from './RaceId';
import { DriverId } from './DriverId';
@@ -17,7 +17,7 @@ export interface RaceRegistrationProps {
registeredAt?: Date;
}
export class RaceRegistration implements IEntity<string> {
export class RaceRegistration implements Entity<string> {
readonly id: string;
readonly raceId: RaceId;
readonly driverId: DriverId;

View File

@@ -2,7 +2,7 @@
* Enhanced Result entity with detailed incident tracking
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { RaceIncidents, type IncidentRecord } from '../value-objects/RaceIncidents';
import { DriverId } from './DriverId';
@@ -10,7 +10,7 @@ import { RaceId } from './RaceId';
import { LapTime } from './result/LapTime';
import { Position } from './result/Position';
export class ResultWithIncidents implements IEntity<string> {
export class ResultWithIncidents implements Entity<string> {
readonly id: string;
readonly raceId: RaceId;
readonly driverId: DriverId;

View File

@@ -6,12 +6,12 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { SessionType } from '../value-objects/SessionType';
export type SessionStatus = 'scheduled' | 'running' | 'completed' | 'cancelled';
export class Session implements IEntity<string> {
export class Session implements Entity<string> {
readonly id: string;
readonly raceEventId: string;
readonly scheduledAt: Date;

View File

@@ -6,7 +6,7 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { Money } from '../value-objects/Money';
import type { SponsorshipTier } from './season/SeasonSponsorship';
@@ -29,7 +29,7 @@ export interface SponsorshipRequestProps {
rejectionReason?: string;
}
export class SponsorshipRequest implements IEntity<string> {
export class SponsorshipRequest implements Entity<string> {
readonly id: string;
readonly sponsorId: string;
readonly entityType: SponsorableEntityType;

View File

@@ -6,14 +6,14 @@
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { LeagueId } from './LeagueId';
import { DriverId } from './DriverId';
import { Points } from '../value-objects/Points';
import { Position } from './championship/Position';
export class Standing implements IEntity<string> {
export class Standing implements Entity<string> {
readonly id: string;
readonly leagueId: LeagueId;
readonly driverId: DriverId;

View File

@@ -6,7 +6,7 @@
* basic invariants around identity and core properties.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { TeamName } from '../value-objects/TeamName';
import { TeamTag } from '../value-objects/TeamTag';
@@ -16,7 +16,7 @@ import { LeagueId } from './LeagueId';
import { TeamCreatedAt } from '../value-objects/TeamCreatedAt';
import { MediaReference } from '@core/domain/media/MediaReference';
export class Team implements IEntity<string> {
export class Team implements Entity<string> {
readonly id: string;
readonly name: TeamName;
readonly tag: TeamTag;

View File

@@ -1,4 +1,4 @@
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { TeamRatingEventId } from '../value-objects/TeamRatingEventId';
import { TeamRatingDimensionKey } from '../value-objects/TeamRatingDimensionKey';
import { TeamRatingDelta } from '../value-objects/TeamRatingDelta';
@@ -32,7 +32,7 @@ export interface TeamRatingEventProps {
version: number;
}
export class TeamRatingEvent implements IEntity<TeamRatingEventId> {
export class TeamRatingEvent implements Entity<TeamRatingEventId> {
readonly id: TeamRatingEventId;
readonly teamId: string;
readonly dimension: TeamRatingDimensionKey;

View File

@@ -6,7 +6,7 @@
*/
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { TrackName } from '../value-objects/TrackName';
import { TrackShortName } from '../value-objects/TrackShortName';
import { TrackCountry } from '../value-objects/TrackCountry';
@@ -18,7 +18,7 @@ import { TrackImageUrl } from '../value-objects/TrackImageUrl';
export type TrackCategory = 'oval' | 'road' | 'street' | 'dirt';
export type TrackDifficulty = 'beginner' | 'intermediate' | 'advanced' | 'expert';
export class Track implements IEntity<string> {
export class Track implements Entity<string> {
readonly id: string;
readonly name: TrackName;
readonly shortName: TrackShortName;

View File

@@ -1,11 +1,11 @@
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../../errors/RacingDomainError';
import type { ParticipantRef } from '../../types/ParticipantRef';
import { Points } from '../../value-objects/Points';
import { Position } from './Position';
import { ResultsCount } from './ResultsCount';
export class ChampionshipStanding implements IEntity<string> {
export class ChampionshipStanding implements Entity<string> {
readonly id: string;
readonly seasonId: string;
readonly championshipId: string;

View File

@@ -6,7 +6,7 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { Money } from '../../value-objects/Money';
import { LeagueWalletId } from './LeagueWalletId';
@@ -21,7 +21,7 @@ export interface LeagueWalletProps {
createdAt: Date;
}
export class LeagueWallet implements IEntity<LeagueWalletId> {
export class LeagueWallet implements Entity<LeagueWalletId> {
readonly id: LeagueWalletId;
readonly leagueId: LeagueId;
readonly balance: Money;

View File

@@ -7,7 +7,7 @@
import { RacingDomainValidationError, RacingDomainInvariantError } from '../../errors/RacingDomainError';
import type { Money } from '../../value-objects/Money';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { TransactionId } from './TransactionId';
import { LeagueWalletId } from './LeagueWalletId';
@@ -34,7 +34,7 @@ export interface TransactionProps {
metadata: Record<string, unknown> | undefined;
}
export class Transaction implements IEntity<TransactionId> {
export class Transaction implements Entity<TransactionId> {
readonly id: TransactionId;
readonly walletId: LeagueWalletId;
readonly type: TransactionType;

View File

@@ -6,7 +6,7 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { PenaltyId } from './PenaltyId';
import { LeagueId } from '../LeagueId';
import { RaceId } from '../RaceId';
@@ -60,7 +60,7 @@ export function penaltyTypeRequiresValue(type: PenaltyTypeValue): boolean {
return PENALTY_TYPES_REQUIRING_VALUE.includes(type);
}
export class Penalty implements IEntity<string> {
export class Penalty implements Entity<string> {
private constructor(private readonly props: PenaltyProps) {}
static create(props: {

View File

@@ -5,7 +5,7 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { Money } from '../../value-objects/Money';
import { Position } from '../championship/Position';
@@ -27,7 +27,7 @@ export interface PrizeProps {
description: string | undefined;
}
export class Prize implements IEntity<PrizeId> {
export class Prize implements Entity<PrizeId> {
readonly id: PrizeId;
readonly seasonId: SeasonId;
readonly position: Position;

View File

@@ -6,14 +6,14 @@
*/
import { RacingDomainValidationError } from '../../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { RaceId } from '../RaceId';
import { DriverId } from '../DriverId';
import { Position } from './Position';
import { LapTime } from './LapTime';
import { IncidentCount } from './IncidentCount';
export class Result implements IEntity<string> {
export class Result implements Entity<string> {
readonly id: string;
readonly raceId: RaceId;
readonly driverId: DriverId;

View File

@@ -2,7 +2,7 @@ import {
RacingDomainInvariantError,
RacingDomainValidationError,
} from '../../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { SeasonSchedule } from '../../value-objects/SeasonSchedule';
import type { SeasonScoringConfig } from '../../value-objects/SeasonScoringConfig';
import type { SeasonDropPolicy } from '../../value-objects/SeasonDropPolicy';
@@ -11,7 +11,7 @@ import { SeasonStatus, SeasonStatusValue } from '../../value-objects/SeasonStatu
import { ParticipantCount } from '../../value-objects/ParticipantCount';
import { MaxParticipants } from '../../value-objects/MaxParticipants';
export class Season implements IEntity<string> {
export class Season implements Entity<string> {
readonly id: string;
readonly leagueId: string;
readonly gameId: string;

View File

@@ -6,7 +6,7 @@
*/
import { RacingDomainValidationError, RacingDomainInvariantError } from '../../errors/RacingDomainError';
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import type { Money } from '../../value-objects/Money';
@@ -32,7 +32,7 @@ export interface SeasonSponsorshipProps {
description?: string;
}
export class SeasonSponsorship implements IEntity<string> {
export class SeasonSponsorship implements Entity<string> {
readonly id: string;
readonly seasonId: string;
readonly leagueId: string | undefined;

View File

@@ -1,7 +0,0 @@
import * as mod from '@core/racing/domain/entities/season/index';
describe('racing/domain/entities/season/index.ts', () => {
it('imports', () => {
expect(mod).toBeTruthy();
});
});

View File

@@ -1,3 +0,0 @@
export * from './Season';
export * from './SeasonId';
export * from './SeasonSponsorship';

View File

@@ -4,7 +4,7 @@
* Represents a sponsor that can sponsor leagues/seasons.
* Aggregate root for sponsor information.
*/
import type { IEntity } from '@core/shared/domain';
import type { Entity } from '@core/shared/domain';
import { SponsorCreatedAt } from './SponsorCreatedAt';
import { SponsorEmail } from './SponsorEmail';
import { SponsorId } from './SponsorId';
@@ -13,7 +13,7 @@ import { Url } from './Url';
// TODO sponsor is not actually the racing domain in my opinion
export class Sponsor implements IEntity<SponsorId> {
export class Sponsor implements Entity<SponsorId> {
readonly id: SponsorId;
readonly name: SponsorName;
readonly contactEmail: SponsorEmail;