Files
wecom_it_smart_desk/backend/create_meetingroom_tables.py
T

59 lines
2.4 KiB
Python
Raw Normal View History

"""创建会议室预定相关表 - 直接 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())