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!
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.
O servidor Back-End está hospedado na Heroku, logo todas as suas rotas podem ser acessadas partindo do link:
https://employees-server.herokuapp.com/
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.
/employee/:employeeId
Substitua :employeeId
pelo Id de seu funcionário e voilà!
/cargos
Devolve a lista de cargos com seus respectivos Id's.
/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.
/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!"
}
/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
}
/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
}
/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"
}
/cargos/delete/:cargoId
Substitua :cargoId
pelo Id do cargo que deseja deletar e voilà!
/employee/delete/:employeeId
Substitua :employeeId
pelo Id do cargo que deseja deletar e voilà!
Projeto desenvolvido sob licença do MIT.