const multer = require('multer'); const path = require('path'); const { v4: uuidv4 } = require('uuid'); // Configure storage for profile images const profileImageStorage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname, '../uploads/profiles')); }, filename: function (req, file, cb) { // Generate unique filename: uuid + original extension const uniqueId = uuidv4(); const ext = path.extname(file.originalname); cb(null, `${uniqueId}${ext}`); } }); // File filter to accept only images const imageFileFilter = (req, file, cb) => { // Accept images only const allowedMimes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp']; if (allowedMimes.includes(file.mimetype)) { cb(null, true); } else { cb(new Error('Invalid file type. Only JPEG, PNG, GIF and WebP images are allowed.'), false); } }; // Create multer upload middleware for profile images const uploadProfileImage = multer({ storage: profileImageStorage, fileFilter: imageFileFilter, limits: { fileSize: 5 * 1024 * 1024 // 5MB limit } }).single('profileImage'); // Configure storage for message images const messageImageStorage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname, '../uploads/messages')); }, filename: function (req, file, cb) { // Generate unique filename: uuid + original extension const uniqueId = uuidv4(); const ext = path.extname(file.originalname); cb(null, `${uniqueId}${ext}`); } }); // Create multer upload middleware for message images const uploadMessageImage = multer({ storage: messageImageStorage, fileFilter: imageFileFilter, limits: { fileSize: 5 * 1024 * 1024 // 5MB limit } }).single('image'); // Configure storage for forum images const forumImageStorage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname, '../uploads/forum')); }, filename: function (req, file, cb) { const uniqueId = uuidv4(); const ext = path.extname(file.originalname); cb(null, `${uniqueId}${ext}`); } }); // Factory function to create forum image upload middleware const createForumImageUpload = (maxFiles) => { return multer({ storage: forumImageStorage, fileFilter: imageFileFilter, limits: { fileSize: 5 * 1024 * 1024 // 5MB limit per file } }).array('images', maxFiles); }; // Create multer upload middleware for forum post images (up to 5 images) const uploadForumPostImages = createForumImageUpload(5); // Create multer upload middleware for forum comment images (up to 3 images) const uploadForumCommentImages = createForumImageUpload(3); module.exports = { uploadProfileImage, uploadMessageImage, uploadForumPostImages, uploadForumCommentImages };