const sharp = require("sharp"); const s3Storage = require("./s3Storage"); const CATEGORY_IMAGE_PREFIX = "uploads/images/category"; const CATEGORY_SHAFAFIAT_PREFIX = "uploads/images/category/shafafiat"; const TERMS_FILE_PREFIX = "uploads/files/terms"; const getStoredImageName = (doc, field) => doc.get(field, null, { getters: false }); const deleteCategoryImage = async (doc, field) => { const fileName = getStoredImageName(doc, field); if (!fileName) return; try { await s3Storage.deleteObject(`${CATEGORY_IMAGE_PREFIX}/${fileName}`); } catch (error) { console.log(`Failed to delete ${field} from S3:`, error?.message); } }; const deleteShafafiatIcon = async (fileName) => { if (!fileName) return; try { await s3Storage.deleteObject(`${CATEGORY_SHAFAFIAT_PREFIX}/${fileName}`); } catch (error) { console.log("Failed to delete shafafiat icon 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( `${CATEGORY_IMAGE_PREFIX}/${imageName}`, buffer, "image/jpeg" ); return imageName; }; const uploadShafafiatIcon = async (fileData, fileName, contentType) => { await s3Storage.uploadBuffer( `${CATEGORY_SHAFAFIAT_PREFIX}/${fileName}`, fileData, contentType ); return fileName; }; const uploadTermsFile = async (fileData, fileName) => { await s3Storage.uploadBuffer( `${TERMS_FILE_PREFIX}/${fileName}`, fileData, "application/pdf" ); return fileName; }; const deleteTermsFile = async (fileName) => { if (!fileName) return; try { await s3Storage.deleteObject(`${TERMS_FILE_PREFIX}/${fileName}`); } catch (error) { console.log("Failed to delete terms file from S3:", error?.message); } }; module.exports = { CATEGORY_IMAGE_PREFIX, CATEGORY_SHAFAFIAT_PREFIX, TERMS_FILE_PREFIX, getStoredImageName, deleteCategoryImage, deleteShafafiatIcon, uploadProcessedImage, uploadShafafiatIcon, uploadTermsFile, deleteTermsFile, };