OpenVeo Core server

API Docs for: 7.0.0
Show:

File: app/server/loaders/entityLoader.js

'use strict';

/**
 * @module core-loaders
 */

/**
 * Provides functions to interpret entities definition from plugin's configuration.
 *
 * @class entityLoader
 * @static
 */

/**
 * Builds entities for plugins.
 *
 * @example
 *     // Results
 *     {
 *       core: {
 *         mountPath: '/',
 *         path: '/home/openveo/',
 *         entities: {
 *           applications: 'app/server/controllers/ApplicationController'
 *         }
 *       },
 *       publish: {
 *         mountPath: '/publish',
 *         path: '/home/openveo/node_modules/@openveo/publish',
 *         entities: {
 *           videos: 'app/server/controllers/VideoController'
 *         }
 *       }
 *     }
 *
 * @method buildEntities
 * @static
 * @param {Array} plugins The list of plugins
 * @return {Object} The list of entities, for plugins, ordered by plugin name
 * @throws {TypeError} A TypeError if plugins is not an array
 */
module.exports.buildEntities = function(plugins) {
  var entities = {};

  plugins.forEach(function(loadedPlugin) {

    // Found a list of entities for the plugin
    if (loadedPlugin.entities) {
      entities[loadedPlugin.name] = {
        path: loadedPlugin.path,
        mountPath: loadedPlugin.mountPath,
        entities: loadedPlugin.entities
      };
    }

  });

  return entities;
};

/**
 * Builds CRUD routes for entities.
 *
 * @example
 *     // List of entities as described in configuration file
 *     {
 *       'applications': '/home/openveo/app/server/controllers/ApplicationController'
 *     }
 *
 * @example
 *     // Results
 *     {
 *       'get /applications/:id': '/home/openveo/app/server/controllers/ApplicationController.getEntityAction',
 *       'get /applications': '/home/openveo/app/server/controllers/ApplicationController.getEntitiesAction',
 *       'post /applications/:id': '/home/openveo/app/server/controllers/ApplicationController.updateEntityAction',
 *       'put /applications': '/home/openveo/app/server/controllers/ApplicationController.addEntitiesAction',
 *       'delete /applications/:id': '/home/openveo/app/server/controllers/ApplicationController.removeEntitiesAction'
 *     }
 *
 * @method buildEntitiesRoutes
 * @static
 * @param {Object} entities The list of entities
 * @return {Object} The list of routes for all entities
 */
module.exports.buildEntitiesRoutes = function(entities) {
  var entitiesRoutes = {};

  // Create CRUD routes for all plugin's entities
  for (var entityName in entities) {
    var entityControllerPath = entities[entityName];
    entitiesRoutes['get /' + entityName + '/:id'] = entityControllerPath + '.getEntityAction';
    entitiesRoutes['get /' + entityName] = entityControllerPath + '.getEntitiesAction';
    entitiesRoutes['post /' + entityName + '/:id'] = entityControllerPath + '.updateEntityAction';
    entitiesRoutes['put /' + entityName] = entityControllerPath + '.addEntitiesAction';
    entitiesRoutes['delete /' + entityName + '/:id'] = entityControllerPath + '.removeEntitiesAction';
  }

  return entitiesRoutes;
};