mahaplatform/backframe

View on GitHub
src/resource/update_route.js

Summary

Maintainability
C
1 day
Test Coverage
import BackframeError from '../error'
import Route from '../route'
import _ from 'lodash'

class UpdateRoute extends Route {

  constructor(config = {}) {
    super(config)
    this.setAction('update')
    this.setMethod('patch')
    this.setPath('')
    this.setProcessor(this._processor)
    if(config.allowedParams) this.setAllowedParams(config.allowedParams)
    if(config.model) this.setModel(config.model)
    if(config.virtualParams) this.setVirtualParams(config.virtualParams)
  }

  setAllowedParams(allowedParams) {
    this._setOption('allowedParams', allowedParams)
  }

  setModel(model) {
    this._setOption('model', model)
  }

  setVirtualParams(virtualParams) {
    this._setOption('virtualParams', virtualParams)
  }

  async _processor(req, trx, options) {

    try {

      const params = this._allowedParams(req.body, options.allowedParams)

      await req.resource.save(params, {
        patch: true,
        transacting: trx
      })

      return req.resource

    } catch(err) {

      throw new BackframeError({
        code: 422,
        message: 'Unable to update record',
        errors: err.errors ? err.toJSON() : err.message
      })

    }

  }

  _allowedParams(body, allowedParams) {

    const allowed = _.castArray(allowedParams)

    return _.pick(body, allowed)

  }

}

export default UpdateRoute