UNPKG

apeman-app-rest

Version:
77 lines (68 loc) 1.74 kB
/** * Endpoint for related destroy * @augments Endpoint * @class RelatedDestroyEndpoint */ 'use strict' const Endpoint = require('./endpoint') const validateModelExists = require('../validating/validate_model_exists') const { defineOne, defineRelatedOne, defineRelatedDestroy } = require('apemanmodel') const co = require('co') /** @lends RelatedDestroyEndpoint */ class RelatedDestroyEndpoint extends Endpoint { /** * @override */ getDefaultConfig () { return { name: 'relatedDestroy' } } /** * @override */ handle (ctx, next) { const s = this let succeed = s.bindSucceed(ctx) let fail = s.bindFail(ctx) return co(function * () { let { state } = ctx let { id, relatedId } = ctx.state return co(function * () { let error = s.validate(null, state) if (error) { return fail(error) } let count = yield s.relatedDestroy(id, relatedId, state) return succeed( { count } ) }) }) } /** * @override */ validate (data, state) { let { model, id, instance } = state let existsError = validateModelExists(model, id, instance) if (existsError) { return existsError } return null } relatedDestroy (id, relatedId, state) { let { model, association, transaction } = state let relatedOne = defineRelatedOne(model, association, transaction) let relatedDestroy = defineRelatedDestroy(model, association, transaction) return co(function * () { let related = yield relatedOne(id, relatedId) if (!related) { return 0 } yield relatedDestroy(related) return 1 }) } } module.exports = RelatedDestroyEndpoint