export const updateProduct = async (req, res, next) => {
const { color, size, discount } = req.body;
let product = await Product.findById(req.params.id);
if (!product) {
return next(new ErrorHander('Product not found', 404));
}
// Images Start Here
let images = [];
if (typeof req.body.images === 'string') {
images.push(req.body.images);
} else {
images = req.body.images;
}
if (images !== undefined) {
// Deleting Images From Cloudinary
for (let i = 0; i < product.images.length; i++) {
await cloudinary.v2.uploader.destroy(product.images[i].public_id);
}
const imagesLinks = [];
for (let i = 0; i < images.length; i++) {
const result = await cloudinary.v2.uploader.upload(images[i], {
folder: 'products',
});
imagesLinks.push({
public_id: result.public_id,
url: result.secure_url,
});
}
req.body.images = imagesLinks;
}
if (!req.body.discount) {
req.body.discount = 0;
}
// Discount calculate price on update product
product.discount = discount || 0;
const discountedPrice = product.calculateDiscountedPrice();
req.body.discountedPrice = discountedPrice;
product = await Product.findByIdAndUpdate(
req.params.id,
Object.assign(req.body, {
color: JSON.parse(color),
size: JSON.parse(size),
}),
{
new: true,
runValidators: true,
useFindAndModify: false,
}
);
res.status(200).json({
success: true,
product,
});
};