Skip to content

freirart/desafio-tecnico-stone-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REST API - Crud de Funcionários

Proposta

Desafio técnico proposto pela Stone - Fintech brasileira de meios de pagamentos que atua no mercado desde 2014 - cuja proposta era construir um client Front-End desenvolvido na stack Javascript que interagisse com uma API REST.

A aplicação deste repositório consiste em uma API REST desenvolvida em NodeJS que utiliza dos bancos Postgres - para armazenar e relacionar registros de funcionários e cargos - e MongoDB - para armazenamento de logs e requisições/respostas.

Clique aqui para visitar o repositório da aplicação web em React!

Tecnologias

Arquitetura da aplicação

Bancos de dados

Logging e armazenamento de logs

Baixando o código fonte

Para obter o código fonte em sua máquina, execute o seguinte comando:

$ git clone https://github.com/freirart/desafio-tecnico-stone-server.git

Rodar o projeto localmente é impossível uma vez que se observa e inexistência de variáveis de ambiente que contêm informações sigilosas tais como as URI's de conexão com o Banco de Dados. Alternativas para testar a aplicação são descritas logo abaixo.

Rotas

O servidor Back-End está hospedado na Heroku, logo todas as suas rotas podem ser acessadas partindo do link:
https://employees-server.herokuapp.com/

Rotas GET

Obter lista de funcionários

Como uma boa prática de performance, a lista de funcionários é separada em páginas, onde cada página possui 20 funcionários.

A rota para as páginas da lista segue o seguinte modelo:

/employee/page/:pageNumber

Substituindo :pageNumber por 0, a API retornará os 20 primeiros funcionários cadastrados no banco.

Obter informações de funcionário pelo seu Id

/employee/:employeeId

Substitua :employeeId pelo Id de seu funcionário e voilà!

Obter lista de cargos

/cargos

Devolve a lista de cargos com seus respectivos Id's.

Obter lista filtrada de funcionários

/employee?cargoId=<CargoID>&filtroIdade=<FiltroIdade>&nome=<InicioDoNome>

Nesta rota, pode-se filtrar funcionários pelo Id de seu cargo, pelo filtro de sua idade e/ou pelo início de seu nome.

  • A filtragem pelo cargo é baseada em seu Id (obtém-se o Id do cargo pela rota acima).

  • O filtro de idade é dado pelos números de 1 a 4 que seguem a relação abaixo:

    1- Funcionários abaixo de 20 anos;
    2- Funcionários entre 20 e 30 anos;
    3- Funcionários entre 31 e 40 anos;
    4- Funcionários acima de 40 anos;

  • O filtro pelo nome é insensitive case (indifere maiusculas e minúsculas) e busca por algo que comece com o que foi entrado. Isto é, caso "art" seja o nome procurado, o funcionário de nome "Artur Freire dos Santos" passará pelo filtro.

OBS:. Os filtros podem ser combinados ou não.

Rotas POST

Cadastrar um cargo

/cargos

Cria um cargo no banco de dados que poderá ser utilizado para atrelar funcionários a este.

O corpo da requisição deve conter o campo nome, como mostra o JSON abaixo:

{
  "nome": "Um cargo novo na empresa!"
}

Cadastrar um funcionário

/employee

Cria um funcionário no banco de dados.

O corpo da requisição deve conter os campos nome, idade e cargoId, como sugere o JSON abaixo:

{
  "nome": "Artur Freire dos Santos",
  "idade": 19,
  "cargoId": 1
}

Rotas PUT

Atualizar um funcionário

/employee/edit

Altera informações do funcionário no banco de dados.

O corpo da requisição deve conter os campos id, nome, idade e cargoId, como ilustra o JSON abaixo:

{
	"id": 1,
	"nome": "Artur Freire dos Santos",
	"idade": 19,
	"cargoId": 1
}

Atualizar um cargo

/cargos/edit

Altera informações do cargo no banco de dados.

O corpo da requisição deve conter os campos id e nome, como ilustra o JSON abaixo:

{
	"id": 1,
	"nome": "Desenvolvedor Fullstack"
}

Rotas DELETE

Deletar um cargo

/cargos/delete/:cargoId

Substitua :cargoId pelo Id do cargo que deseja deletar e voilà!

Deletar um funcionário

/employee/delete/:employeeId

Substitua :employeeId pelo Id do cargo que deseja deletar e voilà!

Licença

Projeto desenvolvido sob licença do MIT.