UNPKG

apeman-app-rest

Version:
80 lines (68 loc) 1.73 kB
/** * Endpoint for one * @augments Endpoint * @class RelatedOneEndpoint */ 'use strict' const Endpoint = require('./endpoint') const { toData, defineOne, defineRelatedOne } = require('apemanmodel') const validateModelExists = require('../validating/validate_model_exists') const co = require('co') /** @lends RelatedOneEndpoint */ class RelatedOneEndpoint extends Endpoint { /** * @override */ getDefaultConfig () { return { name: 'relatedOne' } } /** * @override */ handle (ctx, next) { const s = this let succeed = s.bindSucceed(ctx) let fail = s.bindFail(ctx) return co(function * () { let { state } = ctx let error = s.validate(null, state) if (error) { return fail(error) } let { model, id, relatedId, association } = state let relatedInstance = yield s.relatedOne(id, relatedId, state) let relatedExistsError = validateModelExists(model, id, relatedInstance) if (relatedExistsError) { return fail(relatedExistsError) } return succeed( {}, toData(association.target, relatedInstance, {}), { self: '.' } ) }) } /** * @override */ validate (data, state) { let { model, id, instance } = state let existsError = validateModelExists(model, id, instance) if (existsError) { return existsError } return null } relatedOne (id, relatedId, state) { let { model, association, transaction } = state return co(function * () { let relatedOne = defineRelatedOne(model, association, transaction) return yield relatedOne(id, relatedId) }) } } module.exports = RelatedOneEndpoint