index.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import {
  2. Menu
  3. } from "../../../models/Menu";
  4. import Plan from "../../../models/Plan";
  5. import Subscription from "../../../models/Subscription";
  6. import {
  7. User
  8. } from "../../../models/User";
  9. import smsSend from "../smsSend";
  10. import {
  11. RegisterInput,
  12. RegisterResult
  13. } from "./types";
  14. const generateSlug = (companyName: string): string => {
  15. return companyName
  16. .toLowerCase()
  17. .replace(/ğ/g, "g")
  18. .replace(/ü/g, "u")
  19. .replace(/ş/g, "s")
  20. .replace(/ı/g, "i")
  21. .replace(/ö/g, "o")
  22. .replace(/ç/g, "c")
  23. .replace(/[^a-z0-9\s-]/g, "")
  24. .trim()
  25. .replace(/\s+/g, "-")
  26. .replace(/-+/g, "-");
  27. };
  28. const register = async (input: RegisterInput): Promise<RegisterResult> => {
  29. try {
  30. const {
  31. companyName,
  32. phoneNumber,
  33. firstName,
  34. lastName,
  35. password,
  36. mail
  37. } = input;
  38. const existingUser = await User.findOne({
  39. mail
  40. });
  41. if (existingUser) {
  42. return {
  43. message: "email-already-in-use",
  44. code: 409
  45. };
  46. }
  47. const existingPhone = await User.findOne({
  48. phoneNumber
  49. });
  50. if (existingPhone) {
  51. return {
  52. message: "phone-already-in-use",
  53. code: 409
  54. };
  55. }
  56. const slug = generateSlug(companyName);
  57. const existingSlug = await User.findOne({
  58. slug
  59. });
  60. if (existingSlug) {
  61. return {
  62. message: "company-name-already-in-use",
  63. code: 409
  64. };
  65. }
  66. const newUser = await User.create({
  67. fullName: `${firstName} ${lastName}`,
  68. phoneNumber,
  69. companyName,
  70. firstName,
  71. lastName,
  72. password,
  73. slug,
  74. mail
  75. });
  76. await Menu.create({
  77. userID: newUser._id,
  78. isViewPrice: true,
  79. isActive: true,
  80. products: []
  81. });
  82. const starterPlan = await Plan.findOne({
  83. title: "Starter"
  84. });
  85. await Subscription.create({
  86. userID: newUser._id.toString(),
  87. planID: starterPlan._id,
  88. title: starterPlan.title,
  89. isActive: true,
  90. startDate: new Date(),
  91. endDate: new Date(new Date().setFullYear(new Date().getFullYear() + 1)),
  92. status: "active",
  93. price: starterPlan!.type.find((t: { type: string; price: number }) => t.type === "yearly")?.price ?? 0
  94. });
  95. await smsSend({
  96. userID: newUser._id.toString()
  97. });
  98. return {
  99. message: "registration-successful-please-verify-your-phone",
  100. code: 201
  101. };
  102. } catch (error) {
  103. console.error("FinishMailVerify error:", error);
  104. return {
  105. message: "internal-server-error",
  106. code: 500
  107. };
  108. }
  109. };
  110. export default register;