|
1 |
| -# API_Catalogo-utilizando-JWT-MySQL-Docker |
| 1 | +<div align="center"> |
| 2 | + |
| 3 | +# API-Catalogo utilizando JWT, MySQL e Docker |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | +<br> |
| 9 | + |
| 10 | + |
| 11 | + |
| 12 | + |
| 13 | +</div> |
| 14 | + |
| 15 | +### Descrição |
| 16 | + |
| 17 | +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. |
| 18 | + |
| 19 | +### Tecnologias usadas |
| 20 | +- **Java 17:** Linguagem de programação para o desenvolvimento da aplicação. |
| 21 | +- **Spring:** Framework para criação de aplicações Java. |
| 22 | + - **Spring-Web:** Para desenvolvimento de APIs RESTful. |
| 23 | + - **Spring-Validation:** Validação de dados no lado do servidor. |
| 24 | + - **Spring-Security:** Autenticação e autorização. |
| 25 | + - **Spring-Data-JPA:** Integração com bancos de dados usando JPA/Hibernate. |
| 26 | + - **Spring-DevTools:** Facilita o desenvolvimento com reinicialização automática. |
| 27 | +- **JWT:** Implementação de tokens JWT para autenticação e autorização. |
| 28 | +- **Flyway:** Gerenciamento e versionamento de schema do banco de dados. |
| 29 | + - **Flyway-Core:** Integração principal com Flyway. |
| 30 | + - **Flyway-MySQL:** Suporte específico para banco de dados MySQL. |
| 31 | +- **MySQL Connector/J:** Driver JDBC para conexão com MySQL. |
| 32 | +- **H2 Database:** Banco de dados em memória para testes e desenvolvimento. |
| 33 | +- **SpringDoc OpenAPI:** Documentação interativa para APIs RESTful (Swagger UI). |
| 34 | +- **Lombok:** Reduz a verbosidade do código, gerando automaticamente métodos comuns. |
| 35 | +- **Maven:** Gerenciador de dependências e build do projeto. |
| 36 | +<hr> |
| 37 | + |
| 38 | +### Imagens |
| 39 | + |
| 40 | +- Registro |
| 41 | +  |
| 42 | + |
| 43 | +- Login |
| 44 | +  |
| 45 | + |
| 46 | +- Exemplo de requisição publica(que não necessita de autenticação/autorização) |
| 47 | +  |
| 48 | +<hr> |
| 49 | + |
| 50 | +### Diagrama |
| 51 | + |
| 52 | + |
| 53 | +```mermaid |
| 54 | +classDiagram |
| 55 | + class AuditableEntity { |
| 56 | + <<abstract>> |
| 57 | + -Status status |
| 58 | + -LocalDateTime createdAt |
| 59 | + -LocalDateTime updatedAt |
| 60 | + +activate() |
| 61 | + +disable() |
| 62 | + +delete() |
| 63 | + } |
| 64 | +
|
| 65 | + class Brand { |
| 66 | + -Long id |
| 67 | + -String name |
| 68 | + -Product[] products |
| 69 | + +onStatusChange(Status newStatus) |
| 70 | + } |
| 71 | +
|
| 72 | + class Product { |
| 73 | + -Long id |
| 74 | + -String name |
| 75 | + -String description |
| 76 | + -BigDecimal price |
| 77 | + -int stockQuantity |
| 78 | + -Brand brand |
| 79 | + } |
| 80 | +
|
| 81 | + class User { |
| 82 | + -String id |
| 83 | + -String login |
| 84 | + -String password |
| 85 | + -UserRole role |
| 86 | + +getAuthorities() |
| 87 | + +getUsername() |
| 88 | + +isAccountNonExpired() |
| 89 | + +isAccountNonLocked() |
| 90 | + +isEnabled() |
| 91 | + } |
| 92 | +
|
| 93 | + class Status { |
| 94 | + <<enum>> |
| 95 | + +ACTIVE |
| 96 | + +INACTIVE |
| 97 | + +DELETED |
| 98 | + } |
| 99 | +
|
| 100 | + class UserRole { |
| 101 | + <<enum>> |
| 102 | + +ADMIN |
| 103 | + +USER |
| 104 | + } |
| 105 | +
|
| 106 | + AuditableEntity <|-- Brand |
| 107 | + AuditableEntity <|-- Product |
| 108 | + AuditableEntity <|-- User |
| 109 | + Brand "1" *-- "N" Product |
| 110 | +``` |
| 111 | +<hr> |
| 112 | + |
| 113 | +### Como utilizar |
| 114 | +##### Requisitos para executar o projeto: |
| 115 | +- Docker e Docker Compose instalados na maquina. |
| 116 | + |
| 117 | +Em apenas 3 comandos simples o projeto esta esta disponível. |
| 118 | + |
| 119 | +- Clone o repositório: |
| 120 | +```bash |
| 121 | +git clone https://github.com/maxjdev/API_Catalogo-utilizando-JWT-MySQL-Docker.git |
| 122 | +``` |
| 123 | + |
| 124 | +- Navegue até o diretório do projeto: |
| 125 | +```bash |
| 126 | +cd API_Catalogo-utilizando-JWT-MySQL-Docker |
| 127 | +``` |
| 128 | + |
| 129 | +- Rode o projeto: |
| 130 | +```bash |
| 131 | +docker compose up --build |
| 132 | +``` |
| 133 | +<hr> |
| 134 | + |
| 135 | +#### Endpoints |
| 136 | +| Rotas | Visibilidade | Descrição | |
| 137 | +|---------------------------------------|---------------|------------------------------------------------------| |
| 138 | +| <kbd>POST /auth/*</kbd> | Público | Registro e login. | |
| 139 | +| <kbd>GET /api/v1/**</kbd> | Público | Busca por ID, por nome ou buscar todos com paginação | |
| 140 | +| <kbd>PUT/DELETE /api/admin/**</kbd> | Administrador | Torna entidade ACTIVE, INACTIVE ou faz "full delete" | |
| 141 | +| <kbd>POST/PUT/DELETE /api/v1/**</kbd> | Autenticado | Create, Update ou Delete | |
| 142 | +<hr> |
| 143 | + |
| 144 | +### Documentação |
| 145 | +Acesse a documentação interativa em <a href="http://localhost:9090/swagger-ui.html">http://localhost:9090/swagger-ui.html</a> |
| 146 | +<hr> |
| 147 | + |
| 148 | +### Contruibuição |
| 149 | +- Para contribuir, bifurque este repositório e envie suas alterações por meio de pull requests. |
| 150 | +- Para relatórios de bugs ou sugestões de melhorias, abra um problema na página do projeto. |
0 commit comments