const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { Self.remoteMethod('moveChild', { description: 'Changes the parent of a child department', accessType: 'WRITE', accepts: [{ arg: 'id', type: 'Number', description: 'The department id', http: {source: 'path'} }, { arg: 'parentId', type: 'Number', description: 'New parent id', }], returns: { type: 'Object', root: true }, http: { path: `/:id/moveChild`, verb: 'POST' } }); Self.moveChild = async(id, parentId = null) => { const models = Self.app.models; const child = await models.Department.findById(id); if (id == parentId) return; if (parentId) { const parent = await models.Department.findById(parentId); if (child.lft < parent.lft && child.rgt > parent.rgt) throw new UserError('You cannot move a parent to its own sons'); } return child.updateAttribute('parentFk', parentId); }; };