fix data flow issues
This commit is contained in:
66
apps/website/lib/command-models/auth/LoginCommandModel.ts
Normal file
66
apps/website/lib/command-models/auth/LoginCommandModel.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user