endpoints/endpoints

View on GitHub
es5/request-handler/lib/verify_full_replacement.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

exports.__esModule = true;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _lodash = require('lodash');

var _lodash2 = _interopRequireDefault(_lodash);

var _kapow = require('kapow');

var _kapow2 = _interopRequireDefault(_kapow);

exports['default'] = function (request, endpoint) {
  var err;
  var data = request.body.data;

  function hasToManyLinkage(object) {
    var has = false;
    _lodash2['default'].forIn(object.links, function (val, key) {
      if (Array.isArray(val.linkage)) {
        has = true;
      }
    });
    return has;
  }

  // relation mode, to-Many relations appear as an array
  // TODO: this is a bad heuristic that needs to be changed
  if (request.params.relation) {
    err = Array.isArray(data);
  } else if (Array.isArray(data)) {
    err = _lodash2['default'].reduce(data, function (result, resource) {
      return result || hasToManyLinkage(resource);
    }, false);
  } else {
    err = hasToManyLinkage(data);
  }

  return err ? _kapow2['default'](403, 'Full replacement of to-Many relations is not allowed.') : null;
};

module.exports = exports['default'];