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