Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/armanoalves/vollmed-api
https://github.com/armanoalves/vollmed-api
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/armanoalves/vollmed-api
- Owner: armanoalves
- Created: 2024-07-12T11:47:22.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-08-21T20:47:28.000Z (5 months ago)
- Last Synced: 2024-08-21T22:58:31.725Z (5 months ago)
- Language: Java
- Size: 53.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# API da aplicação Voll.med
Projeto de desenvolvimento de uma API de agendamento de consultas, utilizando de Spring Boot e suas bibliotecas para a construção de uma API Rest, que segue os padrões de segurança.
## Aprendizados
### Curso 01 - Aula 01
- Criar um projeto Spring Boot utilizando o site do Spring Initializr;
- Importar o projeto no IntelliJ e executar uma aplicação Spring Boot pela classe contendo o método `main`;
- Criar uma classe Controller e mapear uma URL nela utilizando as anotações `@RestController` e `@RequestMapping`;
- Realizar uma requisição de teste no browser acessando a URL mapeada no Controller.
### Curso 01 - Aula 02
- Mapear requisições POST em uma classe Controller;
- Enviar requisições POST para a API utilizando o Insomnia;
- Enviar dados para API no formato JSON;
- Utilizar a anotação `@RequestBody` para receber os dados do corpo da requisição em um parâmetro no Controller;
- Utilizar o padrão DTO (Data Transfer Object), via Java Records, para representar os dados recebidos em uma requisição POST.
### Curso 01 - Aula 03
- Adicionar novas dependências no projeto;
- Mapear uma entidade JPA e criar uma interface Repository para ela;
- Utilizar o Flyway como ferramenta de Migrations do projeto;
- Realizar validações com Bean Validation utilizando algumas de suas anotações, como a `@NotBlank`.
### Curso 01 - Aula 04
- Utilizar a anotação `@GetMapping` para mapear métodos em Controllers que produzem dados;
- Utilizar a interface `Pageable` do Spring para realizar consultas com paginação;
- Controlar a paginação e a ordenação dos dados devolvidos pela API com os parâmetros `page`, `size` e `sort`;
- Configurar o projeto para que os comandos SQL sejam exibidos no console.
### Curso 01 - Aula 05
- Mapear requisições PUT com a anotação `@PutMapping`;
- Escrever um código para atualizar informações de um registro no banco de dados;
- Mapear requisições DELETE com a anotação `@DeleteMapping`;
- Mapear parâmetros dinâmicos em URL com a anotação `@PathVariable`;
- Implementar o conceito de exclusão lógica com o uso de um atributo booleano.
### Curso 2 - Aula 01
- Utilizar a classe `ResponseEntity`, do Spring, para personalizar os retornos dos métodos de uma classe Controller;
- Modificar o código HTTP devolvido nas respostas da API;
- Adicionar cabeçalhos nas respostas da API;
- Utilizar os códigos HTTP mais apropriados para cada operação realizada na API.
### Curso 2 - Aula 02
- Criar uma classe para isolar o tratamento de exceptions da API, com a utilização da anotação `@RestControllerAdvice`;
- Utilizar a anotação `@ExceptionHandler`, do Spring, para indicar qual exception um determinado método da classe de tratamento de erros deve capturar;
- Tratar erros do tipo 404 (Not Found) na classe de tratamento de erros;
- Tratar erros do tipo 400 (Bad Request), para erros de validação do Bean Validation, na classe de tratamento de erros;
- Simplificar o JSON devolvido pela API em casos de erro de validação do Bean Validation.
### Curso 2 - Aula 03
- Funciona o processo de autenticação e autorização em uma API Rest;
- Adicionar o Spring Security ao projeto;
- Funciona o comportamento padrão do Spring Security em uma aplicação;
- Implementar o processo de autenticação na API, de maneira Stateless, utilizando as classes e configurações do Spring Security.
### Curso 2 - Aula 04
- Adicionar a biblioteca `Auth0 java-jwt` como dependência do projeto;
- Utilizar essa biblioteca para realizar a geração de um token na API;
- Injetar uma propriedade do arquivo `application.properties` em uma classe gerenciada pelo Spring, utilizando a anotação `@Value`;
- Devolver um token gerado na API quando um usuário se autenticar nela.
### Curso 2 - Aula 04
- Funcionam os `Filters` em uma requisição;
- Implementar um *filter* criando uma classe que herda da classe `OncePerRequestFilter`, do Spring;
- Utilizar a biblioteca ***Auth0 java-jwt*** para realizar a validação dos tokens recebidos na API;
- Realizar o processo de autenticação da requisição, utilizando a classe `SecurityContextHolder`, do Spring;
- Liberar e restringir requisições, de acordo com a URL e o verbo do protocolo HTTP.
### Curso 3 - Aula 01
- Implementar uma nova funcionalidade no projeto;
- Avaliar quando é necessário criar uma classe Service na aplicação;
- Criar uma **classe Service**, com o objetivo de isolar códigos de regras de negócio, utilizando para isso a anotação `@Service`;
- Implementar um algoritmo para a funcionalidade de agendamento de consultas;
- Realizar **validações de integridade** das informações que chegam na API;
- Implementar uma consulta JPQL (_Java Persistence Query Language_) complexa em uma _interface repository_, utilizando para isso a anotação `@Query`.
### Curso 3 - Aula 02
- Isolar os códigos de validações de regras de negócio em classes separadas, utilizando nelas a anotação `@Component` do Spring;
- Finalizar a implementação do algoritmo de agendamento de consultas;
- Utilizar os princípios SOLID para deixar o código da funcionalidade de agendamento de consultas mais fácil de entender, evoluir e testar.
### Curso 3 - Aula 03
- Adicionar a **biblioteca SpringDoc** no projeto para que ela faça a geração automatizada da documentação da API;
- Analisar a documentação do SpringDoc para entender como realizar a sua configuração em um projeto;
- Acessar os endereços que disponibilizam a documentação da API nos formatos yaml e html;
- Utilizar o **Swagger UI** para visualizar e testar uma API Rest;
- Configurar o JWT na documentação gerada pelo SpringDoc.
### Curso 3 - Aula 04
- Escrever **testes automatizados** em uma aplicação com Spring Boot;
- Escrever testes automatizados de uma interface _Repository_, seguindo a estratégia de usar o mesmo banco de dados que a aplicação utiliza;
- Sobrescrever propriedades do arquivo `application.properties`, criando outro arquivo chamado `application-test.properties` que seja carregado apenas ao executar os testes, utilizando para isso a anotação `@ActiveProfiles`;
- Escrever testes automatizados de uma classe Controller, utilizando a classe `MockMvc` para simular requisições na API;
- Testar cenários de erro 400 e código 200 no teste de uma classe controller.
### Curso 3 - Aula 05
- Funciona o build de uma aplicação com Spring Boot;
- Utilizar arquivos de propriedades específicos para cada profile, alterando em cada arquivo as propriedades que precisam ser modificadas;
- Configurar informações sensíveis da aplicação, como dados de acesso ao banco de dados, via variáveis de ambiente;
- Realizar o build do projeto via Maven;
- Executar a aplicação via terminal, com o comando java -jar, passando as variáveis de ambiente como parâmetro.