Untitled
unknown
plain_text
a year ago
5.9 kB
9
Indexable
exports.AddToWishlist = catchAsync(async (req, res, next) => {
// Extract necessary information from the request body
const { userID, productID } = req.body;
// Find the user by ID and check if the client profile and wishlist exist
const user = await User.findById(userID);
if (!user) {
return next(new AppError('User not found', 404));
}
// Check if the product exists and is available for wishlisting
const product = await Product.findById(productID);
if (!product) {
return next(new AppError(`Product with ID ${productID} not found`, 404));
}
if(user.role == "client"){
const client = await Client.findById(user.profile);
if (!client) {
return next(new AppError('Client not found', 404));
}
// Check if the product already exists in the client's wishlist
const productExistsInWishlist = await Client.findOne({ _id: user.profile, wishlist: { $in: [productID] } });
if (productExistsInWishlist) {
return res.status(400).json({ message: 'Product already exists in the wishlist' });
}
// Add the product to the wishlist
client.wishlist.push(product);
await client.save();
// Return success response
res.status(200).json({
message: 'Product added to wishlist successfully',
wishlist: client.wishlist
});
}else{
const retailer = await Retailer.findById(user.profile);
if (!retailer) {
return next(new AppError('retailer not found', 404));
}
// Check if the product already exists in the client's wishlist
const productExistsInWishlist = await Retailer.findOne({ _id: user.profile, wishlist: { $in: [productID] } });
if (productExistsInWishlist) {
return res.status(400).json({ message: 'Product already exists in the wishlist' });
}
// Add the product to the wishlist
retailer.wishlist.push(product);
await retailer.save();
res.status(200).json({
message: 'Product added to wishlist successfully',
wishlist: retailer.wishlist
});
}
});
exports.RemoveFromWishlist = catchAsync(async (req, res, next) => {
// Extract necessary information from the request body
const { userID, productID } = req.body;
// Find the user by ID and check if the client profile and wishlist exist
const user = await User.findById(userID);
if (!user) {
return next(new AppError('User not found', 404));
}
if(user.role == "client"){
const client = await Client.findById(user.profile);
if (!client) {
return next(new AppError('Client not found', 404));
}
// Check if the product exists in the client's wishlist
if (!client.wishlist.includes(productID)) {
return res.status(400).json({ message: 'Product does not exist in the wishlist' });
}
// Remove the product from the client's wishlist using $pull
await Client.findByIdAndUpdate(client._id, { $pull: { wishlist: productID } });
// Return success response
res.status(200).json({
message: 'Product removed from wishlist successfully'
});
}else{
const retailer = await Retailer.findById(user.profile);
if (!retailer) {
return next(new AppError('retailer not found', 404));
}
if (!retailer.wishlist.includes(productID)) {
return res.status(400).json({ message: 'Product does not exist in the wishlist' });
}
// Remove the product from the client's wishlist using $pull
await Retailer.findByIdAndUpdate(retailer._id, { $pull: { wishlist: productID } });
// Return success response
res.status(200).json({
message: 'Product removed from wishlist successfully'
});
}
});
exports.getWishList = catchAsync(async (req, res, next) => {
const { userId } = req.body;
const user = await User.findById(toObjectId(userId,next));
if (!user) {
return next(new AppError('User not found', 404));
}
if(user.role == "client"){
const client = await User.aggregate([
{
$match: { _id: toObjectId(userId) }
},
{
$lookup: {
from: 'clients',
localField: 'profile',
foreignField: '_id',
as: 'client',
pipeline: [
{
$lookup: {
from: 'products',
localField: 'wishlist',
foreignField: '_id',
pipeline: [{
$lookup: {
from: 'offers',
localField: 'offer',
foreignField: '_id',
pipeline: [{$project:{discount:1,status:1}}],
as: 'offer'
}
}],
as: 'wishlist'
}
}
]
}
}
]);
if(!client.length){
return next(new AppError('user not find', 400));
}
res.status(200).json({
message: 'wishlist',
wishlist: client[0]?.client[0]?.wishlist
});
}else{
const retailer = await User.aggregate([
{
$match: { _id: toObjectId(userId) }
},
{
$lookup: {
from: 'retailers',
localField: 'profile',
foreignField: '_id',
as: 'retailer',
pipeline: [
{
$lookup: {
from: 'products',
localField: 'wishlist',
foreignField: '_id',
pipeline: [{
$lookup: {
from: 'offers',
localField: 'offer',
foreignField: '_id',
pipeline: [{$project:{discount:1,status:1}}],
as: 'offer'
}
}],
as: 'wishlist'
}
}
]
}
}
]);
if(!retailer.length){
return next(new AppError('user not find', 400));
}
res.status(200).json({
message: 'wishlist',
wishlist: retailer[0]?.retailer[0]?.wishlist
});
}
});Editor is loading...
Leave a Comment