Sindbad~EG File Manager

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

import mongoose from "mongoose";
import Contact from "../../model/contact";
import BasicContactInfo from "../../model/basicontactInfo";
import Address from "../../model/address";
import PersonalInfo from "../../model/personalInfo";
import AccountInfo from "../../model/accountInfo";
import AdditionalContact from "../../model/additionalContact";
import AccountInformation from "../../model/accountInfo";
import LinkedAccount from "../../model/linkedAccount";
import XDates from "../../model/XDates";
import Employer from "../../model/employer";
import SocialMedia from "../../model/socialMedia";
import { successResponse, failedResponse } from "../../utils/responseFormat";
const filteredPrimaryData = async (contactId) => {
  const filteredData = await BasicContactInfo.aggregate([
    {
      $match: {
        contact_id: mongoose.Types.ObjectId(contactId), // Ensure userId is of the correct type
      },
    },
    {
      $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) => {
  try {
    // { created_by: req.user._id }
    let allData = await Contact.find()
      .populate("created_by", ["_id", "first_name"])
      .exec();

    const result = allData.filter((item) => item.created_by !== null);

    let totalRecords = result.length;
    return successResponse(res, result);
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const add = async (req, res) => {
  try {
    req.body.created_by = req.user._id;
    const contactData = req.body;
    const contact = new Contact(contactData);
    await contact.save();

    const personalInfo = new PersonalInfo({ contact_id: contact._id });
    await personalInfo.save();

    const socialMedia = new SocialMedia({ contact_id: contact._id });
    await socialMedia.save();

    const accountInfo = new AccountInfo({ contact_id: contact._id });
    await accountInfo.save();

    const basicInfo = new BasicContactInfo({ contact_id: contact._id });
    await basicInfo.save();
    return res.status(200).json({
      message: "Contact created successfully",
      contact,
      personalInfo,
      socialMedia,
      accountInfo,
      basicInfo,
    });
    // return successResponse(res, contact, "Contact saved successfully.");
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const edit = async (req, res) => {
  try {
    let result = await Contact.findByIdAndUpdate(
      { _id: req.params.id },
      { $set: req.body },
      { new: true }
    );
    if (!result) {
      return failedResponse({ res, error: "No data found." });
    }
    return successResponse(res, result, "Contact updated successfully");
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const view = async (req, res) => {
  try {
    let Contacts = await Contact.aggregate([
      {
        $match: {
          _id: mongoose.Types.ObjectId(req.params.id),
        },
      },
    ]);

    let contact = await Contact.findByIdAndUpdate({ _id: req.params.id });
    if (!contact) {
      return failedResponse({ res, error: "No data found." });
    }
    return successResponse(res, Contacts);
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};
const profile = async (req, res) => {
  try {
    const _id = req.body.contact_id;
    let dummyData = {
      phone_numbers: [
        {
          phone_no: "",
          type: "",
          is_primary: false,
          _id: "",
        },
      ],
      emails: [
        {
          email_address: "",
          type: "",
          is_primary: false,
          _id: "",
        },
      ],
    };
    let userDoc = await Contact.findById(_id, {
      password: 0,
    });

    if (!userDoc) {
      return failedResponse({ res, error: "No data found." });
    }
    // return res.json(userDoc);
    const user = userDoc.toObject();
    const { __v, ...profile } = user;

    const basicContactInfo = await BasicContactInfo.findOne({
      contact_id: _id,
    });
    const filteredData = await filteredPrimaryData(_id);
    profile.filteredData =
      filteredData.length > 0 ? filteredData[0] : dummyData;
    const additionalContact = await AdditionalContact.find({ contact_id: _id });
    const address = await Address.find({ contact_id: _id });
    const personalInfo = await PersonalInfo.findOne({ contact_id: _id });
    const accountInformation = await AccountInformation.findOne({
      contact_id: _id,
    });
    const linkedAccount = await LinkedAccount.find({
      contact_id: _id,
    });
    const xDates = await XDates.find({
      contact_id: _id,
    });
    const employer = await Employer.find({
      contact_id: _id,
    });
    const socialMedia = await SocialMedia.findOne({ contact_id: _id });

    const newFormat = {
      profile,
      basicContactInfo,
      address,
      additionalContact,
      accountInformation,
      personalInfo,
      linkedAccount,
      xDates,
      employer,
      socialMedia,
    };
    return successResponse(res, newFormat);
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

const deleteData = async (req, res) => {
  try {
    const contactId = req.params.id;
    // Delete the contact itself
    const deletedcontact = await Contact.findByIdAndDelete({ _id: contactId });

    if (!deletedcontact) {
      return failedResponse({ res, error: "No data found." });
    }
    return successResponse(
      res,
      deletedcontact,
      "Contact and related data deleted successfully."
    );
  } catch (error) {
    return failedResponse({ res, error: error.message });
  }
};

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

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