Sindbad~EG File Manager

Current Path : /home/infinitibizsol/.trash/controllers.1/
Upload File :
Current File : /home/infinitibizsol/.trash/controllers.1/userSubscriptionController.js

const { Op, INTEGER } = require("sequelize");
const db = require("../models");
/* const getAllSubscribedAuctioneerList = async (req, res) => {
  try {
    const { userId, weekId } = req.body;
    let resultTableAdmin = await db.tblAuctioneer.findAll({
      attributes: ["auctioneer_id", "first_name", "per_unit_fee"],
      order: [["first_name", "ASC"]],
    });

    let resultTableSubscription = await db.tblUserSubAuctioneer.findAll({
      where: {
        user_id: userId,
      },
    });
    const adminIdsInSubTbl = new Set(
      resultTableSubscription.map((item) => item.auctioneer_id)
    );

    let resultTableAdminUsers = await db.tblOpportunity.findAll({
      where: {
        week_id: weekId,
        user_id: userId,
      },
    });
    const adminIdsInUsers = new Set(
      resultTableAdminUsers.map((item) => item.auctioneer_id)
    );

    resultTableAdmin = resultTableAdmin.map((item) => item.get());

    const data = resultTableAdmin.map((item) => ({
      ...item,
      status: adminIdsInSubTbl.has(item.auctioneer_id),
      opportunity_status: adminIdsInUsers.has(item.auctioneer_id),

      // status: true,
    }));
    return res.json({ status: 200, data: data });
  } catch (error) {
    return res.json(error.message);
  }
}; */

//Optimized Code
const getAllSubscribedAuctioneerList = async (req, res) => {
  try {
    const { userId, weekId } = req.body;

    const [resultTableAdmin, resultTableSubscription, resultTableAdminUsers] =
      await Promise.all([
        db.tblAuctioneer.findAll({
          attributes: ["auctioneer_id", "first_name", "per_unit_fee"],
          order: [["first_name", "ASC"]],
        }),
        db.tblUserSubAuctioneer.findAll({
          where: {
            user_id: userId,
          },
        }),
        db.tblOpportunity.findAll({
          where: {
            week_id: weekId,
            user_id: userId,
          },
        }),
      ]);

    const adminIdsInSubTbl = new Set(
      resultTableSubscription.map((item) => item.auctioneer_id)
    );
    const adminIdsInUsers = new Set(
      resultTableAdminUsers.map((item) => item.auctioneer_id)
    );

    const data = resultTableAdmin.map((item) => ({
      ...item.get(),
      status: adminIdsInSubTbl.has(item.auctioneer_id),
      opportunity_status: adminIdsInUsers.has(item.auctioneer_id),
    }));

    return res.json({ status: 200, data: data });
  } catch (error) {
    return res.json(error.message);
  }
};

const subscribeAuctioneer = async (req, res) => {
  try {
    // Set start_date as the current date
    const start_date = new Date();

    // Set expiration_date as one month from the current date
    const expirationDate = new Date();
    expirationDate.setMonth(expirationDate.getMonth() + 1);
    const expiration_date = expirationDate;

    const data = {
      user_id: req.body.user_id,
      auctioneer_id: req.body.auctioneer_id,
      start_date: start_date,
      expiration_date: expiration_date,
    };

    let result = await db.tblUserSubAuctioneer.create(data);

    /* let resultTableAdmin = await db.tblAuctioneer.findAll();

    let resultTableAdminUsers = await db.tblUserSubAuctioneer.findAll({
      where: {
        user_id: userId,
      },
    });
    const adminIdsInUsers = new Set(
      resultTableAdminUsers.map((item) => item.auctioneer_id)
    );

    resultTableAdmin = resultTableAdmin.map((item) => item.get());

    const data = resultTableAdmin.map((item) => ({
      ...item,
      status: adminIdsInUsers.has(item.auctioneer_id),

      // status: true,
    })); */

    return res.json({ status: 200, data: [result] });
  } catch (error) {
    return res.json(error.message);
  }
};

const unSubscribeAuctioneer = async (req, res) => {
  try {
    const { user_id, auctioneer_id } = req.body;

    let destroyOpportunity = db.tblOpportunity.destroy({
      where: {
        [Op.and]: [
          {
            user_id: user_id,
          },
          { auctioneer_id: auctioneer_id },
        ],
      },
    });
    let destroyUserSubAuctioneer = db.tblUserSubAuctioneer.destroy({
      where: {
        [Op.and]: [
          {
            user_id: user_id,
          },
          { auctioneer_id: auctioneer_id },
        ],
      },
    });

    const [opportunityResult, userSubAuctioneerResult] = await Promise.all([
      destroyOpportunity,
      destroyUserSubAuctioneer,
    ]);
    console.log("Opportunity Deletion Result:", opportunityResult);
    console.log("UserSubAuctioneer Deletion Result:", userSubAuctioneerResult);

    /* let resultTableAdmin = await db.tblAuctioneer.findAll();

    let resultTableAdminUsers = await db.tblUserSubAuctioneer.findAll({
      where: {
        user_id: userId,
      },
    });
    const adminIdsInUsers = new Set(
      resultTableAdminUsers.map((item) => item.auctioneer_id)
    );

    resultTableAdmin = resultTableAdmin.map((item) => item.get());

    const data = resultTableAdmin.map((item) => ({
      ...item,
      status: adminIdsInUsers.has(item.auctioneer_id),

      // status: true,
    })); */

    return res.json({ status: 200, message: "Success" });
  } catch (error) {
    return res.json(error.message);
  }
};

async function subscribeAuctioneerWebHook(user_id, auctioneer_id) {
  try {
    const dataObject = { user_id: user_id, auctioneer_id: auctioneer_id };
    let result = await db.tblUserSubAuctioneer.create(dataObject);
    return [result];
  } catch (error) {
    return res.json(error.message);
  }
}

module.exports = {
  subscribeAuctioneer,
  getAllSubscribedAuctioneerList,
  subscribeAuctioneerWebHook,
  unSubscribeAuctioneer,
};

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists