Push
This commit is contained in:
117
scripts/migrate_combat.py
Normal file
117
scripts/migrate_combat.py
Normal file
@@ -0,0 +1,117 @@
|
||||
"""
|
||||
Migration script to add combat system columns to existing database.
|
||||
Run this once to upgrade the database schema.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
from sqlalchemy.ext.asyncio import create_async_engine
|
||||
from sqlalchemy import text
|
||||
from dotenv import load_dotenv
|
||||
|
||||
async def migrate():
|
||||
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}"
|
||||
engine = create_async_engine(DATABASE_URL)
|
||||
|
||||
print("Starting database migration...")
|
||||
|
||||
async with engine.begin() as conn:
|
||||
# Add level column if it doesn't exist
|
||||
try:
|
||||
await conn.execute(text(
|
||||
"ALTER TABLE players ADD COLUMN level INTEGER DEFAULT 1"
|
||||
))
|
||||
print("✅ Added 'level' column")
|
||||
except Exception as e:
|
||||
if "already exists" in str(e):
|
||||
print("⚠️ 'level' column already exists, skipping")
|
||||
else:
|
||||
print(f"❌ Error adding 'level': {e}")
|
||||
|
||||
# Add xp column if it doesn't exist
|
||||
try:
|
||||
await conn.execute(text(
|
||||
"ALTER TABLE players ADD COLUMN xp INTEGER DEFAULT 0"
|
||||
))
|
||||
print("✅ Added 'xp' column")
|
||||
except Exception as e:
|
||||
if "already exists" in str(e):
|
||||
print("⚠️ 'xp' column already exists, skipping")
|
||||
else:
|
||||
print(f"❌ Error adding 'xp': {e}")
|
||||
|
||||
# Add unspent_points column if it doesn't exist
|
||||
try:
|
||||
await conn.execute(text(
|
||||
"ALTER TABLE players ADD COLUMN unspent_points INTEGER DEFAULT 0"
|
||||
))
|
||||
print("✅ Added 'unspent_points' column")
|
||||
except Exception as e:
|
||||
if "already exists" in str(e):
|
||||
print("⚠️ 'unspent_points' column already exists, skipping")
|
||||
else:
|
||||
print(f"❌ Error adding 'unspent_points': {e}")
|
||||
|
||||
# Create active_combats table if it doesn't exist
|
||||
try:
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS active_combats (
|
||||
id SERIAL PRIMARY KEY,
|
||||
player_id INTEGER UNIQUE REFERENCES players(telegram_id) ON DELETE CASCADE,
|
||||
npc_id VARCHAR NOT NULL,
|
||||
npc_hp INTEGER NOT NULL,
|
||||
npc_max_hp INTEGER NOT NULL,
|
||||
turn VARCHAR NOT NULL,
|
||||
turn_started_at FLOAT NOT NULL,
|
||||
player_status_effects VARCHAR DEFAULT '[]',
|
||||
npc_status_effects VARCHAR DEFAULT '[]',
|
||||
location_id VARCHAR NOT NULL
|
||||
)
|
||||
"""))
|
||||
print("✅ Created 'active_combats' table")
|
||||
except Exception as e:
|
||||
print(f"⚠️ 'active_combats' table: {e}")
|
||||
|
||||
# Create player_corpses table if it doesn't exist
|
||||
try:
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS player_corpses (
|
||||
id SERIAL PRIMARY KEY,
|
||||
player_name VARCHAR NOT NULL,
|
||||
location_id VARCHAR NOT NULL,
|
||||
items VARCHAR NOT NULL,
|
||||
death_timestamp FLOAT NOT NULL
|
||||
)
|
||||
"""))
|
||||
print("✅ Created 'player_corpses' table")
|
||||
except Exception as e:
|
||||
print(f"⚠️ 'player_corpses' table: {e}")
|
||||
|
||||
# Create npc_corpses table if it doesn't exist
|
||||
try:
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS npc_corpses (
|
||||
id SERIAL PRIMARY KEY,
|
||||
npc_id VARCHAR NOT NULL,
|
||||
location_id VARCHAR NOT NULL,
|
||||
loot_remaining VARCHAR NOT NULL,
|
||||
death_timestamp FLOAT NOT NULL
|
||||
)
|
||||
"""))
|
||||
print("✅ Created 'npc_corpses' table")
|
||||
except Exception as e:
|
||||
print(f"⚠️ 'npc_corpses' table: {e}")
|
||||
|
||||
await engine.dispose()
|
||||
print("\n✅ Migration complete!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(migrate())
|
||||
Reference in New Issue
Block a user