API de registro de horas trabalhadas desenvolvido durante o desafio da GreenMile - Quixadá.
Há uma versão implementada utilizando microserviços, na branch de microservices, onde além da aplicação ter sido divida em serviços, a escrita do código foi padronizada com nomes em inglês e documentação e mensagens em português, baseadas na sugestão do Filipe Deschamps .
Foram realizadas modificações que não estão inclusivas na branch principal, como entre os os commits 4627756 e 630f5ce.
Confira também a versão deste projeto utilizando CQRS e Event Sourcing no repositório.
Ok, agora vamos falar deste projeto...
Estes são os exemplos de utilização báscia da API, contendo os comandos e as respostas geradas pelos mesmos.
Para cadastrar um novo usuário, utilize o seguinte comando:
curl -X POST \
http://localhost:8082/usuarios \
-H 'Content-Type: application/json' \
-d '{
"nome": "Robson",
"username": "robson@greenmile.com",
"senha": "desafio"
}'
No cabeçalho da resposta, irá conter o "location" do usuário inserido:
# ...
location: http://localhost:8082/usuarios/2
# ...
Para poder realizar o login, onde o username e senha devem pertencer a usuário já cadastradao anteriormente, utilize o seguinte comando:
curl -X POST \
http://localhost:8082/api/login \
-H 'Content-Type: application/json' \
-d '{
"username": "robson@greenmile.com",
"senha": "desafio"
}'
No cabeçalho da resposta, irá conter o token de autenticação:
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyb2Jzb25AZ3JlZW5taWxlLmNvbSIsImV4cCI6MTU1Mjk2OTk0N30.VEjesYlH_jF8KNC7EUkXwk0L2wSZswA-uZ-kEsq0rb0eTYJ92h0q2EEWkn2dxpTHojjQftC_azJf9OcO8_ijvA
Para consultar todos usuários registrados, utilize o seguinte comando:
curl -X GET \
http://localhost:8080/api/usuarios \
-H 'Content-Type: application/json' \
Será retornada uma lista páginada com todos os registros de usuários:
{
"content": [
{
"id": 1,
"name": "Robson",
"username": "robson@greenmile.com"
},
{
"id": 2,
"name": "Samuel",
"username": "samuel@greenmile.com"
},
{
"id": 3,
"name": "Gabriel",
"username": "gabriel@greenmile.com"
},
# ...
],
"pageable": {
"sort": {
"sorted": true,
"unsorted": false,
"empty": false
},
"pageSize": 10,
"pageNumber": 0,
"offset": 0,
"unpaged": false,
"paged": true
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"first": true,
"sort": {
"sorted": true,
"unsorted": false,
"empty": false
},
"numberOfElements": 2,
"size": 10,
"number": 0,
"empty": false
}
Para buscar o registro de um usuário específico, utilize o seguinte comando, onde em .../usuarios/id, deve ser utilizado o id de um usuário cadastrado previamente:
curl -X GET \
http://localhost:8080/api/usuarios/1 \
-H 'Content-Type: application/json'
Será retornado as informações relacionadas ao usuário com id equivalente ao buscado:
{
"id": 1,
"name": "Robson",
"username": "robson@greenmile.com",
"profile": [
"USER"
]
}
Para cadastrar um novo registro de horas trabalhadas, certifice-se de ter feito antes o login e adquirido o token de autorização, após isso, basta adicioná-lo no cabeçalho da requisição, utilizando o seguinte comando:
curl --request POST \
--url http://localhost:8080/api/horas \
--header 'authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyb2Jzb25AZ3JlZW5taWxlLmNvbSIsImV4cCI6MTU1MzA1Mzc4MH0.i6nb5riIxzgvh6xPWGihdQys5d9OA7rIyzqNbRzE1grCf2u134XoE7Qs7-rhILqrPq2NXvln4yaTpNo9ftpZzA' \
--header 'content-type: application/json' \
--data '{
"data": "19/03/2019",
"horaEntrada": "08:00",
"horaSaida": "22:00"
}'
Onde a data utiliza o padrão dia/mês/ano (dd/mm/aa) e a hora de entrada e a saída hora:minunto (hh/mm).
Para consultar todos os registros de horas cadastradas e a quem elas estão relacionadas, utilize o seguinte comando:
curl -X GET \
http://localhost:8080/api/horas \
-H 'Content-Type: application/json' \
Será retornada uma lista páginada com todos os registros de usuários:
{
"content": [
{
"id": 1,
"data": "17/03/2019",
"horaEntrada": "08:00",
"horaSaida": "22:00",
"horasTrabalhadas": 14,
"usuario": {
"id": 1,
"nome": "Robson",
"email": "robson@greenmile.com",
"perfis": [
"USUARIO"
]
}
},
{
"id": 2,
"data": "18/03/2019",
"horaEntrada": "08:00",
"horaSaida": "22:00",
"horasTrabalhadas": 14,
"usuario": {
"id": 1,
"nome": "Robson",
"email": "robson@greenmile.com",
"perfis": [
"USUARIO"
]
}
},
# ...
{
"id": 3,
"data": "19/03/2019",
"horaEntrada": "08:00",
"horaSaida": "22:00",
"horasTrabalhadas": 14,
"usuario": {
"id": 1,
"nome": "Robson",
"email": "robson@greenmile.com",
"perfis": [
"USUARIO"
]
}
}
],
"pageable": {
"sort": {
"unsorted": false,
"sorted": true,
"empty": false
},
"pageSize": 10,
"pageNumber": 0,
"offset": 0,
"paged": true,
"unpaged": false
},
"last": true,
"totalPages": 1,
"totalElements": 1,
"first": true,
"sort": {
"unsorted": false,
"sorted": true,
"empty": false
},
"numberOfElements": 1,
"size": 10,
"number": 0,
"empty": false
}
É necessário ter o gerenciador de depências Maven instalado!
mvn install
mvm spring-boot:run
Para rodar os testes, basta entrar na pasta raíz do projeto e executar o comando:
mvn test
Este projeto utiliza o guia de estilos para Java do Google (Google Java Style Guide).
A documentação gerada pelo Swagger pode ser consultada em api-docs. Também é possivel utilizar a interface web disponibilizada pelo Swagger, para entender como os funcionam os recursos de forma interativa através do endereço ou importação e executando a coleção gerada pelo Postman.
Utilizando parcialmente o padrão CQRS (Command Query Responsibility Segregation).
- https://spring.io/guides/tutorials/rest/
- https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html
Este projeto está licensiado sob os termos de licença do MIT - veja o LICENSE.md para mais detalhes.