Skip to content

Commit 0f1dc5c

Browse files
authored
Merge pull request #15 from Throyer/development
Migrate database to postgresql
2 parents 1b49db2 + e15a933 commit 0f1dc5c

File tree

14 files changed

+74
-66
lines changed

14 files changed

+74
-66
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
[In Portuguese](https://github.com/Throyer/springboot-api-crud/blob/master/assets/readme.md#spring-boot-api-crud)
1+
>[🇧🇷 In Portuguese](https://github.com/Throyer/springboot-api-crud/blob/master/assets/readme.md#spring-boot-api-crud)
2+
>
3+
> [🐬 MySQL/MariaDB implementation](https://github.com/Throyer/springboot-api-crud/tree/mariadb#readme)
24
35
<p align="center">
46
<a href="https://github.com/Throyer" target="blank"><img src="./assets/tecnologias.png" width="560" alt="Tecnologias" /></a>
@@ -39,7 +41,7 @@
3941

4042
## Requirements
4143

42-
- MariaDB: `^10.6.1`
44+
- Postgres: `^13`
4345
- Java: `^17`
4446
- Maven: `^3.8.4`
4547

@@ -132,6 +134,7 @@ Creating database migration files
132134
> ```shell
133135
> # to change the value of some environment variable at runtime
134136
> # on execution, just pass it as a parameter. (like --SERVER_PORT=80).
137+
135138
> $ java -jar api-3.0.4.RELEASE.jar --SERVER_PORT=80
136139
> ```
137140
>

assets/readme.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
[Em Inglês](../README.md)
2-
1+
> [🇺🇸 Em Inglês](../README.md)
2+
>
3+
> [🐬 Implementação com MySQL/MariaDB](https://github.com/Throyer/springboot-api-crud/tree/mariadb#readme)
34
<p align="center">
45
<a href="https://github.com/Throyer" target="blank"><img src="./tecnologias.png" width="560" alt="Tecnologias" /></a>
56
</p>
@@ -40,7 +41,7 @@
4041

4142
## Requisitos
4243

43-
- MariaDB: `^10.6.1`
44+
- Postgres: `^13`
4445
- Java: `^17`
4546
> recomendo a instalação do maven localmente, mas o projeto tem uma versão portatil nos arquivos [`mvnw`](./mvnw) e [`mvnw.cmd`](./mvnw.cmd)
4647
@@ -144,7 +145,7 @@ Criando arquivos de arquivos de migração
144145
> ```shell
145146
> # para mudar o valor de alguma variável de ambiente
146147
> # na execução basta passar ela como parâmetro. (como --SERVER_PORT=80 por exemplo).
147-
> $ java -jar api-3.0.3.RELEASE.jar --SERVER_PORT=80
148+
> $ java -jar api-4.0.0.RELEASE.jar --SERVER_PORT=80
148149
> ```
149150
>
150151
> > [Todas opções do `aplication.properties` **padrões** no Spring Boot](https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html).

assets/tecnologias.png

4.69 KB
Loading

docker-compose.yml

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,35 @@
11
version: '3'
22
services:
3-
4-
mariadb:
5-
image: mariadb:10.6.1
6-
container_name: mariadb-container
3+
4+
postgresql:
5+
image: postgres:13
6+
restart: unless-stopped
7+
container_name: postgres-container
8+
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
79
ports:
8-
- 3306:3306
10+
- 5432:5432
911
environment:
10-
MYSQL_ROOT_PASSWORD: "root"
11-
MYSQL_DATABASE: "common_app"
12+
- POSTGRES_USER=root
13+
- POSTGRES_PASSWORD=root
14+
- POSTGRES_DB=common_app
15+
- TZ=America/Sao_Paulo
16+
- PGTZ=America/Sao_Paulo
1217
volumes:
13-
- ./.volumes/database:/var/lib/mysql
18+
- ./.volumes/database:/var/lib/postgresql/data
1419

1520
api:
1621
image: maven:3.8.3
22+
restart: unless-stopped
23+
container_name: api-container
1724
links:
18-
- mariadb
25+
- postgresql
1926
depends_on:
20-
- mariadb
27+
- postgresql
2128
ports:
2229
- 8080:8080
2330
- 8000:8000
2431
environment:
25-
DB_URL: "mariadb:3306/common_app"
32+
DB_URL: "postgresql:5432/common_app"
2633
DB_USERNAME: "root"
2734
DB_PASSWORD: "root"
2835
volumes:

pom.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
</parent>
1010
<groupId>com.github.throyer.common.spring-boot</groupId>
1111
<artifactId>api</artifactId>
12-
<version>3.0.4</version>
13-
<name>Common API</name>
12+
<version>4.0.0</version>
13+
<name>CRUD API</name>
14+
1415
<description>Exemplo de api simples com Spring Boot</description>
1516

1617
<properties>
@@ -151,8 +152,8 @@
151152
<scope>runtime</scope>
152153
</dependency>
153154
<dependency>
154-
<groupId>mysql</groupId>
155-
<artifactId>mysql-connector-java</artifactId>
155+
<groupId>org.postgresql</groupId>
156+
<artifactId>postgresql</artifactId>
156157
<scope>runtime</scope>
157158
</dependency>
158159

src/main/java/com/github/throyer/common/springboot/configurations/SpringWebConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
@Configuration
1919
@OpenAPIDefinition(info = @Info(
2020
title = "Common CRUD API",
21-
version = "v3.0.4",
21+
version = "v4.0.0",
2222
description = """
2323
A complete user registry, with access permissions,
2424
JWT token, integration and unit tests, using

src/main/java/com/github/throyer/common/springboot/domain/repositories/RefreshTokenRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public interface RefreshTokenRepository extends JpaRepository<RefreshToken, Long
2020
UPDATE
2121
RefreshToken
2222
SET
23-
available = 0
23+
available = false
2424
WHERE
25-
user_id = ?1 AND available = 1
25+
user_id = ?1 AND available = true
2626
""")
2727
public void disableOldRefreshTokens(Long id);
2828

src/main/java/com/github/throyer/common/springboot/domain/repositories/UserRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface UserRepository extends SoftDeleteRepository<User> {
3030
WHERE id = ?1),
3131
email = NULL,
3232
deleted_at = CURRENT_TIMESTAMP,
33-
active = 0,
33+
active = false,
3434
deleted_by = ?#{principal?.id}
3535
WHERE id = ?1
3636
""")

src/main/java/com/github/throyer/common/springboot/domain/services/user/FindUserService.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,31 @@ public Page<UserDetails> findAll(
3535
Optional<Integer> size
3636
) {
3737
var sql = """
38+
with user_roles as (
39+
select
40+
ur.user_id, string_agg(r.initials, ',') roles
41+
from "role" r
42+
left join user_role ur on r.id = ur.role_id
43+
group by ur.user_id
44+
)
45+
3846
select
39-
u.id,
40-
u.name,
41-
u.email,
42-
(select
43-
GROUP_CONCAT(r.initials)
44-
from role r
45-
left join user_role ur on r.id = ur.role_id
46-
where ur.user_id = u.id) as roles
47+
u.id,
48+
u."name",
49+
u.email,
50+
urs.roles
4751
from
48-
user u
49-
where u.deleted_at is null
52+
"user" u
53+
left join user_roles as urs on urs.user_id = u.id
5054
""";
5155

5256
var query = manager.createNativeQuery(sql, Tuple.class);
5357
var count = ((BigInteger) manager.createNativeQuery("""
5458
select
55-
count(u.id)
59+
count(id)
5660
from
57-
user u
58-
where u.deleted_at is null
61+
"user"
62+
where deleted_at is null
5963
""").getSingleResult()).longValue();
6064

6165
var pageable = Pagination.of(page, size);

src/main/java/com/github/throyer/common/springboot/utils/Constants.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ public static class SECURITY {
99
public static final Integer DAY_MILLISECONDS = 86400;
1010

1111
public static final String ROLES_KEY_ON_JWT = "roles";
12-
public static final String INVALID_USERNAME = "Nome de usuário invalido.";
13-
public static final String CREATE_SESSION_ERROR_MESSAGE = "Senha ou Usuário inválidos.";
14-
public static final String REFRESH_SESSION_ERROR_MESSAGE = "Refresh token expirado ou inválido.";
12+
public static final String INVALID_USERNAME = "Invalid username.";
13+
public static final String CREATE_SESSION_ERROR_MESSAGE = "Invalid password or username.";
14+
public static final String REFRESH_SESSION_ERROR_MESSAGE = "Refresh token expired or invalid.";
1515

1616
public static final String USERNAME_PARAMETER = "email";
1717
public static final String PASSWORD_PARAMETER = "password";

src/main/java/db/migration/V1639098081278__UpdateTableRecovery.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ public void migrate(Context context) throws Exception {
1515
using(configuration)
1616
.alterTable("recovery")
1717
.addColumn("confirmed", BOOLEAN.nullable(true))
18-
.after("code")
19-
.execute();
18+
.execute();
2019

2120
using(configuration)
2221
.alterTable("recovery")
2322
.addColumn("used", BOOLEAN.nullable(true))
24-
.after("confirmed")
25-
.execute();
23+
.execute();
2624
});
2725
}
2826
}

src/main/resources/application.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ spring.jpa.show-sql=${DB_SHOW_SQL:true}
1313

1414
# Banco de dados
1515
spring.datasource.hikari.maximum-pool-size=${DB_MAX_CONNECTIONS:5}
16-
spring.datasource.url=jdbc:mysql://${DB_URL:localhost:3306/common_app}?useSSL=false&createDatabaseIfNotExist=true&serverTimezone=America/Sao_Paulo
16+
spring.datasource.url=jdbc:postgresql://${DB_URL:localhost:5432/common_app}
1717
spring.datasource.username=${DB_USERNAME:root}
1818
spring.datasource.password=${DB_PASSWORD:root}
1919
spring.jpa.hibernate.ddl-auto=none
20-
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
20+
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
2121
spring.jpa.properties.javax.persistence.validation.mode=none
22+
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
23+
spring.h2.console.enabled=false
2224
spring.jpa.open-in-view=false
2325

2426
# swagger
Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,24 @@
1-
-- variables
2-
SET @name = 'admin';
3-
SET @email = '[email protected]';
4-
SET @password = '$2a$10$QBuMJLbVmHzgvTwpxDynSetACNdCBjU5zgo.81RWEDzH46aUrgcNK';
5-
SET @adm = 'ADM';
6-
SET @user = 'USER';
7-
81
-- insert admin
9-
INSERT INTO user
10-
(name, email, password)
2+
INSERT INTO "user"
3+
("name", email, password)
114
VALUES
12-
(@name, @email, @password);
5+
('admin', 'admin@email.com', '$2a$10$QBuMJLbVmHzgvTwpxDynSetACNdCBjU5zgo.81RWEDzH46aUrgcNK');
136

147
-- insert roles
15-
INSERT INTO role
8+
INSERT INTO "role"
169
(name, initials, description, created_by)
1710
VALUES
18-
('ADMINISTRADOR', @adm, 'Administrador do sistema', (SELECT id FROM user WHERE email = @email)),
19-
('USER', @user, 'Usuário do sistema', (SELECT id FROM user WHERE email = @email));
11+
('ADMINISTRADOR', 'ADM', 'Administrador do sistema', (SELECT id FROM "user" WHERE email = 'admin@email.com')),
12+
('USER', 'USER', 'Usuário do sistema', (SELECT id FROM "user" WHERE email = 'admin@email.com'));
2013

2114
-- put roles into admin
2215
INSERT INTO user_role
2316
(user_id, role_id)
2417
VALUES
2518
(
26-
(SELECT id FROM user WHERE email = @email),
27-
(SELECT id FROM role WHERE initials = @adm)
19+
(SELECT id FROM "user" WHERE email = 'admin@email.com'),
20+
(SELECT id FROM "role" WHERE initials = 'ADM')
2821
),(
29-
(SELECT id FROM user WHERE email = @email),
30-
(SELECT id FROM role WHERE initials = @user)
22+
(SELECT id FROM "user" WHERE email = 'admin@email.com'),
23+
(SELECT id FROM "role" WHERE initials = 'USER')
3124
);

src/test/resources/application.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# configuracao do banco de testes em memoria H2.
22
spring.datasource.driver-class-name=org.h2.Driver
3-
spring.datasource.url=jdbc:h2:mem:test;mode=MYSQL;DATABASE_TO_UPPER=false;DB_CLOSE_DELAY=-1
3+
spring.datasource.url=jdbc:h2:mem:test;mode=PostgreSQL;DATABASE_TO_UPPER=false;DB_CLOSE_DELAY=-1
44
spring.datasource.username=sa
55
spring.datasource.password=sa
66
spring.jpa.properties.javax.persistence.validation.mode=none
@@ -19,7 +19,6 @@ springdoc.api-docs.path=/documentation/schemas
1919

2020
# configuracoes do spring JPA.
2121
spring.jpa.hibernate.ddl-auto=none
22-
spring.datasource.initialization-mode=always
2322

2423
# token
2524
token.expiration-in-hours=24

0 commit comments

Comments
 (0)