Sindbad~EG File Manager
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