const cloudinary = require("cloudinary").v2; // Configure Cloudinary with environment variables cloudinary.config({ cloud_name: process.env.CLOUDINARY_CLOUD_NAME, api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_API_SECRET, }); /** * Upload image buffer to Cloudinary * @param {Buffer} fileBuffer - Image file buffer from multer * @param {string} folder - Cloudinary folder path * @returns {Promise} Cloudinary upload result with url and public_id */ const uploadImage = (fileBuffer, folder = "adopt-a-street") => { return new Promise((resolve, reject) => { cloudinary.uploader .upload_stream( { folder: folder, resource_type: "image", transformation: [ { width: 1000, height: 1000, crop: "limit" }, // Limit max dimensions { quality: "auto" }, // Auto quality optimization { fetch_format: "auto" }, // Auto format selection (WebP, etc.) ], }, (error, result) => { if (error) { reject(error); } else { resolve({ url: result.secure_url, publicId: result.public_id, }); } }, ) .end(fileBuffer); }); }; /** * Delete image from Cloudinary * @param {string} publicId - Cloudinary public_id of the image * @returns {Promise} Cloudinary deletion result */ const deleteImage = async (publicId) => { try { const result = await cloudinary.uploader.destroy(publicId); return result; } catch (error) { console.error("Error deleting image from Cloudinary:", error); throw error; } }; module.exports = { uploadImage, deleteImage, cloudinary, };