UNPKG

forest-express-sequelize

Version:

Official Express/Sequelize Liana for Forest

51 lines (50 loc) 1.6 kB
"use strict"; require("core-js/modules/es.array.iterator.js"); const _ = require('lodash'); const Operators = require('../utils/operators'); const orm = require('../utils/orm'); const { ErrorHTTP422 } = require('./errors'); function HasManyDissociator(model, association, options, params, data) { const OPERATORS = Operators.getInstance(options); const isDelete = Boolean(params.delete); this.perform = function () { const associatedIds = _.map(data.data, function (value) { return value.id; }); return orm.findRecord(model, params.recordId).then(function (record) { let removeAssociation = false; if (isDelete) { _.each(model.associations, function (innerAssociation, associationName) { if (associationName === params.associationName) { removeAssociation = innerAssociation.associationType === 'belongsToMany'; } }); } else { removeAssociation = true; } if (removeAssociation) { return record[`remove${_.upperFirst(params.associationName)}`](associatedIds); } return null; }).then(function () { if (isDelete) { const primaryKeys = _.keys(association.primaryKeys); const [idField] = primaryKeys; const condition = { [idField]: { [OPERATORS.IN]: associatedIds } }; return association.destroy({ where: condition }); } return null; }).catch(function (error) { throw new ErrorHTTP422(error.message); }); }; } module.exports = HasManyDissociator;