Don Palito Jr features a complete product catalog system that allows administrators to create, manage, and organize products. Each product includes detailed information, multiple images hosted on Cloudinary, and real-time inventory tracking.
Administrators can create new products with comprehensive details and images. The system validates all required fields and handles image uploads to Cloudinary:
export async function createProduct (req, res) { const {name, description, price, stock, category} = req.body; if (!name || !description || !price || !stock || !category) { return res.status(400).json({message: "All fields are required"}); } if (!req.files || req.files.length === 0) { return res.status(400).json({ message: "At least one image is required" }); } if (req.files.length > 3) { return res.status(400).json({ message: "Maximum three images allowed" }); } const uploadPromises = req.files.map((file) => { return cloudinary.uploader.upload(file.path, { folder: "products", }); }); const uploadResults = await Promise.all(uploadPromises); const imageUrls = uploadResults.map((result) => result.secure_url); const product = await Product.create({ name, description, price: parseFloat(price), stock: parseInt(stock), category, images: imageUrls }); return res.status(201).json({message: "Product created successfully", product});}
Images are uploaded in parallel using Promise.all() for better performance when adding multiple product photos.
The system automatically decrements stock when orders are placed, ensuring accurate inventory levels:
Stock validation occurs before order creation to prevent overselling. If insufficient stock is available, the order is rejected with a clear error message.