Files
echoes-of-the-ash/scripts/migrate_add_wandering_flag.py
2026-02-05 16:09:34 +01:00

80 lines
2.6 KiB
Python

"""
Migration script to add from_wandering_enemy column to active_combats table.
Run this once to update the database schema.
"""
import asyncio
import os
from dotenv import load_dotenv
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import text
load_dotenv()
DB_USER = os.getenv("POSTGRES_USER")
DB_PASS = os.getenv("POSTGRES_PASSWORD")
DB_NAME = os.getenv("POSTGRES_DB")
DB_HOST = os.getenv("POSTGRES_HOST")
DB_PORT = os.getenv("POSTGRES_PORT")
DATABASE_URL = f"postgresql+psycopg://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
async def migrate():
"""Add from_wandering_enemy column to active_combats table."""
engine = create_async_engine(DATABASE_URL)
async with engine.begin() as conn:
# Check if column already exists
result = await conn.execute(text("""
SELECT column_name
FROM information_schema.columns
WHERE table_name='active_combats'
AND column_name='from_wandering_enemy'
"""))
exists = result.fetchone()
if exists:
print("✅ Column 'from_wandering_enemy' already exists. No migration needed.")
else:
print("🔧 Adding 'from_wandering_enemy' column to active_combats table...")
# Add the column with default value False
await conn.execute(text("""
ALTER TABLE active_combats
ADD COLUMN from_wandering_enemy BOOLEAN DEFAULT FALSE
"""))
print("✅ Column added successfully!")
# Also check and create wandering_enemies table if it doesn't exist
result = await conn.execute(text("""
SELECT table_name
FROM information_schema.tables
WHERE table_name='wandering_enemies'
"""))
table_exists = result.fetchone()
if table_exists:
print("✅ Table 'wandering_enemies' already exists.")
else:
print("🔧 Creating 'wandering_enemies' table...")
await conn.execute(text("""
CREATE TABLE wandering_enemies (
id SERIAL PRIMARY KEY,
npc_id VARCHAR NOT NULL,
location_id VARCHAR NOT NULL,
spawn_timestamp FLOAT NOT NULL,
despawn_timestamp FLOAT NOT NULL
)
"""))
print("✅ Table 'wandering_enemies' created successfully!")
await engine.dispose()
print("🎉 Migration complete!")
if __name__ == "__main__":
asyncio.run(migrate())