44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Migration script to update interactable_cooldowns table schema.
|
|
Changes from single instance_id to instance_id + action_id composite key.
|
|
"""
|
|
import asyncio
|
|
from api.database import engine
|
|
from sqlalchemy import text
|
|
|
|
|
|
async def migrate():
|
|
"""Drop and recreate interactable_cooldowns table with new schema."""
|
|
async with engine.begin() as conn:
|
|
print("🔄 Migrating interactable_cooldowns table...")
|
|
|
|
# Drop old table
|
|
await conn.execute(text("DROP TABLE IF EXISTS interactable_cooldowns CASCADE"))
|
|
print("✅ Dropped old interactable_cooldowns table")
|
|
|
|
# Create new table with updated schema
|
|
await conn.execute(text("""
|
|
CREATE TABLE interactable_cooldowns (
|
|
id SERIAL PRIMARY KEY,
|
|
interactable_instance_id VARCHAR NOT NULL,
|
|
action_id VARCHAR NOT NULL,
|
|
expiry_timestamp DOUBLE PRECISION NOT NULL,
|
|
CONSTRAINT uix_interactable_action UNIQUE (interactable_instance_id, action_id)
|
|
)
|
|
"""))
|
|
print("✅ Created new interactable_cooldowns table with per-action cooldowns")
|
|
|
|
# Create index for faster lookups
|
|
await conn.execute(text("""
|
|
CREATE INDEX IF NOT EXISTS idx_interactable_cooldowns_expiry
|
|
ON interactable_cooldowns(expiry_timestamp)
|
|
"""))
|
|
print("✅ Created index on expiry_timestamp")
|
|
|
|
print("✨ Migration complete!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(migrate())
|