index.ts 3.1 KB

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