apeman-app-rest
Version:
apeman app to handle restful endpoint.
81 lines (69 loc) • 1.87 kB
JavaScript
/**
* Endpoint for bulk create
* @augments Endpoint
* @class BulkRelatedCreateEndpoint
*/
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