diff --git a/server/data/data.js b/server/data/data.js index efd662c13..e89d041b9 100644 --- a/server/data/data.js +++ b/server/data/data.js @@ -4,4 +4,5 @@ exports.chatter = require("./chatter").default; exports.claimscorp = require("./claimscorp").default; exports.kaizen = require("./kaizen").default; exports.usageReport = require("./usageReport").default; -exports.podium = require("./podium").default; \ No newline at end of file +exports.podium = require("./podium").default; +exports.emsUpload = require("./emsUpload").default; \ No newline at end of file diff --git a/server/data/emsUpload.js b/server/data/emsUpload.js new file mode 100644 index 000000000..417454ae4 --- /dev/null +++ b/server/data/emsUpload.js @@ -0,0 +1,22 @@ +const moment = require("moment-timezone"); +const logger = require("../utils/logger"); +const s3Client = require("../utils/s3"); // Using the S3 client utilities with LocalStack support + +const emsUpload = async (req, res) => { + try { + const { bodyshopid, ciecaid, clm_no, ownr_ln } = req.body; + const presignedUrl = await s3Client.getPresignedUrl({ + bucketName: process.env.S3_EMS_UPLOAD_BUCKET, + key: `${bodyshopid}/${ciecaid}-${clm_no}-${ownr_ln}-${moment().format("YYYY-MM-DD--HH-mm-ss")}.zip` + }); + res.status(200).json({ presignedUrl }); + } catch (error) { + logger.log("usage-report-email-error", "ERROR", req?.user?.email, null, { + error: error.message, + stack: error.stack + }); + res.status(500).json({ error: error.message, stack: error.stack }); + } +}; + +exports.default = emsUpload; \ No newline at end of file diff --git a/server/routes/miscellaneousRoutes.js b/server/routes/miscellaneousRoutes.js index 40666302f..b0360d488 100644 --- a/server/routes/miscellaneousRoutes.js +++ b/server/routes/miscellaneousRoutes.js @@ -138,6 +138,9 @@ router.post("/canvastest", validateFirebaseIdTokenMiddleware, canvastest); // Alert Check router.post("/alertcheck", eventAuthorizationMiddleware, alertCheck); +//EMS Upload +router.post("/emsupload", validateFirebaseIdTokenMiddleware, data.emsUpload); + // Redis Cache Routes router.post("/bodyshop-cache", eventAuthorizationMiddleware, updateBodyshopCache); diff --git a/server/utils/s3.js b/server/utils/s3.js index 8b9251e03..2ba1f0d47 100644 --- a/server/utils/s3.js +++ b/server/utils/s3.js @@ -9,6 +9,7 @@ const { const { defaultProvider } = require("@aws-sdk/credential-provider-node"); const { InstanceRegion } = require("./instanceMgr"); const { isString, isEmpty } = require("lodash"); +const { getSignedUrl } = require("@aws-sdk/s3-request-presigner"); const createS3Client = () => { const S3Options = { @@ -95,6 +96,17 @@ const createS3Client = () => { throw error; } }; + + const getPresignedUrl = async ({ bucketName, key }) => { + const command = new PutObjectCommand({ + Bucket: bucketName, + Key: key, + StorageClass: "INTELLIGENT_TIERING" + }); + const presignedUrl = await getSignedUrl(s3Client, command, { expiresIn: 360 }); + return presignedUrl; + } + return { uploadFileToS3, downloadFileFromS3, @@ -102,8 +114,12 @@ const createS3Client = () => { deleteFileFromS3, copyFileInS3, fileExistsInS3, + getPresignedUrl, ...s3Client }; }; + + + module.exports = createS3Client();