Skip to content

Commit b6faf63

Browse files
committed
Merge branch 'readme'
2 parents adf9270 + 00aaf5c commit b6faf63

File tree

4 files changed

+150
-1
lines changed

4 files changed

+150
-1
lines changed

README.md

+150-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,150 @@
1-
# API_Catalogo-utilizando-JWT-MySQL-Docker
1+
<div align="center">
2+
3+
# API-Catalogo utilizando JWT, MySQL e Docker
4+
5+
![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=openjdk&logoColor=white)
6+
![Spring](https://img.shields.io/badge/spring-%236DB33F.svg?style=for-the-badge&logo=spring&logoColor=white)
7+
![JWT](https://img.shields.io/badge/JWT-black?style=for-the-badge&logo=JSON%20web%20tokens)
8+
![Swagger](https://img.shields.io/badge/-Swagger-%23Clojure?style=for-the-badge&logo=swagger&logoColor=white)<br>
9+
![Apache Maven](https://img.shields.io/badge/Apache%20Maven-C71A36?style=for-the-badge&logo=Apache%20Maven&logoColor=white)
10+
![MySQL](https://img.shields.io/badge/mysql-4479A1.svg?style=for-the-badge&logo=mysql&logoColor=white)
11+
![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)
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+
![Login](img/register.png)
42+
43+
- Login
44+
![Login](img/login.png)
45+
46+
- Exemplo de requisição publica(que não necessita de autenticação/autorização)
47+
![Login](img/getAll-products.png)
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.

img/getAll-products.png

93 KB
Loading

img/login.png

73 KB
Loading

img/register.png

65.9 KB
Loading

0 commit comments

Comments
 (0)