Free rooms first implementation
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
"""Add hotel inventory and room availability tables
|
||||
|
||||
Revision ID: b2cfe2d3aabc
|
||||
Revises: e7ee03d8f430
|
||||
Create Date: 2025-11-27 12:00:00.000000
|
||||
|
||||
"""
|
||||
from collections.abc import Sequence
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "b2cfe2d3aabc"
|
||||
down_revision: str | Sequence[str] | None = "e7ee03d8f430"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Upgrade schema with inventory and availability tables."""
|
||||
op.create_table(
|
||||
"hotel_inventory",
|
||||
sa.Column("id", sa.Integer(), nullable=False),
|
||||
sa.Column("hotel_id", sa.String(length=50), nullable=False),
|
||||
sa.Column("inv_type_code", sa.String(length=8), nullable=False),
|
||||
sa.Column("inv_code", sa.String(length=16), nullable=True),
|
||||
sa.Column("room_name", sa.String(length=200), nullable=True),
|
||||
sa.Column("max_occupancy", sa.Integer(), nullable=True),
|
||||
sa.Column("source", sa.String(length=20), nullable=False),
|
||||
sa.Column("first_seen", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column("last_updated", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(["hotel_id"], ["hotels.hotel_id"], ondelete="CASCADE"),
|
||||
sa.PrimaryKeyConstraint("id"),
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_hotel_inventory_hotel_id"),
|
||||
"hotel_inventory",
|
||||
["hotel_id"],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_hotel_inventory_inv_type_code"),
|
||||
"hotel_inventory",
|
||||
["inv_type_code"],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_hotel_inventory_inv_code"),
|
||||
"hotel_inventory",
|
||||
["inv_code"],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
"uq_hotel_inventory_unique_key",
|
||||
"hotel_inventory",
|
||||
["hotel_id", "inv_type_code", sa.text("COALESCE(inv_code, '')")],
|
||||
unique=True,
|
||||
)
|
||||
|
||||
op.create_table(
|
||||
"room_availability",
|
||||
sa.Column("id", sa.Integer(), nullable=False),
|
||||
sa.Column("inventory_id", sa.Integer(), nullable=False),
|
||||
sa.Column("date", sa.Date(), nullable=False),
|
||||
sa.Column("count_type_2", sa.Integer(), nullable=True),
|
||||
sa.Column("count_type_6", sa.Integer(), nullable=True),
|
||||
sa.Column("count_type_9", sa.Integer(), nullable=True),
|
||||
sa.Column("is_closing_season", sa.Boolean(), nullable=False, server_default=sa.false()),
|
||||
sa.Column("last_updated", sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column("update_type", sa.String(length=20), nullable=False),
|
||||
sa.ForeignKeyConstraint(["inventory_id"], ["hotel_inventory.id"], ondelete="CASCADE"),
|
||||
sa.PrimaryKeyConstraint("id"),
|
||||
sa.UniqueConstraint("inventory_id", "date", name="uq_room_availability_unique_key"),
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_room_availability_inventory_id"),
|
||||
"room_availability",
|
||||
["inventory_id"],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
op.f("ix_room_availability_date"),
|
||||
"room_availability",
|
||||
["date"],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
"idx_room_availability_inventory_date",
|
||||
"room_availability",
|
||||
["inventory_id", "date"],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Downgrade schema by removing availability tables."""
|
||||
op.drop_index("idx_room_availability_inventory_date", table_name="room_availability")
|
||||
op.drop_index(op.f("ix_room_availability_date"), table_name="room_availability")
|
||||
op.drop_index(op.f("ix_room_availability_inventory_id"), table_name="room_availability")
|
||||
op.drop_table("room_availability")
|
||||
|
||||
op.drop_index("uq_hotel_inventory_unique_key", table_name="hotel_inventory")
|
||||
op.drop_index(op.f("ix_hotel_inventory_inv_code"), table_name="hotel_inventory")
|
||||
op.drop_index(op.f("ix_hotel_inventory_inv_type_code"), table_name="hotel_inventory")
|
||||
op.drop_index(op.f("ix_hotel_inventory_hotel_id"), table_name="hotel_inventory")
|
||||
op.drop_table("hotel_inventory")
|
||||
Reference in New Issue
Block a user