all files / src/network/helpers/ projects.js

17.02% Statements 8/47
25% Branches 3/12
6.25% Functions 1/16
15.22% Lines 7/46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96                                                                                                                                                                                 
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.saveProject = saveProject;
 
var _ = require('../');
 
var _2 = _interopRequireDefault(_);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
function createItemForProject(project, name, file) {
  return _2.default.createItem(project.metadata.inputFolder._id, name).then(function (resp) {
    // fill item with file
    var itemId = resp.data._id;
    var params = {};
    params.parentType = 'item';
    params.parentId = itemId;
    params.name = file.name;
    params.size = file.size;
    console.log('Attach file to', itemId);
    return _2.default.uploadFileToItem(params, file);
  }).then(function (resp) {
    project.metadata.inputFolder.files[name] = resp.data._id;
    return _2.default.updateProject(project);
  }).catch(function (error) {
    var msg = error.data && error.data.message ? error.data.message : error.message;
    console.error('upload failed:', msg);
  });
}
 
function saveProject(project_, attachments) {
  var project = project_;
  if (!project._id) {
    var folder = void 0;
    var outputFolder = void 0;
    return _2.default.createProject(project)
    // make output folder
    .then(function (resp) {
      project = resp.data;
      folder = {
        name: 'output',
        parentType: 'folder',
        parentId: project.folderId
      };
      return _2.default.createFolder(folder);
    })
    // make input folder
    .then(function (resp) {
      outputFolder = resp.data._id;
      folder.name = 'input';
      return _2.default.createFolder(folder);
    })
    // update proj metadata
    .then(function (resp) {
      var inputFolder = resp.data._id;
      project.metadata = Object.assign({}, project.metadata, {
        inputFolder: {
          _id: inputFolder,
          files: {}
        },
        outputFolder: {
          _id: outputFolder,
          files: {}
        }
      });
      return _2.default.updateProject(project);
    })
    // upload files to inputfolder if there are any,
    // returns either promise result array with sim object as last item or simulation object.
    .then(function (resp) {
      if (attachments) {
        var promises = [];
        Object.keys(attachments).forEach(function (file) {
          promises.push(createItemForProject(project, file, attachments[file]));
        });
        return new Promise(function (a, r) {
          Promise.all(promises).then(function () {
            a({ data: project });
          });
        });
      }
      return new Promise(function (a, r) {
        a({ data: project });
      });
    }).catch(function (error) {
      return new Promise(function (a, r) {
        r(error);
      });
    });
  }
  return _2.default.updateProject(project);
}