website refactor
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* 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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user