59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
|
|
"""创建会议室预定相关表 - 直接 SQL 执行(绕过 alembic)"""
|
|||
|
|
import asyncio
|
|||
|
|
from sqlalchemy import text
|
|||
|
|
from app.database import _get_engine
|
|||
|
|
|
|||
|
|
SQL = """
|
|||
|
|
-- 1. 终端-会议室绑定表
|
|||
|
|
CREATE TABLE IF NOT EXISTS terminal_room_binding (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
terminal_sn VARCHAR(64) NOT NULL,
|
|||
|
|
terminal_name VARCHAR(100) NOT NULL DEFAULT '',
|
|||
|
|
meetingroom_id INTEGER NOT NULL,
|
|||
|
|
meetingroom_name VARCHAR(100) NOT NULL DEFAULT '',
|
|||
|
|
location VARCHAR(200) NOT NULL DEFAULT '',
|
|||
|
|
is_active BOOLEAN NOT NULL DEFAULT true,
|
|||
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS ix_terminal_room_binding_terminal_sn ON terminal_room_binding (terminal_sn);
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_terminal_room_binding_meetingroom_id ON terminal_room_binding (meetingroom_id);
|
|||
|
|
|
|||
|
|
-- 2. 会议室预定记录快照表
|
|||
|
|
CREATE TABLE IF NOT EXISTS meetingroom_booking_snapshot (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
meetingroom_id INTEGER NOT NULL,
|
|||
|
|
booking_id VARCHAR(64) NOT NULL,
|
|||
|
|
subject VARCHAR(200) NOT NULL DEFAULT '',
|
|||
|
|
booker VARCHAR(64) NOT NULL DEFAULT '',
|
|||
|
|
start_time TIMESTAMP NOT NULL,
|
|||
|
|
end_time TIMESTAMP NOT NULL,
|
|||
|
|
status INTEGER NOT NULL DEFAULT 0,
|
|||
|
|
snapshot_date DATE NOT NULL,
|
|||
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_meetingroom_booking_snapshot_meetingroom_id ON meetingroom_booking_snapshot (meetingroom_id);
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_meetingroom_booking_snapshot_booking_id ON meetingroom_booking_snapshot (booking_id);
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_meetingroom_booking_snapshot_snapshot_date ON meetingroom_booking_snapshot (snapshot_date);
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
async def main():
|
|||
|
|
engine = _get_engine()
|
|||
|
|
async with engine.begin() as conn:
|
|||
|
|
for stmt in SQL.strip().split(';'):
|
|||
|
|
stmt = stmt.strip()
|
|||
|
|
if stmt and not stmt.startswith('--'):
|
|||
|
|
print(f" Executing: {stmt[:60]}...")
|
|||
|
|
await conn.execute(text(stmt))
|
|||
|
|
print("\n✅ All tables created successfully!")
|
|||
|
|
|
|||
|
|
# Verify
|
|||
|
|
result = await conn.execute(text(
|
|||
|
|
"SELECT table_name FROM information_schema.tables "
|
|||
|
|
"WHERE table_name IN ('terminal_room_binding', 'meetingroom_booking_snapshot')"
|
|||
|
|
))
|
|||
|
|
tables = [r[0] for r in result]
|
|||
|
|
print(f"Verified tables: {tables}")
|
|||
|
|
|
|||
|
|
asyncio.run(main())
|