40 lines
1.3 KiB
TypeScript
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)
|
|
);
|
|
}
|
|
} |