vendor.js 2.05 KB
"use strict";

/**
 * vendor controller
 */

const { createCoreController } = require("@strapi/strapi").factories;

module.exports = createCoreController("api::vendor.vendor", () => ({
  async create(ctx) {
    // console.log("ctx", ctx.request.body);
    // Get user from user entity
    const currentUser = await strapi
      .query("plugin::users-permissions.user")
      .findOne({
        populate: ["user"],
        where: {
          $and: [{ email: ctx.request.body.data.email }],
        },
      });
    //   Check if its already existing in vendor entity
    // console.log("currentUser", currentUser);

    let existingUser;
    existingUser = await strapi.entityService.findMany("api::vendor.vendor", {
      fields: ["id"],
      filter: { phoneNumber: ctx.request.body.data.phoneNumber },
    });

    if (!existingUser) {
      existingUser = await strapi.entityService.findMany("api::vendor.vendor", {
        fields: ["id"],
        filters: { email: ctx.request.body.data.email },
      });
    }

    // Generate one time password (otp)
    const oneTimePassword = Math.floor(100000 + Math.random() * 900000);

    await strapi.entityService.update(
      "plugin::users-permissions.user",
      currentUser.id,
      {
        data: {
          oneTimePassword: `${oneTimePassword}`,
        },
      }
    );
    const date = new Date();
    // TODO: Code to send OTP on email
    // TODO: Code to send OTP on SMS

    if (existingUser && existingUser.length !== 0) {
    } else {
      ctx.request.body.data.user = currentUser.id;
      const response = await strapi.entityService.create("api::vendor.vendor", {
        data: { ...ctx.request.body.data, publishedAt: date },
      });
      console.log("response", response);
      return { otpSent: true, data: response };

      //   ctx.request.body.data.user = currentUser;
      //   console.log("ctx.request.body.data", ctx.request.body.data);
      //   return await super.create(ctx);
    }

    ctx.send({
      ok: true,
      message: "Existing vendor found, skipping creation only sent OTP.",
    });
  },
}));