UNPKG

apeman-app-rest

Version:
85 lines (71 loc) 1.95 kB
/** * Endpoint for related create * @augments Endpoint * @class RelatedCreateEndpoint */ 'use strict' const Endpoint = require('./endpoint') const BulkRelatedCreateEndpoint = require('./bulk/bulk_related_create_endpoint') const validateDataType = require('../validating/validate_data_type') const validateModelExists = require('../validating/validate_model_exists') const { toType, toData, defineRelatedCreate } = require('apemanmodel') const co = require('co') /** @lends RelatedCreateEndpoint */ class RelatedCreateEndpoint extends Endpoint { /** * @override */ getDefaultConfig () { return { name: 'relatedCreate' } } /** * @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, data, transaction, association, model } = state let isBulk = Array.isArray(data) if (isBulk) { return yield s.handleBulk(ctx, next) } let relatedCreate = defineRelatedCreate(model, association, transaction) let error = s.validate(data, state) if (error) { return fail(error) } let created = yield relatedCreate(id, data) return succeed( { status: 201 }, toData(association.target, created, {}), { self: `./${created.id}` } ) }) } /** * @override */ validate (data, state) { let { model, id, instance, association } = state let type = toType(association.target) let existsError = validateModelExists(model, id, instance) if (existsError) { return existsError } let typeError = validateDataType(data, type) if (typeError) { return typeError } return null } handleBulk (ctx, next) { const s = this return new BulkRelatedCreateEndpoint(s.config).handle(ctx, next) } } module.exports = RelatedCreateEndpoint