añadido sistema de migraciones

This commit is contained in:
2025-10-23 12:39:17 +02:00
parent dbd3687b34
commit c35c0780c3
6 changed files with 1259 additions and 0 deletions

14
liquibase.properties Normal file
View File

@ -0,0 +1,14 @@
# liquibase.properties (RAÍZ DEL PROYECTO)
classpath=target/classes
# Conexión (ajusta DB, user y pass)
url=jdbc:mysql://localhost:3309/imprimelibros
#url=jdbc:mysql://localhost:3306/imprimelibros?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
username=imprimelibros_user
password=om91irrDctd
# Archivo que se generará con el snapshot (DEBE EXISTIR LA CARPETA)
#outputChangeLogFile=src/main/resources/db/changelog/changesets/0001-baseline.yml
# Para LEER los cambios en los demás comandos (sync, update, rollback…)
changeLogFile=src/main/resources/db/changelog/master.yml

19
pom.xml
View File

@ -29,6 +29,7 @@
</scm>
<properties>
<java.version>21</java.version>
<liquibase.version>4.29.2</liquibase.version>
</properties>
<dependencies>
<dependency>
@ -143,6 +144,13 @@
<version>1.0.10</version>
</dependency>
<!-- Migraciones -->
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase.version}</version>
</dependency>
</dependencies>
<build>
@ -151,6 +159,17 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- (Migraciones) Plugin Maven para generar/ejecutar changelogs -->
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>4.29.2</version>
<configuration>
<!-- Usa variables de Maven/CI o un liquibase.properties -->
<propertyFile>liquibase.properties</propertyFile>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -92,3 +92,13 @@ spring.jpa.properties.hibernate.jdbc.time_zone=UTC
# PDF Templates
imprimelibros.pdf.templates.PRESUPUESTO_presupuesto-a4=imprimelibros/pdf/presupuesto-a4
imprimelibros.pdf.templates.FACTURA_factura-a4=imprimelibros/pdf/factura-a4
# Liquibase
spring.liquibase.enabled=true
spring.liquibase.change-log=classpath:db/changelog/master.yml
# Si quieres especificar el schema por defecto:
# spring.liquibase.default-schema=imprimelibros
# Si necesitas parámetros de conexión distintos a los de Spring Data (no suele hacer falta):
# spring.liquibase.url=jdbc:mysql://localhost:3306/imprimelibros
# spring.liquibase.user=tu_user
# spring.liquibase.password=tu_pass

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,146 @@
databaseChangeLog:
- changeSet:
id: 0002-create-pedidos
author: jjo
preConditions:
- not:
tableExists:
tableName: pedidos
changes:
- createTable:
tableName: pedidos
columns:
- column:
name: id
type: BIGINT AUTO_INCREMENT
constraints:
primaryKey: true
primaryKeyName: pk_pedidos
- column:
name: presupuesto_id
type: BIGINT
constraints:
nullable: false
- column:
name: created_by
type: BIGINT
constraints:
nullable: true
- column:
name: updated_by
type: BIGINT
constraints:
nullable: true
- column:
name: deleted_by
type: BIGINT
constraints:
nullable: true
- column:
name: deleted
type: TINYINT(1)
defaultValueNumeric: 0
constraints:
nullable: false
- column:
name: created_at
type: TIMESTAMP
defaultValueComputed: CURRENT_TIMESTAMP
constraints:
nullable: false
- column:
name: updated_at
type: TIMESTAMP
defaultValueComputed: CURRENT_TIMESTAMP
constraints:
nullable: false
- column:
name: deleted_at
type: TIMESTAMP
constraints:
nullable: true
# Forzamos ON UPDATE para updated_at (MySQL/MariaDB)
- sql:
dbms: mysql
splitStatements: false
sql: |
ALTER TABLE pedidos
MODIFY COLUMN updated_at TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;
# Índices
- createIndex:
tableName: pedidos
indexName: idx_pedidos_presupuesto
columns:
- column:
name: presupuesto_id
- createIndex:
tableName: pedidos
indexName: idx_pedidos_deleted
columns:
- column:
name: deleted
# Claves foráneas (ajusta nombres si difieren)
- addForeignKeyConstraint:
baseTableName: pedidos
baseColumnNames: presupuesto_id
constraintName: fk_pedidos_presupuesto
referencedTableName: presupuesto
referencedColumnNames: id
onDelete: RESTRICT
onUpdate: RESTRICT
- addForeignKeyConstraint:
baseTableName: pedidos
baseColumnNames: created_by
constraintName: fk_pedidos_created_by
referencedTableName: users
referencedColumnNames: id
onDelete: SET NULL
onUpdate: RESTRICT
- addForeignKeyConstraint:
baseTableName: pedidos
baseColumnNames: updated_by
constraintName: fk_pedidos_updated_by
referencedTableName: users
referencedColumnNames: id
onDelete: SET NULL
onUpdate: RESTRICT
- addForeignKeyConstraint:
baseTableName: pedidos
baseColumnNames: deleted_by
constraintName: fk_pedidos_deleted_by
referencedTableName: users
referencedColumnNames: id
onDelete: SET NULL
onUpdate: RESTRICT
rollback:
- dropForeignKeyConstraint:
baseTableName: pedidos
constraintName: fk_pedidos_deleted_by
- dropForeignKeyConstraint:
baseTableName: pedidos
constraintName: fk_pedidos_updated_by
- dropForeignKeyConstraint:
baseTableName: pedidos
constraintName: fk_pedidos_created_by
- dropForeignKeyConstraint:
baseTableName: pedidos
constraintName: fk_pedidos_presupuesto
- dropIndex:
tableName: pedidos
indexName: idx_pedidos_deleted
- dropIndex:
tableName: pedidos
indexName: idx_pedidos_presupuesto
- dropTable:
tableName: pedidos

View File

@ -0,0 +1,5 @@
databaseChangeLog:
- include:
file: db/changelog/changesets/0001-baseline.yml
- include:
file: db/changelog/changesets/0002-create-pedidos.yml