OpenVeo Publish server

API Docs for: 8.0.0
Show:

File: app/server/controllers/PropertyController.js

  1. 'use strict';
  2.  
  3. /**
  4. * @module controllers
  5. */
  6.  
  7. var util = require('util');
  8. var openVeoApi = require('@openveo/api');
  9. var PropertyProvider = process.requirePublish('app/server/providers/PropertyProvider.js');
  10. var HTTP_ERRORS = process.requirePublish('app/server/controllers/httpErrors.js');
  11. var EntityController = openVeoApi.controllers.EntityController;
  12. var ResourceFilter = openVeoApi.storages.ResourceFilter;
  13.  
  14. /**
  15. * Defines a controller to handle actions relative to properties' routes.
  16. *
  17. * @class PropertyController
  18. * @extends EntityController
  19. * @constructor
  20. */
  21. function PropertyController() {
  22. PropertyController.super_.call(this);
  23. }
  24.  
  25. module.exports = PropertyController;
  26. util.inherits(PropertyController, EntityController);
  27.  
  28. /**
  29. * Gets the list of custom property types.
  30. *
  31. * @method getPropertyTypesAction
  32. * @async
  33. * @param {Request} request ExpressJS HTTP Request
  34. * @param {Response} response ExpressJS HTTP Response
  35. * @param {Function} next Function to defer execution to the next registered middleware
  36. */
  37. PropertyController.prototype.getPropertyTypesAction = function(request, response, next) {
  38. response.send({
  39. types: PropertyProvider.availableTypes
  40. });
  41. };
  42.  
  43. /**
  44. * Gets custom properties.
  45. *
  46. * @example
  47. *
  48. * // Response example
  49. * {
  50. * "entities" : [ ... ],
  51. * "pagination" : {
  52. * "limit": ..., // The limit number of custom properties by page
  53. * "page": ..., // The actual page
  54. * "pages": ..., // The total number of pages
  55. * "size": ... // The total number of custom properties
  56. * }
  57. *
  58. * @method getEntitiesAction
  59. * @async
  60. * @param {Request} request ExpressJS HTTP Request
  61. * @param {Object} [request.query] Request's query
  62. * @param {String|Array} [request.query.include] The list of fields to include from returned properties
  63. * @param {String|Array} [request.query.exclude] The list of fields to exclude from returned properties. Ignored if
  64. * include is also specified.
  65. * @param {String} [request.query.query] Search query to search on both name and description
  66. * @param {Array} [request.query.types] To filter properties by type
  67. * @param {String} [request.query.page=0] The expected page
  68. * @param {String} [request.query.limit=10] The expected limit
  69. * @param {String} [request.query.sortBy="name"] The field to sort properties by (either **name** or **description**)
  70. * @param {String} [request.query.sortOrder="desc"] The sort order (either **asc** or **desc**)
  71. * @param {Response} response ExpressJS HTTP Response
  72. * @param {Function} next Function to defer execution to the next registered middleware
  73. */
  74. PropertyController.prototype.getEntitiesAction = function(request, response, next) {
  75. var params;
  76. var provider = this.getProvider();
  77.  
  78. try {
  79. params = openVeoApi.util.shallowValidateObject(request.query, {
  80. include: {type: 'array<string>'},
  81. exclude: {type: 'array<string>'},
  82. query: {type: 'string'},
  83. types: {type: 'array<string>'},
  84. limit: {type: 'number', gt: 0},
  85. page: {type: 'number', gte: 0, default: 0},
  86. sortBy: {type: 'string', in: ['name', 'description'], default: 'name'},
  87. sortOrder: {type: 'string', in: ['asc', 'desc'], default: 'desc'}
  88. });
  89. } catch (error) {
  90. return next(HTTP_ERRORS.GET_PROPERTIES_WRONG_PARAMETERS);
  91. }
  92.  
  93. // Build sort
  94. var sort = {};
  95. sort[params.sortBy] = params.sortOrder;
  96.  
  97. // Build filter
  98. var filter = new ResourceFilter();
  99.  
  100. // Add search query
  101. if (params.query) filter.search('"' + params.query + '"');
  102.  
  103. // Add property types
  104. if (params.types && params.types.length) filter.in('type', params.types);
  105.  
  106. provider.get(
  107. filter,
  108. {
  109. exclude: params.exclude,
  110. include: params.include
  111. },
  112. params.limit,
  113. params.page,
  114. sort,
  115. function(error, customProperties, pagination) {
  116. if (error) {
  117. process.logger.error(error.message, {error: error, method: 'getEntitiesAction'});
  118. return next(HTTP_ERRORS.GET_PROPERTIES_ERROR);
  119. }
  120. response.send({
  121. entities: customProperties,
  122. pagination: pagination
  123. });
  124. }
  125. );
  126. };
  127.  
  128. /**
  129. * Gets associated provider.
  130. *
  131. * @method getProvider
  132. * @return {PropertyProvider} The provider associated to the controller
  133. */
  134. PropertyController.prototype.getProvider = function(request) {
  135. return new PropertyProvider(process.api.getCoreApi().getDatabase());
  136. };
  137.