UNPKG

@qelos/assets

Version:

manage assets like images and static files on remote servers

103 lines (89 loc) 2.86 kB
const ftpService = require('../services/ftp'); const gcsService = require('../services/gcs'); const s3Service = require('../services/s3'); const cloudinaryService = require('../services/cloudinary'); const {emitPlatformEvent} = require("@qelos/api-kit"); const getService = ({ kind }) => ({ gcs: gcsService, ftp: ftpService, s3: s3Service, cloudinary: cloudinaryService })[kind]; function getStorageAssets(req, res) { const identifier = req.query.identifier; const service = getService(req.storage); if (!service) { return res.end(); } service.loadFiles(req.storage, identifier) .then(list => res.json(list).end()) .catch(() => { res.status(500).json({ message: 'could not get assets' }).end(); }); } function uploadStorageAssets(req, res) { const file = req.files[0].buffer; const type = req.files[0].mimetype; const { identifier, extension, prefix } = req.query || {}; const service = getService(req.storage); if (!service) { return res.end(); } service.uploadFile(req.storage, { identifier, file, extension, prefix, type }) .then((result) => { res.status(200).json(result).end(); emitPlatformEvent({ tenant: req.headers.tenant, user: req.headers.user._id, source: 'assets', kind: 'asset-operation', eventName: 'asset-uploaded', description: `asset updated: ${identifier}`, metadata: { identifier, extension, prefix, type, storage: { _id: req.storage._id, kind: req.storage.kind, name: req.storage.name } } }).catch() }) .catch((error) => { res.status(500).json({ message: error.message || 'could not upload asset' }).end(); }); } function removeStorageAsset(req, res) { const identifier = req.query.identifier; const service = getService(req.storage); if (!service) { return res.end(); } service.removeFile(req.storage, identifier, req.body.file) .then(() => res.end()) .catch(() => res.status(500).json({ message: 'could not remove asset' }).end()); } function renameStorageAssets(req, res) { const identifier = req.query.identifier; const newFilename = req.body.newFilename; const service = getService(req.storage); if (!service) { return res.end(); } service.renameFile(req.storage, identifier, newFilename) .then(() => res.end()) .catch(() => res.status(500).json({ message: 'could not rename asset' }).end()); } function verifyIdentifier(req, res, next) { if (!req.query.identifier) { return res .status(500) .json({ message: 'Must supply asset identifier' }) .end(); } next(); } module.exports = { getService, getStorageAssets, removeStorageAsset, verifyIdentifier, uploadStorageAssets, renameStorageAssets };