O projeto foi desenvolvido na realização do curso REST API's do @leandrocgsi. Para isto, foi utilizado o Java 21 com Spring Boot na versão 3.2.5.
Durante o desenvolvimento foi abordado diversos conceitos fundamentais do REST, Design Patterns, Versionamento de APIs, Tratamento de Exceções, ModelMapper, Migrations com Flyway, Content Negotiation para JSON e XML, HATEOAS. Aplicando boas práticas, como a documentação em Swagger, configuração de CORS, segurança com autenticação e autorização através de JWT.
Foi possível também abordar outros conceitos como trabalhar com Upload e Download de arquivos através de um endpoint. Também foram criados testes automatizados com JUnit, Mockito, TestContainers para o MySQL e Rest Assured. Como forma de teste manual, também é possível consultar a aplicação com base nos exemplos disponibilizados no diretório postman que pode ser diretamente importados como collections e enviroments dentro do Postman.
Por fim, a aplicação foi dockerizada, através de Dockerfile com possibilidade de Docker Compose para o banco local e implementada na AWS, utilizando recursos como ECR e ECS. Por razões financeiras, a aplicação foi removida da AWS, mas toda a documentação desse processo pode ser encontrada abaixo.
Foi criada uma esteira de CI/CD com a utilização do Github Actions para implantação na AWS, que pode ser conferida no arquivo ci.yml.
Para a aplicação, foi implantado um banco de dados MySQL através do serviço RDS da Amazon AWS.
Foi criado um usuário exclusivo para uso pelo Github Actions.
Foi criado um reposiório para armazenar as Docker Images com ECR.
As imagens armazenadas foram tagueadas conforme o id da build do Github Actions, mantendo sempre a latest para o deploy.
As Task Definition são criadas para definir as configurações de criação do container, a cada deploy do Github Action, ela é atualizada com a nova imagem Docker.
O cluster é responsável por gerir toda a infraestrutura utilizada pelo seus services dentro da AWS.
Dentro do Cluster, temos a criação do Service com base na Task Definition criada anteriormente.
Por fim, com todo o processo finalizado, foi possível acessar o endpoint referente ao Swagger (/swagger-ui/index.html)
Como anexo a este projeto, também foi desenvolvido um frontend em React que consome essa aplicação, que pode ser acessado no diretório frontend. Como é apenas um simples client para esta aplicação e não é o foco do repositório, decidi manter esse mini projeto em uma subpasta.
Tela de login onde se consulta e utiliza o token JWT em localStorage.
Tela de listagem de todos os livros retornados pela API, com botão para "Ver mais", onde é utilizado o recurso de paginação da API. Também é possível deletar livros nessa tela.
Tela de cadastro de um novo livro.
Tela de atualização para um livro. É a mesma página de cadastro, porém com alterações para esse comportamento.