Untitled

mail@pastecode.io avatar
unknown
plain_text
19 days ago
5.9 kB
1
Indexable
Never
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 
  });
 }
});
Leave a Comment