apeman-app-rest
Version:
apeman app to handle restful endpoint.
77 lines (68 loc) • 1.74 kB
JavaScript
/**
* Endpoint for related destroy
* @augments Endpoint
* @class RelatedDestroyEndpoint
*/
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