Untitled

 avatar
unknown
plain_text
5 months ago
1.6 kB
2
Indexable
exports.deletevariants = catchAsync(async (req, res, next) => {
  const {variants_ids} = req.body;
  const session = await mongoose.startSession();
  try {
    session.startTransaction();
    console.log(variants_ids)
    for(const productId of variants_ids){
      if (!isValidObjectId(productId)) {
        return next(new AppError('Invalid product variant ID', 400));
      }
     const data = await ProductVariant.aggregate([
      {$match : {_id: toObjectId(productId,next)}},
      {
        $lookup:{
          from: 'products',
          localField: '_id',
          foreignField: 'variants',
          as: 'product'
        }
      } 
     ])
     
     if(data.length <1){
      return next(new AppError('product variant not found', 400));
     }
     if(!data[0]?.product[0]?._id){
      return next(new AppError('product not found', 400));
     }
     await Product.updateOne({_id:data[0]?.product[0]?._id},
           { $pull: { variants: toObjectId(productId,next) } },{session})
      const productToDelete = await ProductVariant.findById(productId);
      if (!productToDelete) {
        return res.status(400).json({ message: 'Product variant not found' });
      }
      await ProductVariant.deleteOne({_id:toObjectId(productId)},{session})
    }
    await session.commitTransaction();
    session.endSession();
    res.status(200).json({ message: 'Product variant deleted successfully' });

    } catch (error) {
      await session.abortTransaction();
      session.endSession();
      return next(error);
    } 
});
Editor is loading...
Leave a Comment