Files
gridpilot.gg/core/racing/domain/entities/ProtestDefense.ts
2025-12-17 00:33:13 +01:00

40 lines
1.3 KiB
TypeScript

import { DefenseStatement } from './DefenseStatement';
import { VideoUrl } from './VideoUrl';
import { SubmittedAt } from './SubmittedAt';
export class ProtestDefense {
private constructor(
private readonly _statement: DefenseStatement,
private readonly _videoUrl: VideoUrl | undefined,
private readonly _submittedAt: SubmittedAt
) {}
static create(statement: string, submittedAt: Date, videoUrl?: string): ProtestDefense {
const stmt = DefenseStatement.create(statement);
const video = videoUrl !== undefined ? VideoUrl.create(videoUrl) : undefined;
const submitted = SubmittedAt.create(submittedAt);
return new ProtestDefense(stmt, video, submitted);
}
get statement(): DefenseStatement {
return this._statement;
}
get videoUrl(): VideoUrl | undefined {
return this._videoUrl;
}
get submittedAt(): SubmittedAt {
return this._submittedAt;
}
equals(other: ProtestDefense): boolean {
const videoEqual = this._videoUrl === undefined && other._videoUrl === undefined ||
(this._videoUrl !== undefined && other._videoUrl !== undefined && this._videoUrl.equals(other._videoUrl));
return (
this._statement.equals(other._statement) &&
videoEqual &&
this._submittedAt.equals(other._submittedAt)
);
}
}