UNPKG

apeman-app-rest

Version:
81 lines (66 loc) 1.54 kB
/** * Endpoint for bulk create * @augments Endpoint * @class BulkCreateEndpoint */ 'use strict' const Endpoint = require('../endpoint') const { toType, toData, defineCreate } = require('apemanmodel') const validateDataType = require('../../validating/validate_data_type') const co = require('co') /** @lends BulkCreateEndpoint */ class BulkCreateEndpoint extends Endpoint { /** * @override */ getDefaultConfig () { return { name: 'bulkCreate' } } /** * @override */ handle (ctx, next) { const s = this let succeed = s.bindSucceed(ctx) let fail = s.bindFail(ctx) let { state } = ctx let { model, data } = state return co(function * () { let error = s.validate(data, state) if (error) { return fail(error) } let created = yield s.bulkCreate(data, state) return succeed( { status: 201 }, toData(model, created, {}), { collection: created.map( (created) => `./${created.id}` ) } ) }) } /** * @override */ validate (data, state) { let type = toType(state.model) let typeErrors = validateDataType.bulk(data, type) if (typeErrors) { return typeErrors } return null } bulkCreate (data, state) { let { model, transaction } = state return co(function * () { let create = defineCreate(model, transaction) return yield create.bulk([].concat(data || [])) }) } } module.exports = BulkCreateEndpoint