Skip to content

Commit 06b0bc1

Browse files
committed
Merge branch 'general-updates'
2 parents b6faf63 + 053846f commit 06b0bc1

File tree

5 files changed

+66
-59
lines changed

5 files changed

+66
-59
lines changed

README.md

+53-8
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
### Descrição
1616

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.
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 automatizadas no GitHub Actions. É uma solução moderna, escalável e fácil de integrar.
1818

1919
### Tecnologias usadas
2020
- **Java 17:** Linguagem de programação para o desenvolvimento da aplicação.
@@ -37,13 +37,13 @@ O API Catálogo é uma aplicação backend em Java 17 com Spring Boot, projetada
3737

3838
### Imagens
3939

40-
- Registro
40+
- POST para realizar registro de usuário
4141
![Login](img/register.png)
4242

43-
- Login
43+
- POST para realizar login/autenticar
4444
![Login](img/login.png)
4545

46-
- Exemplo de requisição publica(que não necessita de autenticação/autorização)
46+
- GET para listar produtos com paginação
4747
![Login](img/getAll-products.png)
4848
<hr>
4949

@@ -114,7 +114,7 @@ classDiagram
114114
##### Requisitos para executar o projeto:
115115
- Docker e Docker Compose instalados na maquina.
116116

117-
Em apenas 3 comandos simples o projeto esta esta disponível.
117+
Em apenas 3 comandos simples a API estará disponível para consumo.
118118

119119
- Clone o repositório:
120120
```bash
@@ -132,7 +132,7 @@ docker compose up --build
132132
```
133133
<hr>
134134

135-
#### Endpoints
135+
### Endpoints
136136
| Rotas | Visibilidade | Descrição |
137137
|---------------------------------------|---------------|------------------------------------------------------|
138138
| <kbd>POST /auth/*</kbd> | Público | Registro e login. |
@@ -145,6 +145,51 @@ docker compose up --build
145145
Acesse a documentação interativa em <a href="http://localhost:9090/swagger-ui.html">http://localhost:9090/swagger-ui.html</a>
146146
<hr>
147147

148+
### Entidades pré-persistidas
149+
150+
#### Via Flyway:
151+
```sql
152+
INSERT INTO tb_brand (name, status, created_at, updated_at)
153+
VALUES
154+
('Taurus', 'ACTIVE', NOW(), NOW()),
155+
('Imbel', 'ACTIVE', NOW(), NOW()),
156+
('Glock', 'ACTIVE', NOW(), NOW()),
157+
('Colt', 'ACTIVE', NOW(), NOW()),
158+
('Sig Sauer', 'ACTIVE', NOW(), NOW()),
159+
('Beretta', 'ACTIVE', NOW(), NOW()),
160+
('Smith & Wesson', 'ACTIVE', NOW(), NOW()),
161+
('Heckler & Koch', 'ACTIVE', NOW(), NOW());
162+
```
163+
```sql
164+
INSERT INTO tb_product (name, brand_id, description, price, stock_quantity, status, created_at, updated_at)
165+
VALUES
166+
('Pistola G2C', 1, 'Pistola compacta e leve, ideal para porte velado.', 2500.00, 15, 'ACTIVE', NOW(), NOW()),
167+
('Pistola TS9', 1, 'Pistola para uso tático e esportivo, com alta precisão.', 3200.00, 10, 'ACTIVE', NOW(), NOW()),
168+
('Carabina IA2', 2, 'Carabina de alta resistência, utilizada por forças armadas.', 4500.00, 8, 'ACTIVE', NOW(), NOW()),
169+
('Pistola .40', 2, 'Pistola popular para uso policial, confiável e durável.', 2800.00, 20, 'ACTIVE', NOW(), NOW()),
170+
('Glock 17', 3, 'Modelo clássico da Glock, confiável e amplamente utilizado.', 3000.00, 25, 'ACTIVE', NOW(), NOW()),
171+
('Glock 19', 3, 'Modelo compacto da Glock, ideal para porte velado.', 3100.00, 18, 'ACTIVE', NOW(), NOW()),
172+
('Colt M1911', 4, 'Pistola lendária com mais de um século de uso militar.', 3500.00, 12, 'ACTIVE', NOW(), NOW()),
173+
('Colt Python', 4, 'Revólver de alta precisão e construção robusta.', 3700.00, 5, 'ACTIVE', NOW(), NOW()),
174+
('Sig Sauer P320', 5, 'Pistola modular e confiável, usada por forças militares.', 3300.00, 10, 'INACTIVE', NOW(), NOW()),
175+
('Sig Sauer P226', 5, 'Pistola clássica de serviço, com alta precisão.', 3400.00, 6, 'DELETED', NOW(), NOW()),
176+
('Beretta 92FS', 6, 'Pistola de alto desempenho com design clássico.', 3100.00, 12, 'INACTIVE', NOW(), NOW()),
177+
('Beretta PX4 Storm', 6, 'Pistola compacta, ideal para defesa pessoal.', 2900.00, 5, 'DELETED', NOW(), NOW()),
178+
('S&W M&P9', 7, 'Pistola de polímero com ergonomia avançada.', 3200.00, 9, 'INACTIVE', NOW(), NOW()),
179+
('S&W 686', 7, 'Revólver robusto, projetado para alto desempenho.', 3600.00, 3, 'DELETED', NOW(), NOW()),
180+
('HK USP', 8, 'Pistola versátil, projetada para uso militar e policial.', 3500.00, 8, 'INACTIVE', NOW(), NOW()),
181+
('HK VP9', 8, 'Pistola leve com sistema de disparo inovador.', 3400.00, 4, 'DELETED', NOW(), NOW());
182+
```
183+
#### Via CommandLineRunner:
184+
```java
185+
@Override
186+
public void run(String... args) throws Exception {
187+
authenticationService.register(new RegisterDTO("useradmin", "passwordadmin", UserRole.ADMIN));
188+
authenticationService.register(new RegisterDTO("userstandard", "passwordstandard", UserRole.USER));
189+
}
190+
```
191+
<hr>
192+
148193
### 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.
194+
- Para contribuir, faça um fork deste repositório e envie suas alterações por meio de pull requests.
195+
- Para relatórios de bugs ou sugestões de melhorias, abra uma issue na página do projeto.

docker-compose.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ services:
4747
#
4848
# phpmyadmin:
4949
# depends_on:
50-
# - 'mysql'
50+
# - 'db'
5151
# image: phpmyadmin/phpmyadmin
5252
# restart: always
5353
# ports:

src/main/java/br/com/catalog/models/abstract_entity/AuditableEntity.java

-3
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,16 @@ protected void onUpdate() {
3535

3636
public void activate() {
3737
this.status = Status.ACTIVE;
38-
this.updatedAt = LocalDateTime.now();
3938
onStatusChange(Status.ACTIVE);
4039
}
4140

4241
public void disable() {
4342
this.status = Status.INACTIVE;
44-
this.updatedAt = LocalDateTime.now();
4543
onStatusChange(Status.INACTIVE);
4644
}
4745

4846
public void delete() {
4947
this.status = Status.DELETED;
50-
this.updatedAt = LocalDateTime.now();
5148
onStatusChange(Status.DELETED);
5249
}
5350

src/main/java/br/com/catalog/services/impls/AuthenticationServiceImpl.java

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import br.com.catalog.services.impls.dtos.AuthenticationDTO;
1010
import br.com.catalog.services.impls.dtos.RegisterDTO;
1111
import br.com.catalog.services.impls.dtos.UserResponseDTO;
12+
import jakarta.transaction.Transactional;
1213
import org.springframework.security.authentication.AuthenticationManager;
1314
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1415
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -33,13 +34,15 @@ public AuthenticationServiceImpl(AuthenticationManager authenticationManager,
3334
this.userToResponse = userToResponse;
3435
}
3536

37+
@Transactional
3638
@Override
3739
public String login(AuthenticationDTO dto){
3840
var usernamePassword = new UsernamePasswordAuthenticationToken(dto.login(), dto.password());
3941
var auth = authenticationManager.authenticate(usernamePassword);
4042
return tokenService.generateToken((User) auth.getPrincipal());
4143
}
4244

45+
@Transactional
4346
@Override
4447
public UserResponseDTO register(RegisterDTO dto){
4548
if (userRepository.existsByLogin(dto.login()))
+9-47
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,13 @@
1-
#spring:
2-
# h2:
3-
# console:
4-
# enabled: true
5-
# path: /h2-console
6-
# datasource:
7-
# driverClassName: org.h2.Driver
8-
# url: jdbc:h2:mem:testdb
9-
# username: sa
10-
# password:
11-
# jpa:
12-
# database-platform: org.hibernate.dialect.H2Dialect
13-
# hibernate:
14-
# ddl-auto: update
15-
# show-sql: true
16-
# format-sql: true
17-
# flyway:
18-
# enabled: true
19-
# locations: classpath:db/migration
20-
# baselineOnMigrate: true
21-
#
22-
#logging:
23-
# level:
24-
# root: INFO
25-
# org.springframework.web: INFO
26-
# org.hibernate: INFO
27-
28-
server:
29-
port: 8080
30-
311
spring:
32-
application:
33-
name: catalog
2+
h2:
3+
console:
4+
enabled: true
5+
path: /h2-console
346
datasource:
35-
driver-class-name: com.mysql.cj.jdbc.Driver
36-
url: jdbc:mysql://localhost:3306/catalog
37-
username: cataloguser
38-
password: catalogpass
7+
driverClassName: org.h2.Driver
8+
url: jdbc:h2:mem:testdb
9+
username: sa
10+
password:
3911
jpa:
4012
database-platform: org.hibernate.dialect.MySQLDialect
4113
show-sql: true
@@ -44,25 +16,15 @@ spring:
4416
format_sql: true
4517
hibernate:
4618
ddl-auto: validate
47-
h2:
48-
console:
49-
enabled: false
5019
flyway:
5120
enabled: true
5221
locations: classpath:db/migration
5322
validate-on-migrate: true
5423

55-
api:
56-
security:
57-
token:
58-
secret: Zk5osQLbp;B$7XP)
59-
6024
springdoc:
61-
api-docs:
62-
path: /api-docs
6325
swagger-ui:
6426
path: /swagger-ui.html
6527

6628
logging:
6729
level:
68-
root: INFO
30+
root: DEBUG

0 commit comments

Comments
 (0)