Mezlca de migraciones mas recientes

This commit is contained in:
2026-04-07 16:13:01 -05:00
120 changed files with 5446 additions and 1215 deletions

View File

@@ -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

View File

@@ -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",
)

View File

@@ -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