55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
export interface RaceCreationResultData {
|
|
sessionId: string;
|
|
price: string;
|
|
timestamp: Date;
|
|
}
|
|
|
|
export class RaceCreationResult {
|
|
private readonly _sessionId: string;
|
|
private readonly _price: string;
|
|
private readonly _timestamp: Date;
|
|
|
|
private constructor(data: RaceCreationResultData) {
|
|
this._sessionId = data.sessionId;
|
|
this._price = data.price;
|
|
this._timestamp = data.timestamp;
|
|
}
|
|
|
|
static create(data: RaceCreationResultData): RaceCreationResult {
|
|
if (!data.sessionId || data.sessionId.trim() === '') {
|
|
throw new Error('Session ID cannot be empty');
|
|
}
|
|
if (!data.price || data.price.trim() === '') {
|
|
throw new Error('Price cannot be empty');
|
|
}
|
|
return new RaceCreationResult(data);
|
|
}
|
|
|
|
get sessionId(): string {
|
|
return this._sessionId;
|
|
}
|
|
|
|
get price(): string {
|
|
return this._price;
|
|
}
|
|
|
|
get timestamp(): Date {
|
|
return this._timestamp;
|
|
}
|
|
|
|
equals(other: RaceCreationResult): boolean {
|
|
return (
|
|
this._sessionId === other._sessionId &&
|
|
this._price === other._price &&
|
|
this._timestamp.getTime() === other._timestamp.getTime()
|
|
);
|
|
}
|
|
|
|
toJSON(): { sessionId: string; price: string; timestamp: string } {
|
|
return {
|
|
sessionId: this._sessionId,
|
|
price: this._price,
|
|
timestamp: this._timestamp.toISOString(),
|
|
};
|
|
}
|
|
} |