Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/freirart/desafio-tecnico-stone-server
API REST: CRUD de funcionários desenvolvido em NodeJS.
https://github.com/freirart/desafio-tecnico-stone-server
express express-winston heroku heroku-postgres mongodb node postgres sequelize winston winston-mongodb
Last synced: about 1 month ago
JSON representation
API REST: CRUD de funcionários desenvolvido em NodeJS.
- Host: GitHub
- URL: https://github.com/freirart/desafio-tecnico-stone-server
- Owner: freirart
- License: mit
- Created: 2020-11-03T16:35:52.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-12-13T18:37:11.000Z (about 2 years ago)
- Last Synced: 2023-05-05T04:57:28.896Z (over 1 year ago)
- Topics: express, express-winston, heroku, heroku-postgres, mongodb, node, postgres, sequelize, winston, winston-mongodb
- Language: JavaScript
- Homepage: https://employees-server.herokuapp.com/
- Size: 212 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
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
* ExpressJS
* Sequelize### Bancos de dados
* Heroku Postgres
* MongoDB### Logging e armazenamento de logs
* winston
* express-winston
* winston-mongodb## 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=&filtroIdade=&nome=`
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.