Dulce-Work-Schedule/2018.1-Dulce_Sector

View on GitHub
Client/api.js

Summary

Maintainability
B
6 hrs
Test Coverage
// The RegExp Object above validates MongoBD ObjectIds
var checkObjectId = new RegExp('^[0-9a-fA-F]{24}$');

function validate_field(field, result){
  if (field.value == null || field.value == ''){
    result[field.field_name + '_error'] = 'O campo ' + field.verbose + ' é obrigatório.';
  } else if (typeof(field.value) != 'string') {
    result[field.field_name + '_error'] = 'O campo ' + field.verbose +' deve ser uma string.';
  }
  return result;
}

function validate_id(field, result){
  if (field.value == null || field.value == ''){
    result[field.field_name + '_error'] = 'O campo ' + field.verbose + ' é obrigatório.';
  } else if (!checkObjectId.test(field.value)) {
    result[field.field_name + '_error'] = 'O ' + field.verbose +' é inválido.';
  }
  return result;
}

module.exports = function api(options){

  this.add('role:api,path:create', function(msg,respond){
    var name = {
      verbose: 'Nome',
      field_name: 'name'
    }
    var hospital_id = {
      verbose: 'Id de Hospital',
      field_name: 'hospital_id'
    }
    result = {}
    name.value = msg.args.body.name
    hospital_id.value = msg.args.body.hospital_id

    result = validate_field(name, result)
    result = validate_id(hospital_id, result)

    if (Object.entries(result)[0]) {
      console.log("Result:");
      console.log(result);
      result.success = false;
      respond(null, result)
    // else, everything sucess
    } else {
      this.act('role:sector,cmd:create', {
        name: name.value,
        hospital_id: hospital_id.value
      }, respond)
    }
  })

  this.add('role:api,path:list', function(msg,respond) {
    this.act('role:sector, cmd:list',{
    },respond)
  });

  this.add('role:api,path:view', function(msg,respond) {
    var sector_id = {
      verbose: 'Id de Setor',
      field_name: 'sector_id'
    }
    result = {}
    sector_id.value = msg.args.query.sector_id

    result = validate_id(sector_id, result)

    this.act('role:sector, cmd:view',{
      sector_id: sector_id.value
    },respond)
  });

  this.add('role:api,path:listByHospital', function(msg,respond) {
    var hospital_id = {
      verbose: 'Id do Hospital',
      field_name: 'hospital_id'
    }
    result = {}
    hospital_id.value = msg.args.query.hospital_id

    result = validate_id(hospital_id, result)

    this.act('role:sector, cmd:listByHospital',{
      hospital_id: hospital_id.value
    },respond)
  });

  this.add('role:api,path:error', function(msg, respond){
    this.act('role:sector, cmd:error',{}, respond)
  });


  this.add('init:api', function (msg,respond){
    this.act('role:web',{routes: {
      prefix: '/api/sector',
      pin:    'role:api,path:*',
      map: {
        create: { POST:true,
                    auth: {
                      strategy: 'jwt',
                      fail: '/api/sector/error',
                    }
                  },
        list: { GET:true,
                    auth: {
                      strategy: 'jwt',
                      fail: '/api/sector/error',
                    }
                  },
        view: { GET:true,
                    auth: {
                      strategy: 'jwt',
                      fail: '/api/sector/error',
                    }
                  },
        listByHospital: { GET:true,
                    auth: {
                      strategy: 'jwt',
                      fail: '/api/sector/error',
                    }
                  },
        error: {GET:true}
      }
    }}, respond)
  });
}