maestro-server/client-app

View on GitHub
src/resources/factories/factory.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict'

import DRequester from '../requests/request'
import store from 'src/store'

import fsuccess from '../callbacks/request_success'
import frejected from '../callbacks/request_rejected'

import Login from 'services/login'
import api_url from 'src/resources/libs/api_url'

class Factory {

  constructor (model = {}, e, Requester = DRequester) {
    this.entity = e
    this.header = {}
    this.model = model
    this.ename = ''

    this.requester = Requester
  }

  getName () {
    return this.ename
  }

  setName (name) {
    this.ename = name
  }

  getUrl (path = api_url) {
    return `${path}/${this.entity}`
  }

  setEntity (e) {
    this.entity = e
    return this
  }

  authorization () {
    const Authorization = Login.Authorization()
    this.headers({ Authorization })
    return this
  }

  headers (objs) {
    Object.assign(this.header, objs)
    return this
  }

  getID (id, success = fsuccess) {
    this.setEntity(`${this.entity}/${id}`)
    this.get(success)
  }

  get (call_success = fsuccess, call_rejected = frejected) {
    const params = this.model
    this.factoryRequest('get', { params }, call_success, call_rejected)
  }

  create (call_success = fsuccess, call_rejected = frejected) {
    this.factoryRequest('post', this.model, call_success, call_rejected)
  }

  updateID (id, call_success = fsuccess, call_rejected = frejected) {
    this.setEntity(`${this.entity}/${id}`)
    this.update(call_success, call_rejected)
  }

  update (call_success = fsuccess, call_rejected = frejected) {
    this.factoryRequest('put', this.model, call_success, call_rejected)
  }

  patchID (id, call_success = fsuccess) {
    this.setEntity(`${this.entity}/${id}`)
    this.patch(call_success)
  }

  patch (call_success = fsuccess, call_rejected = frejected) {
    this.factoryRequest('patch', this.model, call_success, call_rejected)
  }

  deleteID (id, success = fsuccess) {
    this.setEntity(`${this.entity}/${id}`)
    this.delete(success)
  }

  delete (call_success = fsuccess, call_rejected = frejected) {
    const data = this.model
    this.factoryRequest('delete', { data }, call_success, call_rejected)
  }

  factoryRequest (caller, args, call_success, call_rejected) {
    store.dispatch('onSpinner')

    this.requester(this.header, this.timeout)[caller](this.entity, args)
      .then((e) => this.finishCallback(e, call_success))
      .catch((e) => this.finishCallback(e, call_rejected))
  }

  finishCallback (e, callback) {
    store.dispatch('offSpinner')
    callback(e)
  }

}

export default Factory