Sindbad~EG File Manager

Current Path : /home/infinitibizsol/.trash/controllers.5/common/
Upload File :
Current File : /home/infinitibizsol/.trash/controllers.5/common/basicContactInfo.js

import BasicContactInfo from "../../model/basicontactInfo";
import { successResponse, failedResponse } from "../../utils/responseFormat";

const findOne = async (userId) => {
  try {
    let data = await BasicContactInfo.findOne(
      { user_id: userId },
      {
        __v: false,
        modifiedOn: false,
        createdOn: false,
      }
    );

    return data;
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};
const filteredPrimaryData = async () => {
  const filteredData = await BasicContactInfo.aggregate([
    {
      $project: {
        phone_numbers: {
          $cond: {
            if: { $isArray: "$phone_numbers" },
            then: {
              $filter: {
                input: "$phone_numbers",
                as: "phone",
                cond: { $eq: ["$$phone.is_primary", true] },
              },
            },
            else: [],
          },
        },
        emails: {
          $cond: {
            if: { $isArray: "$emails" },
            then: {
              $filter: {
                input: "$emails",
                as: "email",
                cond: { $eq: ["$$email.is_primary", true] },
              },
            },
            else: [],
          },
        },
      },
    },
    {
      $match: {
        $or: [
          { "phone_numbers.0": { $exists: true } },
          { "emails.0": { $exists: true } },
        ],
      },
    },
  ]);
  return filteredData;
};
const index = async (req, res) => {
  //query={contact_id:?} or {user_id:?}

  try {
    const query = req.query;
    query.user_id = query.contact_id ? undefined : req.user._id;
    let allData = await BasicContactInfo.find(query, {
      __v: false,
      modifiedOn: false,
      createdOn: false,
    })
      .populate("user_id", ["_id", "first_name", "last_name"])
      .populate("contact_id", ["_id", "first_name", "last_name"])
      .exec();
    return successResponse(res, allData);
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const add = async (req, res) => {
  try {
    const { phone_numbers, emails } = req.body;
    const userId = req.user._id;

    let basicContactInfo = await findOne(userId); // Fetch user's contact info

    if (!basicContactInfo) {
      // Create new contact info if none exists
      req.body.user_id = userId;
      basicContactInfo = new BasicContactInfo(req.body);
    } else {
      // Update existing contact info
      if (phone_numbers && Array.isArray(phone_numbers)) {
        basicContactInfo.phone_numbers.push(...phone_numbers);
      }
      if (emails && Array.isArray(emails)) {
        basicContactInfo.emails.push(...emails);
      }
    }

    await basicContactInfo.save();

    return successResponse(
      res,
      basicContactInfo,
      "Basic Contact Info saved successfully"
    );
  } catch (error) {
    return failedResponse({
      res,
      error: error.message,
    });
  }
};

const edit = async (req, res) => {
  try {
    const { phone_numbers, emails } = req.body;
    const userId = req.user._id;

    let phoneNumbersUpdate, emailsUpdate;

    if (phone_numbers) {
      phoneNumbersUpdate = await BasicContactInfo.findOneAndUpdate(
        {
          user_id: userId,
          "phone_numbers._id": phone_numbers._id,
        },
        {
          $set: {
            "phone_numbers.$.phone_no": phone_numbers.phone_no,
            "phone_numbers.$.is_primary": phone_numbers.is_primary,
            "phone_numbers.$.type": phone_numbers.type,
          },
        },
        { new: true }
      );
    }

    if (emails) {
      emailsUpdate = await BasicContactInfo.findOneAndUpdate(
        {
          user_id: userId,
          "emails._id": emails._id,
        },
        {
          $set: {
            "emails.$.email_address": emails.email_address,
            "emails.$.is_primary": emails.is_primary,
            "emails.$.type": emails.type,
          },
        },
        { new: true }
      );
    }

    if (!phone_numbers && !emails) {
      return failedResponse({ res, error: "No data provided to update." });
    }

    if ((phone_numbers && !phoneNumbersUpdate) || (emails && !emailsUpdate)) {
      return failedResponse({ res, error: "No data found." });
    }

    return successResponse(
      res,
      {
        phoneNumbersUpdate,
        emailsUpdate,
      },
      "Data updated successfully"
    );
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const view = async (req, res) => {
  try {
    const query = req.query;
    let contact = await BasicContactInfo.find({ _id: req.params.id });
    if (!contact) return failedResponse({ res, error: "No data found." });
    return successResponse(res, contact);
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const deleteData = async (req, res) => {
  try {
    const { phone_numbers, emails } = req.body;
    if (!phone_numbers && !emails) {
      return failedResponse({ res, error: "No data provided to update." });
    }
    let phoneNumbrsResult, emailsResult;
    if (phone_numbers) {
      phoneNumbrsResult = await BasicContactInfo.findOneAndUpdate(
        {
          "phone_numbers._id": phone_numbers.phone_id,
        },
        {
          $pull: {
            phone_numbers: {
              _id: phone_numbers.phone_id,
              phone_no: phone_numbers.phone_no,
            },
          },
        },
        { new: true }
      );
    }
    if (emails) {
      emailsResult = await BasicContactInfo.findOneAndUpdate(
        { "emails._id": emails.email_id },
        {
          $pull: {
            emails: {
              _id: emails.email_id,
              email_address: emails.email_address,
            },
          },
        },
        { new: true }
      );
    }

    if ((phone_numbers && !phoneNumbrsResult) || (emails && !emailsResult)) {
      return failedResponse({ res, error: "No data found." });
    }
    return successResponse(
      res,
      { phoneNumbrsResult, emailsResult },
      "BasicContactInfo and related data deleted successfully."
    );
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const saveBasicContact = async (req, res) => {
  const { contact_id, phone_numbers, emails } = req.body;
  let user_id;
  user_id = contact_id ? undefined : req.user._id;

  let contact;
  try {
    contact = await BasicContactInfo.findOne({
      user_id,
      contact_id,
    });
    if (contact) {
      // Update the existing record
      contact.phone_numbers = phone_numbers;
      contact.emails = emails;
    } else {
      user_id = contact_id ? undefined : user_id;

      // Create a new record
      contact = new BasicContactInfo({
        user_id,
        contact_id,
        phone_numbers,
        emails,
      });
    }
    await contact.save();

    return successResponse(
      res,
      contact,
      "Contact information saved successfully."
    );
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

export default { index, add, edit, view, deleteData, saveBasicContact };

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