55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
/**
|
|
* RaceScheduleCommandModel
|
|
*
|
|
* UX-only model for managing race creation/editing state.
|
|
*/
|
|
|
|
export interface RaceScheduleFormData {
|
|
track: string;
|
|
car: string;
|
|
scheduledAtIso: string;
|
|
}
|
|
|
|
export interface RaceScheduleValidationErrors {
|
|
track?: string;
|
|
car?: string;
|
|
scheduledAtIso?: string;
|
|
}
|
|
|
|
export class RaceScheduleCommandModel {
|
|
private _track: string;
|
|
private _car: string;
|
|
private _scheduledAtIso: string;
|
|
|
|
constructor(initial: Partial<RaceScheduleFormData> = {}) {
|
|
this._track = initial.track || '';
|
|
this._car = initial.car || '';
|
|
this._scheduledAtIso = initial.scheduledAtIso || '';
|
|
}
|
|
|
|
get track(): string { return this._track; }
|
|
set track(value: string) { this._track = value; }
|
|
|
|
get car(): string { return this._car; }
|
|
set car(value: string) { this._car = value; }
|
|
|
|
get scheduledAtIso(): string { return this._scheduledAtIso; }
|
|
set scheduledAtIso(value: string) { this._scheduledAtIso = value; }
|
|
|
|
validate(): RaceScheduleValidationErrors {
|
|
const errors: RaceScheduleValidationErrors = {};
|
|
if (!this._track.trim()) errors.track = 'Track is required';
|
|
if (!this._car.trim()) errors.car = 'Car is required';
|
|
if (!this._scheduledAtIso) errors.scheduledAtIso = 'Date and time are required';
|
|
return errors;
|
|
}
|
|
|
|
toCommand(): { track: string; car: string; scheduledAtIso: string } {
|
|
return {
|
|
track: this._track,
|
|
car: this._car,
|
|
scheduledAtIso: this._scheduledAtIso,
|
|
};
|
|
}
|
|
}
|