From c35c0780c378d7c22759050ad2004467fb13d03a Mon Sep 17 00:00:00 2001 From: jjimenez Date: Thu, 23 Oct 2025 12:39:17 +0200 Subject: [PATCH] =?UTF-8?q?a=C3=B1adido=20sistema=20de=20migraciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liquibase.properties | 14 + pom.xml | 19 + src/main/resources/application.properties | 10 + .../db/changelog/changesets/0001-baseline.yml | 1065 +++++++++++++++++ .../changesets/0002-create-pedidos.yml | 146 +++ src/main/resources/db/changelog/master.yml | 5 + 6 files changed, 1259 insertions(+) create mode 100644 liquibase.properties create mode 100644 src/main/resources/db/changelog/changesets/0001-baseline.yml create mode 100644 src/main/resources/db/changelog/changesets/0002-create-pedidos.yml create mode 100644 src/main/resources/db/changelog/master.yml diff --git a/liquibase.properties b/liquibase.properties new file mode 100644 index 0000000..55dc152 --- /dev/null +++ b/liquibase.properties @@ -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 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0224edd..2e5351a 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ 21 + 4.29.2 @@ -143,6 +144,13 @@ 1.0.10 + + + org.liquibase + liquibase-core + ${liquibase.version} + + @@ -151,6 +159,17 @@ org.springframework.boot spring-boot-maven-plugin + + + + org.liquibase + liquibase-maven-plugin + 4.29.2 + + + liquibase.properties + + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 66f623c..a58a4f4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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 diff --git a/src/main/resources/db/changelog/changesets/0001-baseline.yml b/src/main/resources/db/changelog/changesets/0001-baseline.yml new file mode 100644 index 0000000..eae860c --- /dev/null +++ b/src/main/resources/db/changelog/changesets/0001-baseline.yml @@ -0,0 +1,1065 @@ +databaseChangeLog: +- changeSet: + id: 1761213112413-1 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + name: cart_id + type: BIGINT + - column: + constraints: + nullable: false + name: presupuesto_id + type: BIGINT + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP + name: created_at + type: datetime + tableName: cart_items +- changeSet: + id: 1761213112413-2 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + name: user_id + type: BIGINT + - column: + constraints: + nullable: false + defaultValue: ACTIVE + name: status + type: ENUM('ACTIVE', 'LOCKED', 'ABANDONED') + - column: + constraints: + nullable: false + defaultValue: EUR + name: currency + type: VARCHAR(3) + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP + name: created_at + type: datetime + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP + name: updated_at + type: datetime + tableName: carts +- changeSet: + id: 1761213112413-3 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT UNSIGNED + - column: + constraints: + nullable: false + defaultValue: A5 + name: formato + type: ENUM('A5', '_17x24_', 'A4') + - column: + constraints: + nullable: false + defaultValue: medium + name: tamanio_letra + type: ENUM('small', 'medium', 'big') + - column: + constraints: + nullable: false + defaultValueNumeric: 2695 + name: matrices_pagina + type: INT + tableName: maquetacion_matrices_formato +- changeSet: + id: 1761213112413-4 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT UNSIGNED + - column: + name: keyword + type: VARCHAR(255) + - column: + constraints: + nullable: false + name: value + type: DOUBLE + tableName: maquetacion_precios +- changeSet: + id: 1761213112413-5 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + name: tamanio + type: ENUM('_50x140_', '_50x170_', '_50x210_') + - column: + constraints: + nullable: false + name: caras_impresion + type: ENUM('una_cara', 'dos_caras') + - column: + constraints: + nullable: false + name: papel + type: ENUM('cartulina_grafica', 'estucado_mate') + - column: + constraints: + nullable: false + name: gramaje + type: INT + - column: + constraints: + nullable: false + name: acabado + type: ENUM('ninguno', 'plastificado_brillo_1c', 'plastificado_brillo_2c', + 'plastificado_mate_1c', 'plastificado_mate_2c') + - column: + constraints: + nullable: false + name: unidades_min + type: INT + - column: + constraints: + nullable: false + name: precio_unidades_min + type: DOUBLE + - column: + constraints: + nullable: false + name: margen_unidades_min + type: INT + - column: + constraints: + nullable: false + name: unidades_max + type: INT + - column: + constraints: + nullable: false + name: precio_unidades_max + type: DOUBLE + - column: + constraints: + nullable: false + name: margen_unidades_max + type: INT + tableName: marcapaginas +- changeSet: + id: 1761213112413-6 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + name: importe_min + type: DECIMAL(12, 2) + - column: + constraints: + nullable: false + name: importe_max + type: DECIMAL(12, 2) + - column: + constraints: + nullable: false + name: margen_min + type: DECIMAL(6, 2) + - column: + constraints: + nullable: false + name: margen_max + type: DECIMAL(6, 2) + - column: + constraints: + nullable: false + defaultValueNumeric: 0 + name: deleted + type: BIT(1) + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP + name: created_at + type: datetime + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP + name: updated_at + type: datetime + - column: + name: deleted_at + type: datetime + tableName: margenes_presupuesto +- changeSet: + id: 1761213112413-7 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + name: created_at + type: datetime + - column: + constraints: + nullable: false + name: expires_at + type: datetime + - column: + name: request_ip + type: VARCHAR(64) + - column: + constraints: + nullable: false + name: token_hash + type: VARCHAR(128) + - column: + name: used_at + type: datetime + - column: + name: user_agent + type: VARCHAR(255) + - column: + constraints: + nullable: false + name: user_id + type: BIGINT + tableName: password_reset_tokens +- changeSet: + id: 1761213112413-8 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + constraints: + nullable: false + name: username + type: VARCHAR(64) + - column: + constraints: + nullable: false + primaryKey: true + name: series + type: VARCHAR(64) + - column: + constraints: + nullable: false + name: token + type: VARCHAR(64) + - column: + constraints: + nullable: false + name: last_used + type: timestamp + tableName: persistent_logins +- changeSet: + id: 1761213112413-9 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + name: titulo + type: VARCHAR(255) + - column: + name: autor + type: VARCHAR(255) + - column: + name: isbn + type: VARCHAR(255) + - column: + name: tirada1 + type: INT + - column: + name: tirada2 + type: INT + - column: + name: tirada3 + type: INT + - column: + name: tirada4 + type: INT + - column: + name: paginas_color + type: INT + - column: + name: paginas_negro + type: INT + - column: + name: alto + type: INT + - column: + name: ancho + type: INT + - column: + name: formato_personalizado + type: BIT(1) + - column: + name: paginas_color_total + type: INT + - column: + name: posicion_paginas_color + type: VARCHAR(255) + - column: + name: tipo_impresion + type: ENUM('color', 'colorhq', 'negro', 'negrohq') + - column: + name: gramaje_interior + type: INT + - column: + name: papel_interior_id + type: INT + - column: + name: tipo_encuadernacion + type: ENUM('cosido', 'espiral', 'fresado', 'grapado', 'wireo') + - column: + name: cabezada + type: VARCHAR(255) + - column: + name: cubierta_caras + type: INT + - column: + name: gramaje_cubierta + type: INT + - column: + name: gramaje_guardas + type: INT + - column: + name: guardas_impresas + type: INT + - column: + name: papel_cubierta_id + type: INT + - column: + name: papel_guardas_id + type: INT + - column: + name: solapas_cubierta + type: BIT(1) + - column: + name: tamanio_solapas_cubierta + type: INT + - column: + name: tipo_cubierta + type: ENUM('tapaBlanda', 'tapaDura', 'tapaDuraLomoRedondo') + - column: + name: acabado + type: INT + - column: + name: acabado_sobrecubierta + type: INT + - column: + name: faja + type: BIT(1) + - column: + name: gramaje_faja + type: INT + - column: + name: gramaje_sobrecubierta + type: INT + - column: + name: papel_faja_id + type: INT + - column: + name: papel_sobrecubierta_id + type: INT + - column: + name: sobrecubierta + type: BIT(1) + - column: + name: tamanio_solapas_faja + type: INT + - column: + name: tamanio_solapas_sobrecubierta + type: INT + - column: + name: acabado_faja + type: INT + - column: + name: alto_faja + type: INT + - column: + name: selected_tirada + type: INT + - column: + constraints: + nullable: false + defaultValue: publico + name: origen + type: VARCHAR(10) + - column: + constraints: + nullable: false + defaultValue: borrador + name: estado + type: VARCHAR(20) + - column: + name: user_id + type: BIGINT + - column: + name: session_id + type: VARCHAR(64) + - column: + name: visitor_id + type: VARCHAR(64) + - column: + name: ip_hash + type: VARCHAR(88) + - column: + name: ip_trunc + type: VARCHAR(64) + - column: + name: pais + type: VARCHAR(64) + - column: + name: region + type: VARCHAR(128) + - column: + name: ciudad + type: VARCHAR(128) + - column: + name: precio_unitario + type: DECIMAL(12, 4) + - column: + name: precio_total_tirada + type: DECIMAL(12, 2) + - column: + name: servicios_total + type: DECIMAL(12, 2) + - column: + name: base_imponible + type: DECIMAL(12, 2) + - column: + constraints: + nullable: false + defaultValue: peninsula + name: entrega_tipo + type: ENUM('peninsula', 'canarias', 'paises_ue') + - column: + name: iva_importe_4 + type: DECIMAL(12, 2) + - column: + name: iva_importe_21 + type: DECIMAL(12, 2) + - column: + name: total_con_iva + type: DECIMAL(12, 2) + - column: + name: precios_por_tirada_json + type: JSON + - column: + name: servicios_json + type: JSON + - column: + name: datos_maquetacion_json + type: JSON + - column: + name: datos_marcapaginas_json + type: JSON + - column: + name: pricing_snapshot + type: JSON + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP(3) + name: created_at + type: datetime + - column: + constraints: + nullable: false + defaultValueComputed: CURRENT_TIMESTAMP(3) on update CURRENT_TIMESTAMP(3) + name: updated_at + type: datetime + - column: + name: created_by + type: BIGINT + - column: + name: updated_by + type: BIGINT + - column: + constraints: + nullable: false + defaultValueNumeric: 0 + name: deleted + type: BIT(1) + - column: + name: deleted_at + type: datetime + - column: + name: deleted_by + type: BIGINT + - column: + constraints: + nullable: false + defaultValue: '1' + name: iva_reducido + type: BIT(1) + tableName: presupuesto +- changeSet: + id: 1761213112413-10 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + name: name + type: VARCHAR(255) + tableName: roles +- changeSet: + id: 1761213112413-11 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + unique: true + name: username + type: VARCHAR(190) + - column: + constraints: + nullable: false + name: fullname + type: VARCHAR(255) + - column: + constraints: + nullable: false + name: password + type: VARCHAR(255) + - column: + name: enabled + type: BIT(1) + - column: + constraints: + nullable: false + defaultValueNumeric: 0 + name: deleted + type: BIT(1) + - column: + name: deleted_at + type: timestamp + - column: + name: deleted_by + type: BIGINT + tableName: users +- changeSet: + id: 1761213112413-12 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + name: user_id + type: BIGINT + - column: + constraints: + nullable: false + name: role_id + type: BIGINT + - column: + constraints: + nullable: false + defaultValueNumeric: 0 + name: deleted + type: BIT(1) + - column: + name: deleted_at + type: timestamp + tableName: users_roles +- changeSet: + id: 1761213112413-13 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + unique: true + name: clave + type: VARCHAR(255) + - column: + constraints: + nullable: false + name: valor + type: VARCHAR(255) + tableName: variables +- changeSet: + id: 1761213112413-14 + author: jjimenez (generated) + changes: + - createTable: + columns: + - column: + autoIncrement: true + constraints: + nullable: false + primaryKey: true + name: id + type: BIGINT + - column: + constraints: + nullable: false + unique: true + name: token + type: VARCHAR(64) + - column: + constraints: + nullable: false + name: user_id + type: BIGINT + - column: + constraints: + nullable: false + name: created_at + type: datetime + - column: + constraints: + nullable: false + name: expires_at + type: datetime + - column: + name: used_at + type: datetime + tableName: verification_tokens +- changeSet: + id: 1761213112413-15 + author: jjimenez (generated) + changes: + - addUniqueConstraint: + columnNames: cart_id, presupuesto_id + constraintName: uq_cartitem_unique + tableName: cart_items +- changeSet: + id: 1761213112413-16 + author: jjimenez (generated) + changes: + - addUniqueConstraint: + columnNames: user_id, status + constraintName: uq_carts_user_active + tableName: carts +- changeSet: + id: 1761213112413-17 + author: jjimenez (generated) + changes: + - addUniqueConstraint: + columnNames: user_id, role_id, deleted + constraintName: ux_users_roles_active + tableName: users_roles +- changeSet: + id: 1761213112413-18 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: role_id + indexName: FKj6m8fwv7oqv74fcehir1a9ffy + tableName: users_roles +- changeSet: + id: 1761213112413-19 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: created_by + indexName: fk_presupuesto_created_by + tableName: presupuesto +- changeSet: + id: 1761213112413-20 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: deleted_by + indexName: fk_presupuesto_deleted_by + tableName: presupuesto +- changeSet: + id: 1761213112413-21 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: updated_by + indexName: fk_presupuesto_updated_by + tableName: presupuesto +- changeSet: + id: 1761213112413-22 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: user_id + indexName: fk_verification_tokens_user + tableName: verification_tokens +- changeSet: + id: 1761213112413-23 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: cart_id + indexName: idx_cart_items_cart + tableName: cart_items +- changeSet: + id: 1761213112413-24 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: presupuesto_id + indexName: idx_cart_items_pres + tableName: cart_items +- changeSet: + id: 1761213112413-25 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + defaultValueNumeric: !!float '0' + name: deleted + indexName: idx_presupuesto_deleted + tableName: presupuesto +- changeSet: + id: 1761213112413-26 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: pais + - column: + name: region + - column: + name: ciudad + indexName: idx_presupuesto_geo + tableName: presupuesto +- changeSet: + id: 1761213112413-27 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: origen + - column: + name: estado + indexName: idx_presupuesto_origen_estado + tableName: presupuesto +- changeSet: + id: 1761213112413-28 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: session_id + indexName: idx_presupuesto_session + tableName: presupuesto +- changeSet: + id: 1761213112413-29 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: user_id + indexName: idx_presupuesto_user + tableName: presupuesto +- changeSet: + id: 1761213112413-30 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: token_hash + indexName: idx_prt_token_hash + tableName: password_reset_tokens +- changeSet: + id: 1761213112413-31 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: user_id + indexName: idx_prt_user_id + tableName: password_reset_tokens +- changeSet: + id: 1761213112413-32 + author: jjimenez (generated) + changes: + - createIndex: + associatedWith: '' + columns: + - column: + name: deleted_by + indexName: idx_users_deleted_by + tableName: users +- changeSet: + id: 1761213112413-33 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: user_id + baseTableName: users_roles + constraintName: FK2o0jvgh89lemvvo17cbqvdxaa + deferrable: false + initiallyDeferred: false + onDelete: RESTRICT + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: users + validate: true +- changeSet: + id: 1761213112413-34 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: role_id + baseTableName: users_roles + constraintName: FKj6m8fwv7oqv74fcehir1a9ffy + deferrable: false + initiallyDeferred: false + onDelete: RESTRICT + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: roles + validate: true +- changeSet: + id: 1761213112413-35 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: cart_id + baseTableName: cart_items + constraintName: fk_cart_items_cart + deferrable: false + initiallyDeferred: false + onDelete: CASCADE + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: carts + validate: true +- changeSet: + id: 1761213112413-36 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: created_by + baseTableName: presupuesto + constraintName: fk_presupuesto_created_by + deferrable: false + initiallyDeferred: false + onDelete: RESTRICT + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: users + validate: true +- changeSet: + id: 1761213112413-37 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: deleted_by + baseTableName: presupuesto + constraintName: fk_presupuesto_deleted_by + deferrable: false + initiallyDeferred: false + onDelete: RESTRICT + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: users + validate: true +- changeSet: + id: 1761213112413-38 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: updated_by + baseTableName: presupuesto + constraintName: fk_presupuesto_updated_by + deferrable: false + initiallyDeferred: false + onDelete: RESTRICT + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: users + validate: true +- changeSet: + id: 1761213112413-39 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: user_id + baseTableName: presupuesto + constraintName: fk_presupuesto_user + deferrable: false + initiallyDeferred: false + onDelete: RESTRICT + onUpdate: RESTRICT + referencedColumnNames: id + referencedTableName: users + validate: true +- changeSet: + id: 1761213112413-40 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: deleted_by + baseTableName: users + constraintName: fk_users_deleted_by + deferrable: false + initiallyDeferred: false + onDelete: SET NULL + onUpdate: CASCADE + referencedColumnNames: id + referencedTableName: users + validate: true +- changeSet: + id: 1761213112413-41 + author: jjimenez (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: user_id + baseTableName: verification_tokens + constraintName: fk_verification_tokens_user + deferrable: false + initiallyDeferred: false + onDelete: CASCADE + onUpdate: CASCADE + referencedColumnNames: id + referencedTableName: users + validate: true + diff --git a/src/main/resources/db/changelog/changesets/0002-create-pedidos.yml b/src/main/resources/db/changelog/changesets/0002-create-pedidos.yml new file mode 100644 index 0000000..7a6eee3 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/0002-create-pedidos.yml @@ -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 diff --git a/src/main/resources/db/changelog/master.yml b/src/main/resources/db/changelog/master.yml new file mode 100644 index 0000000..d57981d --- /dev/null +++ b/src/main/resources/db/changelog/master.yml @@ -0,0 +1,5 @@ +databaseChangeLog: + - include: + file: db/changelog/changesets/0001-baseline.yml + - include: + file: db/changelog/changesets/0002-create-pedidos.yml \ No newline at end of file