import { plainToInstance } from "class-transformer"; import { validate } from "class-validator"; import { User } from "../../../models/User"; import { RegisterInput, RegisterResult } from "./types"; /* const isStrongPassword = (password: string): { valid: boolean; message: string } => { if (password.length < 8) return { message: "Password must be at least 8 characters", valid: false }; if (!/[A-Z]/.test(password)) return { message: "Password must contain at least 1 uppercase letter", valid: false }; if (!/[a-z]/.test(password)) return { message: "Password must contain at least 1 lowercase letter", valid: false }; if (!/[0-9]/.test(password)) return { message: "Password must contain at least 1 number", valid: false }; if (!/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) return { message: "Password must contain at least 1 special character", valid: false }; return { message: "", valid: true }; }; */ export const register = async (input: RegisterInput): Promise => { const dto = plainToInstance(RegisterInput, input); const errors = await validate(dto); if (errors.length > 0) { const message = Object.values(errors[0].constraints!)[0]; return { code: 400, message, }; } const { companyName, phoneNumber, firstName, lastName, password, mail } = input; const existingUser = await User.findOne({ mail }); if (existingUser) { return { message: "Email already in use", code: 409 }; } const existingPhone = await User.findOne({ phoneNumber }); if (existingPhone) { return { message: "Phone number already in use", code: 409 }; } await User.create({ fullName: `${firstName} ${lastName}`, phoneNumber, companyName, firstName, lastName, password, mail }); return { message: "Registration successful", code: 201 }; }; export default register;