I have some problematic for now that i want to know ur opinions. First, i have a userPassword which represent a value object within my user domain model. i would like to validate 2 cases when creating my userPassword object :
Not empty value of password
Hash the given value Thus, i don't really know the best approach to achieve it. Now that the problem was exposed, take a look at my code below :
export class UserPassword {
private readonly value:string
private constructor(value: string) {
this.value = value
}
public getValue():string {
return this.value
}
// My static factory in which i want to apply my validations cases
static create(password: string):UserPassword {
// Need to be implemented
}
private async hashPassword(password: string):Promise<string>{
return await bcrypt.hash(password,10)
}
async comparePassword(password:string):Promise<boolean> {
let hashed: string = this.value
return await bcrypt.compare(password, hashed)
}
}
For validations purposes, i just done some verifications before creating my password object. Because i think that it's always relevant to defined validation logic in the object contruction. So here is my solution:
export class UserPassword {
private readonly value:string
constructor(value: string) {
if (value === "") {
throw new UserInputError("Password must be filled")
}
else {
this.hashPassword(value).then(r => console.log(r))
this.value = value
}
}
public getValue():string {
return this.value
}
private async hashPassword(password: string):Promise<string>{
return bcrypt.hash(password,10)
}
async comparePassword(password:string):Promise<boolean> {
let hashed: string = this.value
return bcrypt.compare(password, hashed)
}
}