Files
conference-room-booking-system/backend/migrations/versions/0001_initial_migration.py
T

82 lines
2.6 KiB
Python
Raw Normal View History

2025-08-23 20:52:25 -04:00
"""Add seed data from seed.sql with separate prepared statements
2025-08-22 19:41:34 -04:00
2025-08-26 23:40:47 -04:00
Revision ID: 0001_initial_migration
2025-08-22 19:41:34 -04:00
Revises:
Create Date: 2025-08-22 23:40:52.885449
"""
2025-08-23 20:52:25 -04:00
from pathlib import Path
2025-08-22 19:41:34 -04:00
from typing import Sequence
from typing import Union
from alembic import op
2025-10-04 22:01:52 -04:00
from sqlalchemy import Column
from sqlalchemy import DateTime
from sqlalchemy import ForeignKey
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import UniqueConstraint
2025-08-22 19:41:34 -04:00
# revision identifiers, used by Alembic.
2025-08-26 23:40:47 -04:00
revision: str = "0001"
2025-08-22 19:41:34 -04:00
down_revision: Union[str, Sequence[str], None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
2025-10-04 22:01:52 -04:00
"""Create the database schema and seed initial data from seed.sql."""
# Create tables for users, rooms, bookings, invitees
op.create_table(
"users",
Column("email", String, primary_key=True),
Column("name", String, nullable=False),
)
op.create_table(
"rooms",
Column("id", Integer, primary_key=True, autoincrement=True),
Column("name", String, nullable=False, unique=True),
Column("location", String, nullable=False),
Column("equipment", String, nullable=False),
Column("capacity", Integer, nullable=False),
)
op.create_table(
"bookings",
Column("id", Integer, primary_key=True, autoincrement=True),
Column("room_id", Integer, ForeignKey("rooms.id")),
Column("start_time", DateTime(timezone=True), nullable=False),
Column("end_time", DateTime(timezone=True), nullable=False),
Column("title", String, nullable=True),
)
op.create_table(
"invitees",
Column("id", Integer, primary_key=True, autoincrement=True),
Column(
"booking_id",
Integer,
ForeignKey("bookings.id", onupdate="CASCADE", ondelete="CASCADE"),
),
Column(
"user_email",
String,
ForeignKey("users.email", onupdate="CASCADE", ondelete="CASCADE"),
),
UniqueConstraint("booking_id", "user_email", name="uq_invitee_booking_user"),
)
# Seed data from seed.sql
2025-08-23 20:52:25 -04:00
migration_dir = Path(__file__).parent.parent.resolve()
seed_file_path = migration_dir / "seed.sql"
with seed_file_path.open("r") as file:
sql_content = file.read()
sql_statements = [stmt.strip() for stmt in sql_content.split(";") if stmt.strip()]
for stmt in sql_statements:
op.execute(stmt)
2025-08-22 19:41:34 -04:00
def downgrade() -> None:
2025-08-23 20:52:25 -04:00
"""Downgrade schema by removing data from users and rooms tables."""
op.execute("DELETE FROM users")
op.execute("DELETE FROM rooms")