This commit is contained in:
2025-12-17 00:33:13 +01:00
parent 8c67081953
commit f01e01e50c
186 changed files with 9242 additions and 1342 deletions

View File

@@ -6,52 +6,62 @@
import type { IEntity } from '@core/shared/domain';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
import { RaceId } from './RaceId';
import { DriverId } from './DriverId';
import { RegisteredAt } from './RegisteredAt';
export interface RaceRegistrationProps {
id?: string;
raceId: string;
driverId: string;
registeredAt?: Date;
id?: string;
raceId: string;
driverId: string;
registeredAt?: Date;
}
export class RaceRegistration implements IEntity<string> {
readonly id: string;
readonly raceId: string;
readonly driverId: string;
readonly registeredAt: Date;
readonly id: string;
readonly raceId: RaceId;
readonly driverId: DriverId;
readonly registeredAt: RegisteredAt;
private constructor(props: Required<RaceRegistrationProps>) {
this.id = props.id;
this.raceId = props.raceId;
this.driverId = props.driverId;
this.registeredAt = props.registeredAt;
}
private constructor(props: {
id: string;
raceId: RaceId;
driverId: DriverId;
registeredAt: RegisteredAt;
}) {
this.id = props.id;
this.raceId = props.raceId;
this.driverId = props.driverId;
this.registeredAt = props.registeredAt;
}
static create(props: RaceRegistrationProps): RaceRegistration {
this.validate(props);
static create(props: RaceRegistrationProps): RaceRegistration {
RaceRegistration.validate(props);
const id =
props.id && props.id.trim().length > 0
? props.id
: `${props.raceId}:${props.driverId}`;
const raceId = RaceId.create(props.raceId);
const driverId = DriverId.create(props.driverId);
const registeredAt = RegisteredAt.create(props.registeredAt ?? new Date());
const registeredAt = props.registeredAt ?? new Date();
const id =
props.id && props.id.trim().length > 0
? props.id
: `${raceId.toString()}:${driverId.toString()}`;
return new RaceRegistration({
id,
raceId: props.raceId,
driverId: props.driverId,
registeredAt,
});
}
return new RaceRegistration({
id,
raceId,
driverId,
registeredAt,
});
}
private static validate(props: RaceRegistrationProps): void {
if (!props.raceId || props.raceId.trim().length === 0) {
throw new RacingDomainValidationError('Race ID is required');
}
private static validate(props: RaceRegistrationProps): void {
if (!props.raceId || props.raceId.trim().length === 0) {
throw new RacingDomainValidationError('Race ID is required');
}
if (!props.driverId || props.driverId.trim().length === 0) {
throw new RacingDomainValidationError('Driver ID is required');
}
}
if (!props.driverId || props.driverId.trim().length === 0) {
throw new RacingDomainValidationError('Driver ID is required');
}
}
}