export interface LoginFormData { email: string; password: string; } export interface LoginValidationErrors { email?: string; password?: string; } /** * LoginCommandModel * * Encapsulates login form state, client-side validation, and * prepares data for submission to the AuthService. */ export class LoginCommandModel { private _email: string; private _password: string; constructor(initial: LoginFormData = { email: '', password: '' }) { this._email = initial.email; this._password = initial.password; } get email(): string { return this._email; } set email(value: string) { this._email = value; } get password(): string { return this._password; } set password(value: string) { this._password = value; } /** Basic client-side validation for login form */ validate(): LoginValidationErrors { const errors: LoginValidationErrors = {}; if (!this._email.trim()) { errors.email = 'Email is required'; } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(this._email)) { errors.email = 'Invalid email format'; } if (!this._password) { errors.password = 'Password is required'; } return errors; } /** Convert to API LoginParams DTO */ toRequestDto(): { email: string; password: string } { return { email: this._email, password: this._password, }; } }