index.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. import {
  14. formatValidationErrors
  15. } from "../../../utils";
  16. export const register = async (input: RegisterInput): Promise<RegisterResult> => {
  17. const dto = plainToInstance(RegisterInput, input);
  18. const errors = await validate(dto);
  19. if (errors.length > 0) {
  20. return {
  21. message: formatValidationErrors(errors),
  22. code: 400,
  23. };
  24. }
  25. const {
  26. companyName,
  27. phoneNumber,
  28. firstName,
  29. lastName,
  30. password,
  31. mail
  32. } = input;
  33. const existingUser = await User.findOne({
  34. mail
  35. });
  36. if (existingUser) {
  37. return {
  38. message: "email-already-in-use",
  39. code: 409
  40. };
  41. }
  42. const existingPhone = await User.findOne({
  43. phoneNumber
  44. });
  45. if (existingPhone) {
  46. return {
  47. message: "phone-already-in-use",
  48. code: 409
  49. };
  50. }
  51. await User.create({
  52. fullName: `${firstName} ${lastName}`,
  53. phoneNumber,
  54. companyName,
  55. firstName,
  56. lastName,
  57. password,
  58. mail
  59. });
  60. return {
  61. message: "registration-successful",
  62. code: 201
  63. };
  64. };
  65. export default register;