From bf7b8ac427e23ba5644292a5829bd217c82ec2a0 Mon Sep 17 00:00:00 2001 From: Jonas Linter <{email_address}> Date: Wed, 3 Dec 2025 12:27:17 +0100 Subject: [PATCH] Readded fk constraint for conversion_guests --- ...4f_add_conversions_conversion_guests_fk.py | 32 +++++++++++++++++++ src/alpine_bits_python/db.py | 7 ++-- 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 alembic/versions/2025_12_03_1225-263bed87114f_add_conversions_conversion_guests_fk.py diff --git a/alembic/versions/2025_12_03_1225-263bed87114f_add_conversions_conversion_guests_fk.py b/alembic/versions/2025_12_03_1225-263bed87114f_add_conversions_conversion_guests_fk.py new file mode 100644 index 0000000..80e16c0 --- /dev/null +++ b/alembic/versions/2025_12_03_1225-263bed87114f_add_conversions_conversion_guests_fk.py @@ -0,0 +1,32 @@ +"""add conversions→conversion_guests fk + +Revision ID: 263bed87114f +Revises: 3147e421bc47 +Create Date: 2025-12-03 12:25:12.820232 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '263bed87114f' +down_revision: Union[str, Sequence[str], None] = '3147e421bc47' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_foreign_key('fk_conversions_guest', 'conversions', 'conversion_guests', ['hotel_id', 'guest_id'], ['hotel_id', 'guest_id']) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint('fk_conversions_guest', 'conversions', type_='foreignkey') + # ### end Alembic commands ### diff --git a/src/alpine_bits_python/db.py b/src/alpine_bits_python/db.py index a287165..a25cfa9 100644 --- a/src/alpine_bits_python/db.py +++ b/src/alpine_bits_python/db.py @@ -622,12 +622,15 @@ class Conversion(Base): updated_at = Column(DateTime(timezone=True)) # When this record was last updated # Table constraints - # Note: The relationship to ConversionGuest is handled via SQLAlchemy ORM - # by matching (hotel_id, guest_id) pairs, no DB-level FK constraint needed __table_args__ = ( UniqueConstraint( "hotel_id", "pms_reservation_id", name="uq_conversion_hotel_reservation" ), + ForeignKeyConstraint( + ["hotel_id", "guest_id"], + ["conversion_guests.hotel_id", "conversion_guests.guest_id"], + name="fk_conversions_guest", + ), ) # Relationships