O API Catálogo é uma aplicação backend em Java 17 com Spring Boot, projetada para gerenciar um catálogo de produtos com segurança e eficiência. Possui autenticação e autorização via JWT, respostas paginadas, tratamento global de exceções e versionamento de banco de dados com Flyway. A API é documentada com OpenAPI/Swagger e utiliza Docker e Docker Compose para deploy, com pipelines automatizados em GitHub Actions. É uma solução moderna, escalável e fácil de integrar.
- Java 17: Linguagem de programação para o desenvolvimento da aplicação.
- Spring: Framework para criação de aplicações Java.
- Spring-Web: Para desenvolvimento de APIs RESTful.
- Spring-Validation: Validação de dados no lado do servidor.
- Spring-Security: Autenticação e autorização.
- Spring-Data-JPA: Integração com bancos de dados usando JPA/Hibernate.
- Spring-DevTools: Facilita o desenvolvimento com reinicialização automática.
- JWT: Implementação de tokens JWT para autenticação e autorização.
- Flyway: Gerenciamento e versionamento de schema do banco de dados.
- Flyway-Core: Integração principal com Flyway.
- Flyway-MySQL: Suporte específico para banco de dados MySQL.
- MySQL Connector/J: Driver JDBC para conexão com MySQL.
- H2 Database: Banco de dados em memória para testes e desenvolvimento.
- SpringDoc OpenAPI: Documentação interativa para APIs RESTful (Swagger UI).
- Lombok: Reduz a verbosidade do código, gerando automaticamente métodos comuns.
- Maven: Gerenciador de dependências e build do projeto.
classDiagram
class AuditableEntity {
<<abstract>>
-Status status
-LocalDateTime createdAt
-LocalDateTime updatedAt
+activate()
+disable()
+delete()
}
class Brand {
-Long id
-String name
-Product[] products
+onStatusChange(Status newStatus)
}
class Product {
-Long id
-String name
-String description
-BigDecimal price
-int stockQuantity
-Brand brand
}
class User {
-String id
-String login
-String password
-UserRole role
+getAuthorities()
+getUsername()
+isAccountNonExpired()
+isAccountNonLocked()
+isEnabled()
}
class Status {
<<enum>>
+ACTIVE
+INACTIVE
+DELETED
}
class UserRole {
<<enum>>
+ADMIN
+USER
}
AuditableEntity <|-- Brand
AuditableEntity <|-- Product
AuditableEntity <|-- User
Brand "1" *-- "N" Product
- Docker e Docker Compose instalados na maquina.
Em apenas 3 comandos simples o projeto esta esta disponível.
- Clone o repositório:
git clone https://github.com/maxjdev/API_Catalogo-utilizando-JWT-MySQL-Docker.git
- Navegue até o diretório do projeto:
cd API_Catalogo-utilizando-JWT-MySQL-Docker
- Rode o projeto:
docker compose up --build
Rotas | Visibilidade | Descrição |
---|---|---|
POST /auth/* | Público | Registro e login. |
GET /api/v1/** | Público | Busca por ID, por nome ou buscar todos com paginação |
PUT/DELETE /api/admin/** | Administrador | Torna entidade ACTIVE, INACTIVE ou faz "full delete" |
POST/PUT/DELETE /api/v1/** | Autenticado | Create, Update ou Delete |
Acesse a documentação interativa em http://localhost:9090/swagger-ui.html
- Para contribuir, bifurque este repositório e envie suas alterações por meio de pull requests.
- Para relatórios de bugs ou sugestões de melhorias, abra um problema na página do projeto.