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 => { 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;