59 lines
1.3 KiB
JavaScript
59 lines
1.3 KiB
JavaScript
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,
|
|
};
|