Snai3i-LandingPage-FormBuilder / backend / src / controllers / stormController.ts
stormController.ts
Raw
import { NextFunction, Request, Response } from "express";
import StormModel from "../models/stormModel";
import Logger from "../utils/logger";
import { ErrorResponse, SuccessResponse } from "../utils/response";
import { HttpCodes } from "../config/errors";
import sendMail from "../utils/sendMail";

export const generateCode = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  try {
    const { email } = req.body;
    const code =
      Math.random().toString(36).substring(2, 15) +
      Math.random().toString(36).substring(2, 15);

    const newStorm = await StormModel.create({
      email: req.body.email,
      code,
    });

    await sendMail({
      email,
      subject: `Snai3i storm registration`,
      data: {
        email,
        code,
      },
    });

    Logger.info(`Storm code ${code} generated successfully.`);
    SuccessResponse(
      res,
      HttpCodes.Created.code,
      newStorm,
      "Storm code generated successfully."
    );
  } catch (error) {
    Logger.error(`Failed to generate code - ${error}`);
    return ErrorResponse(
      res,
      HttpCodes.InternalServerError.code,
      "Failed to generate code. Please try again!"
    );
  }
};

export const verifyCode = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  try {
    const { email, code } = req.body;

    const storm = await StormModel.findOne({ email, code });
    if (!storm) {
      return ErrorResponse(
        res,
        HttpCodes.NotFound.code,
        "Code is invalid. Please try again!"
      );
    }
    SuccessResponse(
      res,
      HttpCodes.OK.code,
      { storm, access: true },
      "Code verified successfully."
    );
  } catch (error) {
    Logger.error(`Failed to verify code - ${error}`);
    return ErrorResponse(
      res,
      HttpCodes.InternalServerError.code,
      "Failed to verify code. Please try again!"
    );
  }
};