New backend copy package support
[osm/UI.git] / skyquake / plugins / composer / routes.js
index af67bfa..b3641aa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   limitations under the License.
  *
  */
-var router = require('express').Router();
+var express = require('express');
+var router = express.Router();
 var cors = require('cors');
 var utils = require('../../framework/core/api_utils/utils.js')
-var Composer = require('./api/composer.js');
+var constants = require('../../framework/core/api_utils/constants.js');
+var C = require('./api/composer.js');
+var Composer = C.Composer;
+var FileManager = C.FileManager;
+var PackageManager = C.PackageManager;
+var multer = require('multer');
+var fs = require('fs');
+var path = require('path');
+var mkdirp = require('mkdirp');
+
+var storage = multer.diskStorage({
+    // destination: 'upload/packages/',
+    destination: function(req, file, cb) {
+        var dir = constants.BASE_PACKAGE_UPLOAD_DESTINATION;
+        if (req.query['package_id']) {
+            dir += req.query['package_id'] + '/';
+        }
+        if (!fs.existsSync(dir)){
+            mkdirp(dir, function(err) {
+                if (err) {
+                    console.log('Error creating folder for uploads. All systems FAIL!');
+                    throw err;
+                }
+                cb(null, dir);
+            });
+        } else {
+            cb(null, dir);
+        }
+    },
+    filename: function (req, file, cb) {
+        if (req.query['package_id']) {
+            cb(null, file.originalname);
+        } else  {
+            cb(null, Date.now() + '_' + file.fieldname + '_' + file.originalname);
+        }
+    },
+    // limits: {
+    //     fieldNameSize: 100,
+    //     fieldSize: 10000,
+    //     fields: Infinity,
+    //     fileSize: 10000,
+    //     files: Infinity
+    //     parts: Infinity
+    //     headerPairs: 2000
+    // }
+});
+
+
+var upload = multer({
+    storage: storage
+});
+
+
 router.get('/api/catalog', cors(), function(req, res) {
     Composer.get(req).then(function(data) {
         utils.sendSuccessResponse(data, res);
@@ -44,7 +97,7 @@ router.post('/api/catalog/:catalogType', cors(), function(req, res) {
     });
 });
 router.put('/api/catalog/:catalogType/:id', cors(), function(req, res) {
-    Composer.update(req).then(function(data) {
+    Composer.updateSave(req).then(function(data) {
         res.send(data);
     }, function(error) {
         res.status(error.statusCode);
@@ -52,4 +105,76 @@ router.put('/api/catalog/:catalogType/:id', cors(), function(req, res) {
     });
 });
 
+router.post('/api/file-manager', cors(), upload.single('package'), function (req, res, next) {
+    FileManager.addFile(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+
+router.get('/api/file-manager', cors(), function(req, res) {
+    FileManager.get(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+})
+router.get('/api/file-manager/jobs/:id', cors(), function(req, res) {
+    FileManager.job(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+router.delete('/api/file-manager', cors(), function(req, res) {
+    FileManager.get(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+
+// Catalog operations via package manager
+
+router.post('/upload', cors(), upload.single('package'), function (req, res, next) {
+    PackageManager.upload(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+router.use('/upload', cors(), express.static('upload/packages'));
+
+router.post('/update', cors(), upload.single('package'), function (req, res, next) {
+    PackageManager.update(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+router.use('/update', cors(), express.static('upload/packages'));
+
+router.post('/api/package-export', cors(), function (req, res, next) {
+    PackageManager.export(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+router.post('/api/package-copy', cors(), function (req, res, next) {
+    PackageManager.copy(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+router.get('/api/package-manager/jobs/:id', cors(), function (req, res, next) {
+    PackageManager.getJobStatus(req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+
 module.exports = router;