const sharp = require("sharp"); const s3Storage = require("./s3Storage"); const NEWS_IMAGE_PREFIX = "uploads/images/news"; const NEWS_ATTACHMENT_PREFIX = "uploads/files/newsAttachments"; const getStoredImageName = (doc, field) => doc.get(field, null, { getters: false }); const deleteNewsImage = async (doc, field) => { const fileName = getStoredImageName(doc, field); if (!fileName) return; try { await s3Storage.deleteObject(`${NEWS_IMAGE_PREFIX}/${fileName}`); } catch (error) { console.log(`Failed to delete ${field} from S3:`, error?.message); } }; const uploadProcessedImage = async ( imageData, imageName, width, height, quality ) => { const buffer = await sharp(imageData) .resize(width, height, { fit: "cover" }) .jpeg({ quality }) .toBuffer(); await s3Storage.uploadBuffer( `${NEWS_IMAGE_PREFIX}/${imageName}`, buffer, "image/jpeg" ); return imageName; }; const uploadNewsAttachment = async ( fileData, fileName, contentType = "application/pdf" ) => { await s3Storage.uploadBuffer( `${NEWS_ATTACHMENT_PREFIX}/${fileName}`, fileData, contentType ); return fileName; }; const deleteNewsAttachment = async (fileName) => { if (!fileName) return; try { await s3Storage.deleteObject(`${NEWS_ATTACHMENT_PREFIX}/${fileName}`); } catch (error) { console.log(`Failed to delete attachment from S3:`, error?.message); } }; module.exports = { NEWS_IMAGE_PREFIX, NEWS_ATTACHMENT_PREFIX, getStoredImageName, deleteNewsImage, uploadProcessedImage, uploadNewsAttachment, deleteNewsAttachment, };