Mezlca de migraciones mas recientes
This commit is contained in:
@@ -0,0 +1,266 @@
|
||||
"""Add surrogate int IDs for transport catalogs and invoice logistics.
|
||||
|
||||
Single consolidated migration for:
|
||||
- transporter_id, trailer_id, vehicle_id, driver_id
|
||||
- carrier_int_id, transport_int_id, trailer_int_id in invoice_logistics
|
||||
- backfill mappings from existing string keys/codes
|
||||
- FK constraints for the new invoice_logistics int references
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
revision: str = "ca7d3c4e8b2a"
|
||||
down_revision: Union[str, Sequence[str], None] = "c1a2b3d4e5f6"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# transporter
|
||||
op.add_column("transporter", sa.Column("transporter_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
op.execute(
|
||||
"""
|
||||
WITH s AS (
|
||||
SELECT transporter_key, ROW_NUMBER() OVER (ORDER BY transporter_key) AS new_id
|
||||
FROM a76.transporter
|
||||
)
|
||||
UPDATE a76.transporter t
|
||||
SET transporter_id = s.new_id
|
||||
FROM s
|
||||
WHERE t.transporter_key = s.transporter_key
|
||||
"""
|
||||
)
|
||||
op.execute("CREATE SEQUENCE IF NOT EXISTS a76.transporter_transporter_id_seq")
|
||||
op.execute(
|
||||
"""
|
||||
SELECT setval(
|
||||
'a76.transporter_transporter_id_seq',
|
||||
COALESCE((SELECT MAX(transporter_id) FROM a76.transporter), 0) + 1,
|
||||
false
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
ALTER TABLE a76.transporter
|
||||
ALTER COLUMN transporter_id
|
||||
SET DEFAULT nextval('a76.transporter_transporter_id_seq')
|
||||
"""
|
||||
)
|
||||
op.execute("ALTER TABLE a76.transporter ALTER COLUMN transporter_id SET NOT NULL")
|
||||
op.create_unique_constraint("uq_a76_transporter_transporter_id", "transporter", ["transporter_id"], schema="a76")
|
||||
|
||||
# trailer
|
||||
op.add_column("trailer", sa.Column("trailer_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
op.execute(
|
||||
"""
|
||||
WITH s AS (
|
||||
SELECT trailer_number, ROW_NUMBER() OVER (ORDER BY trailer_number) AS new_id
|
||||
FROM a76.trailer
|
||||
)
|
||||
UPDATE a76.trailer t
|
||||
SET trailer_id = s.new_id
|
||||
FROM s
|
||||
WHERE t.trailer_number = s.trailer_number
|
||||
"""
|
||||
)
|
||||
op.execute("CREATE SEQUENCE IF NOT EXISTS a76.trailer_trailer_id_seq")
|
||||
op.execute(
|
||||
"""
|
||||
SELECT setval(
|
||||
'a76.trailer_trailer_id_seq',
|
||||
COALESCE((SELECT MAX(trailer_id) FROM a76.trailer), 0) + 1,
|
||||
false
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
ALTER TABLE a76.trailer
|
||||
ALTER COLUMN trailer_id
|
||||
SET DEFAULT nextval('a76.trailer_trailer_id_seq')
|
||||
"""
|
||||
)
|
||||
op.execute("ALTER TABLE a76.trailer ALTER COLUMN trailer_id SET NOT NULL")
|
||||
op.create_unique_constraint("uq_a76_trailer_trailer_id", "trailer", ["trailer_id"], schema="a76")
|
||||
|
||||
# vehicle
|
||||
op.add_column("vehicle", sa.Column("vehicle_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
op.execute(
|
||||
"""
|
||||
WITH s AS (
|
||||
SELECT vehicle_key, ROW_NUMBER() OVER (ORDER BY vehicle_key) AS new_id
|
||||
FROM a76.vehicle
|
||||
)
|
||||
UPDATE a76.vehicle v
|
||||
SET vehicle_id = s.new_id
|
||||
FROM s
|
||||
WHERE v.vehicle_key = s.vehicle_key
|
||||
"""
|
||||
)
|
||||
op.execute("CREATE SEQUENCE IF NOT EXISTS a76.vehicle_vehicle_id_seq")
|
||||
op.execute(
|
||||
"""
|
||||
SELECT setval(
|
||||
'a76.vehicle_vehicle_id_seq',
|
||||
COALESCE((SELECT MAX(vehicle_id) FROM a76.vehicle), 0) + 1,
|
||||
false
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
ALTER TABLE a76.vehicle
|
||||
ALTER COLUMN vehicle_id
|
||||
SET DEFAULT nextval('a76.vehicle_vehicle_id_seq')
|
||||
"""
|
||||
)
|
||||
op.execute("ALTER TABLE a76.vehicle ALTER COLUMN vehicle_id SET NOT NULL")
|
||||
op.create_unique_constraint("uq_a76_vehicle_vehicle_id", "vehicle", ["vehicle_id"], schema="a76")
|
||||
|
||||
# driver
|
||||
op.add_column("driver", sa.Column("driver_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
op.execute(
|
||||
"""
|
||||
WITH s AS (
|
||||
SELECT transporter_key, line, ROW_NUMBER() OVER (ORDER BY transporter_key, line) AS new_id
|
||||
FROM a76.driver
|
||||
)
|
||||
UPDATE a76.driver d
|
||||
SET driver_id = s.new_id
|
||||
FROM s
|
||||
WHERE d.transporter_key = s.transporter_key
|
||||
AND d.line = s.line
|
||||
"""
|
||||
)
|
||||
op.execute("CREATE SEQUENCE IF NOT EXISTS a76.driver_driver_id_seq")
|
||||
op.execute(
|
||||
"""
|
||||
SELECT setval(
|
||||
'a76.driver_driver_id_seq',
|
||||
COALESCE((SELECT MAX(driver_id) FROM a76.driver), 0) + 1,
|
||||
false
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
ALTER TABLE a76.driver
|
||||
ALTER COLUMN driver_id
|
||||
SET DEFAULT nextval('a76.driver_driver_id_seq')
|
||||
"""
|
||||
)
|
||||
op.execute("ALTER TABLE a76.driver ALTER COLUMN driver_id SET NOT NULL")
|
||||
op.create_unique_constraint("uq_a76_driver_driver_id", "driver", ["driver_id"], schema="a76")
|
||||
|
||||
# invoice_logistics int refs
|
||||
op.add_column("invoice_logistics", sa.Column("carrier_int_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
op.add_column("invoice_logistics", sa.Column("transport_int_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
op.add_column("invoice_logistics", sa.Column("trailer_int_id", sa.BigInteger(), nullable=True), schema="a76")
|
||||
|
||||
# ensure referenced codes exist
|
||||
op.execute(
|
||||
"""
|
||||
INSERT INTO a76.transporter (transporter_key, tenant_id, company_id)
|
||||
SELECT DISTINCT ON (il.carrier_id) il.carrier_id, il.tenant_id, il.company_id
|
||||
FROM a76.invoice_logistics il
|
||||
WHERE il.carrier_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM a76.transporter t WHERE t.transporter_key = il.carrier_id
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
INSERT INTO a76.vehicle (vehicle_key, tenant_id, company_id)
|
||||
SELECT DISTINCT ON (il.transport_id) il.transport_id, il.tenant_id, il.company_id
|
||||
FROM a76.invoice_logistics il
|
||||
WHERE il.transport_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM a76.vehicle v WHERE v.vehicle_key = il.transport_id
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
INSERT INTO a76.trailer (trailer_number, tenant_id, company_id)
|
||||
SELECT DISTINCT ON (il.trailer_num) il.trailer_num, il.tenant_id, il.company_id
|
||||
FROM a76.invoice_logistics il
|
||||
WHERE il.trailer_num IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM a76.trailer tr WHERE tr.trailer_number = il.trailer_num
|
||||
)
|
||||
"""
|
||||
)
|
||||
|
||||
# backfill int refs
|
||||
op.execute(
|
||||
"""
|
||||
UPDATE a76.invoice_logistics il
|
||||
SET carrier_int_id = t.transporter_id
|
||||
FROM a76.transporter t
|
||||
WHERE il.carrier_id IS NOT NULL
|
||||
AND il.carrier_id = t.transporter_key
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
UPDATE a76.invoice_logistics il
|
||||
SET transport_int_id = v.vehicle_id
|
||||
FROM a76.vehicle v
|
||||
WHERE il.transport_id IS NOT NULL
|
||||
AND il.transport_id = v.vehicle_key
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
UPDATE a76.invoice_logistics il
|
||||
SET trailer_int_id = tr.trailer_id
|
||||
FROM a76.trailer tr
|
||||
WHERE il.trailer_num IS NOT NULL
|
||||
AND il.trailer_num = tr.trailer_number
|
||||
"""
|
||||
)
|
||||
|
||||
# FK constraints
|
||||
op.create_foreign_key(
|
||||
"fk_a76_invoice_logistics_carrier_int_id_transporter_id",
|
||||
"invoice_logistics",
|
||||
"transporter",
|
||||
["carrier_int_id"],
|
||||
["transporter_id"],
|
||||
source_schema="a76",
|
||||
referent_schema="a76",
|
||||
ondelete="SET NULL",
|
||||
)
|
||||
op.create_foreign_key(
|
||||
"fk_a76_invoice_logistics_transport_int_id_vehicle_id",
|
||||
"invoice_logistics",
|
||||
"vehicle",
|
||||
["transport_int_id"],
|
||||
["vehicle_id"],
|
||||
source_schema="a76",
|
||||
referent_schema="a76",
|
||||
ondelete="SET NULL",
|
||||
)
|
||||
op.create_foreign_key(
|
||||
"fk_a76_invoice_logistics_trailer_int_id_trailer_id",
|
||||
"invoice_logistics",
|
||||
"trailer",
|
||||
["trailer_int_id"],
|
||||
["trailer_id"],
|
||||
source_schema="a76",
|
||||
referent_schema="a76",
|
||||
ondelete="SET NULL",
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
pass
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
"""extend company.logo for S3 keys
|
||||
|
||||
Revision ID: d4e5f6a7b8c9
|
||||
Revises: ca7d3c4e8b2a
|
||||
Create Date: 2026-04-02
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
revision: str = "d4e5f6a7b8c9"
|
||||
down_revision: Union[str, None] = "ca7d3c4e8b2a"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.alter_column(
|
||||
"company",
|
||||
"logo",
|
||||
existing_type=sa.String(length=255),
|
||||
type_=sa.String(length=512),
|
||||
existing_nullable=True,
|
||||
schema="a76",
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.alter_column(
|
||||
"company",
|
||||
"logo",
|
||||
existing_type=sa.String(length=512),
|
||||
type_=sa.String(length=255),
|
||||
existing_nullable=True,
|
||||
schema="a76",
|
||||
)
|
||||
@@ -0,0 +1,28 @@
|
||||
"""merge multiple heads
|
||||
|
||||
Revision ID: ed63109b1ac8
|
||||
Revises: d4e5f6a7b8c9, e76_app_settings
|
||||
Create Date: 2026-04-07 21:10:25.498270
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'ed63109b1ac8'
|
||||
down_revision: Union[str, Sequence[str], None] = ('d4e5f6a7b8c9', 'e76_app_settings')
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Upgrade schema."""
|
||||
pass
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Downgrade schema."""
|
||||
pass
|
||||
Reference in New Issue
Block a user