index.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import {
  2. plainToInstance
  3. } from "class-transformer";
  4. import {
  5. validate
  6. } from "class-validator";
  7. import {
  8. User
  9. } from "../../../models/User";
  10. import {
  11. RegisterInput, RegisterResult
  12. } from "./types";
  13. /* const isStrongPassword = (password: string): { valid: boolean; message: string } => {
  14. if (password.length < 8) return { message: "Password must be at least 8 characters", valid: false };
  15. if (!/[A-Z]/.test(password)) return { message: "Password must contain at least 1 uppercase letter", valid: false };
  16. if (!/[a-z]/.test(password)) return { message: "Password must contain at least 1 lowercase letter", valid: false };
  17. if (!/[0-9]/.test(password)) return { message: "Password must contain at least 1 number", valid: false };
  18. if (!/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) return { message: "Password must contain at least 1 special character", valid: false };
  19. return { message: "", valid: true };
  20. }; */
  21. export const register = async (input: RegisterInput): Promise<RegisterResult> => {
  22. const dto = plainToInstance(RegisterInput, input);
  23. const errors = await validate(dto);
  24. if (errors.length > 0) {
  25. const message = Object.values(errors[0].constraints!)[0];
  26. return {
  27. code: 400,
  28. message,
  29. };
  30. }
  31. const {
  32. companyName,
  33. phoneNumber,
  34. firstName,
  35. lastName,
  36. password,
  37. mail
  38. } = input;
  39. const existingUser = await User.findOne({
  40. mail
  41. });
  42. if (existingUser) {
  43. return {
  44. message: "Email already in use",
  45. code: 409
  46. };
  47. }
  48. const existingPhone = await User.findOne({
  49. phoneNumber
  50. });
  51. if (existingPhone) {
  52. return {
  53. message: "Phone number already in use",
  54. code: 409
  55. };
  56. }
  57. await User.create({
  58. fullName: `${firstName} ${lastName}`,
  59. phoneNumber,
  60. companyName,
  61. firstName,
  62. lastName,
  63. password,
  64. mail
  65. });
  66. return {
  67. message: "Registration successful",
  68. code: 201
  69. };
  70. };
  71. export default register;