| Current Path : /home/deltalab/PMS/partner-manager-backend/rest/routes/ |
| Current File : //home/deltalab/PMS/partner-manager-backend/rest/routes/media.js |
/* eslint-disable consistent-return */
const fileType = require('file-type');
const express = require('express');
const formidable = require('formidable');
const fs = require('fs');
const { v4: uuidv4 } = require('uuid');
const { productQuery } = require('../queries');
const ims = require('../../services/ims');
const router = express.Router({ mergeParams: true });
router.post('/:referenceId', async (req, res) => {
try {
console.log('caricamento immagine...');
// read file
const form = new formidable.IncomingForm();
form
.parse(req, async (err, fields, files) => {
const field = fields.data;
const file = files.image;
const parsedField = JSON.parse(field);
// convert file to base64
const supportedFileMime = ['image/gif', 'image/jpeg', 'image/png'];
const supportedFileExt = ['gif', 'jpeg', 'jpg', 'png'];
const mediaType = await fileType.fromFile(file.filepath);
if (mediaType && supportedFileMime.includes(mediaType.mime) && supportedFileExt.includes(mediaType.ext.toLowerCase())) {
console.log(`file di partenza: ${file.filepath}`);
// change file name
const fileName = `${uuidv4()}.${mediaType.ext.toLowerCase()}`;
console.log(`file di arrivo:${process.env.IMAGE_UPLOAD_FOLDER + fileName}`);
fs.copyFile(file.filepath, process.env.IMAGE_UPLOAD_FOLDER + fileName, (error) => {
if (error) {
console.log('Error Found:', error);
}
});
// // send media to ims and wait for response
// const product = await productQuery.readOne(req.params.referenceId);
console.log('chiamo ims...');
// save media linked to the product in the db
parsedField.filePath = process.env.IMAGE_UPLOAD_FOLDER + fileName;
parsedField.showPath = process.env.SHOW_PATH_FOLDER + fileName;
parsedField.name = fileName;
console.log('aggiorno il db');
const updatedReference = await productQuery.addMedia(req.params.referenceId, parsedField);
console.log('fatto, aggiorno IMS');
await ims.referenceUpdate(updatedReference, updatedReference.sku);
// delete file from filesystem
if (fs.existsSync(file.filepath)) {
fs.unlinkSync(file.filepath);
}
console.log('chiamata eseguita');
return res.status(200).json({ success: true, data: parsedField });
}
// delete file from filesystem
if (fs.existsSync(file.filepath)) {
fs.unlinkSync(file.filepath);
}
})
.on('error', (err) => {
if (!res.headersSent) {
return res.status(400).send({ success: false, message: 'Error uploading the image.', error: err.message });
}
});
} catch (error) {
console.log(error);
return res.status(400).send({ success: false, message: 'Error uploading the image', error: error.message });
}
});
router.delete('/:mediaId/products/:productId', async (req, res) => {
try {
// delete media from ims
const product = await productQuery.readOne(req.params.productId);
await ims.deleteMediafromProduct(product.sku, req.params.mediaId);
// delete media media linked to the product in the db
await productQuery.removeMedia(req.params.productId, req.params.mediaId);
return res.status(200).json({ success: true });
} catch (error) {
console.log(error);
return res.status(400).send({ success: false, message: 'Error deleting the image', error: error.message });
}
});
module.exports = router;