UNPKG

apeman-app-rest

Version:
81 lines (69 loc) 1.87 kB
/** * Endpoint for bulk create * @augments Endpoint * @class BulkRelatedCreateEndpoint */ 'use strict' const Endpoint = require('../endpoint') const { toType, toData, defineOne, defineRelatedCreate } = require('apemanmodel') const validateDataType = require('../../validating/validate_data_type') const validateModelExists = require('../../validating/validate_model_exists') const co = require('co') /** @lends BulkRelatedCreateEndpoint */ class BulkRelatedCreateEndpoint extends Endpoint { /** * @override */ getDefaultConfig () { return { name: 'bulkRelatedCreate' } } /** * @override */ handle (ctx, next) { const s = this let succeed = s.bindSucceed(ctx) let fail = s.bindFail(ctx) let { model, id, data, association, transaction } = ctx.state return co(function * () { let one = defineOne(model, transaction) let relatedCreate = defineRelatedCreate(model, association, transaction) let instance = yield one(id) let relatedModel = association.target let error = s.validate(data, { model, id, instance, type: toType(relatedModel) }) if (error) { return fail(error) } let created = yield relatedCreate.bulk(id, data) return succeed( { status: 201 }, toData(relatedModel, created, {}), { collection: created.map( (created) => `./${created.id}` ) } ) }) } /** * @override */ validate (data, config) { let { model, id, instance, type } = config let existsError = validateModelExists(model, id, instance) if (existsError) { return existsError } let typeError = validateDataType.bulk(data, type) if (typeError) { return typeError } return null } } module.exports = BulkRelatedCreateEndpoint