const sharp = require("sharp"); const s3Storage = require("./s3Storage"); const CONTENT_IMAGE_PREFIX = "uploads/images/content"; const getStoredImageName = (doc, field) => doc.get(field, null, { getters: false }); const deleteContentImage = async (doc, field) => { const fileName = getStoredImageName(doc, field); if (!fileName) return; try { await s3Storage.deleteObject(`${CONTENT_IMAGE_PREFIX}/${fileName}`); } catch (error) { console.log(`Failed to delete ${field} from S3:`, error?.message); } }; const deleteContentImages = async (doc) => { await deleteContentImage(doc, "cover"); await deleteContentImage(doc, "thumb"); }; const uploadProcessedImage = async ( imageData, imageName, width, height, quality ) => { const buffer = await sharp(imageData) .resize(width, height, { fit: "cover" }) .jpeg({ quality }) .toBuffer(); await s3Storage.uploadBuffer( `${CONTENT_IMAGE_PREFIX}/${imageName}`, buffer, "image/jpeg" ); return imageName; }; module.exports = { CONTENT_IMAGE_PREFIX, getStoredImageName, deleteContentImage, deleteContentImages, uploadProcessedImage, };