27 lines
750 B
TypeScript
27 lines
750 B
TypeScript
import { RacingDomainValidationError } from '../errors/RacingDomainError';
|
|
import type { IEntity } from '@gridpilot/shared/domain';
|
|
|
|
export class Game implements IEntity<string> {
|
|
readonly id: string;
|
|
readonly name: string;
|
|
|
|
private constructor(props: { id: string; name: string }) {
|
|
this.id = props.id;
|
|
this.name = props.name;
|
|
}
|
|
|
|
static create(props: { id: string; name: string }): Game {
|
|
if (!props.id || props.id.trim().length === 0) {
|
|
throw new RacingDomainValidationError('Game ID is required');
|
|
}
|
|
|
|
if (!props.name || props.name.trim().length === 0) {
|
|
throw new RacingDomainValidationError('Game name is required');
|
|
}
|
|
|
|
return new Game({
|
|
id: props.id,
|
|
name: props.name,
|
|
});
|
|
}
|
|
} |