frontend-app / server /controllers /ContacsControllers.js
Keys
fixes
2ecbb66
import mongoose from "mongoose";
import User from "../model/UserModel.js";
import Message from "../model/MessagesModel.js";
export const getAllContacts = async (request, response, next) => {
try {
const users = await User.find(
{ _id: { $ne: request.userId } },
"firstName lastName _id"
);
const contacts = users.map((user) => ({
label: `${user.firstName} ${user.lastName}`,
value: user._id,
}));
return response.status(200).json({ contacts });
} catch (error) {
console.log({ error });
return response.status(500).send("Internal Server Error.");
}
};
export const searchContacts = async (request, response, next) => {
try {
const { searchTerm } = request.body;
if (searchTerm === undefined || searchTerm === null) {
return response.status(400).send("Search Term is required.");
}
const sanitizedSearchTerm = searchTerm.replace(
/[.*+?^${}()|[\]\\]/g,
"\\$&"
);
const regex = new RegExp(sanitizedSearchTerm, "i");
const contacts = await User.find({
$and: [
{ _id: { $ne: request.userId } },
{
$or: [{ firstName: regex }, { lastName: regex }, { email: regex }],
},
],
});
return response.status(200).json({ contacts });
} catch (error) {
console.log({ error });
return response.status(500).send("Internal Server Error.");
}
};
export const getContactsForList = async (req, res, next) => {
try {
let { userId } = req;
userId = new mongoose.Types.ObjectId(userId);
if (!userId) {
return res.status(400).send("User ID is required.");
}
const contacts = await Message.aggregate([
{
$match: {
$or: [{ sender: userId }, { recipient: userId }],
},
},
{
$sort: { timestamp: -1 },
},
{
$group: {
_id: {
$cond: {
if: { $eq: ["$sender", userId] },
then: "$recipient",
else: "$sender",
},
},
lastMessageTime: { $first: "$timestamp" },
},
},
{
$lookup: {
from: "users",
localField: "_id",
foreignField: "_id",
as: "contactInfo",
},
},
{
$unwind: "$contactInfo",
},
{
$project: {
_id: 1,
lastMessageTime: 1,
email: "$contactInfo.email",
firstName: "$contactInfo.firstName",
lastName: "$contactInfo.lastName",
image: "$contactInfo.image",
color: "$contactInfo.color",
},
},
{
$sort: { lastMessageTime: -1 },
},
]);
return res.status(200).json({ contacts });
} catch (error) {
console.error("Error getting user contacts:", error);
return res.status(500).send("Internal Server Error");
}
};