Your IP : 216.73.216.220


Current Path : /home/deltalab/PMS/partner-manager-backend/rest/routes/
Upload File :
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;