| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import {
- Menu
- } from "../../../models/Menu";
- import Plan from "../../../models/Plan";
- import Subscription from "../../../models/Subscription";
- import {
- User
- } from "../../../models/User";
- import smsSend from "../smsSend";
- import {
- RegisterInput,
- RegisterResult
- } from "./types";
- const generateSlug = (companyName: string): string => {
- return companyName
- .toLowerCase()
- .replace(/ğ/g, "g")
- .replace(/ü/g, "u")
- .replace(/ş/g, "s")
- .replace(/ı/g, "i")
- .replace(/ö/g, "o")
- .replace(/ç/g, "c")
- .replace(/[^a-z0-9\s-]/g, "")
- .trim()
- .replace(/\s+/g, "-")
- .replace(/-+/g, "-");
- };
- const register = async (input: RegisterInput): Promise<RegisterResult> => {
- try {
- 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-already-in-use",
- code: 409
- };
- }
- const slug = generateSlug(companyName);
- const existingSlug = await User.findOne({
- slug
- });
- if (existingSlug) {
- return {
- message: "company-name-already-in-use",
- code: 409
- };
- }
- const newUser = await User.create({
- fullName: `${firstName} ${lastName}`,
- phoneNumber,
- companyName,
- firstName,
- lastName,
- password,
- slug,
- mail
- });
-
- await Menu.create({
- userID: newUser._id,
- isViewPrice: true,
- isActive: true,
- products: []
- });
- const starterPlan = await Plan.findOne({
- title: "Starter"
- });
-
- await Subscription.create({
- userID: newUser._id.toString(),
- planID: starterPlan._id,
- title: starterPlan.title,
- isActive: true,
- startDate: new Date(),
- endDate: new Date(new Date().setFullYear(new Date().getFullYear() + 1)),
- status: "active",
- price: starterPlan!.type.find((t: { type: string; price: number }) => t.type === "yearly")?.price ?? 0
- });
- await smsSend({
- userID: newUser._id.toString()
- });
- return {
- message: "registration-successful-please-verify-your-phone",
- code: 201
- };
- } catch (error) {
- console.error("FinishMailVerify error:", error);
- return {
- message: "internal-server-error",
- code: 500
- };
- }
- };
- export default register;
|