76 lines
3.6 KiB
Python
76 lines
3.6 KiB
Python
"""Initialize database with master data"""
|
|
import asyncio
|
|
from sqlalchemy import text, select, func
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from app.db.base import engine, Base, async_session
|
|
from app.db.models import CardMaster
|
|
from app.core.config import settings
|
|
|
|
# Card master data from ai.json
|
|
CARD_MASTER_DATA = [
|
|
{"id": 0, "name": "ai", "base_cp_min": 10, "base_cp_max": 100, "color": "#fff700", "description": "世界の最小単位"},
|
|
{"id": 1, "name": "dream", "base_cp_min": 20, "base_cp_max": 120, "color": "#b19cd9", "description": "意識が物質を作る"},
|
|
{"id": 2, "name": "radiance", "base_cp_min": 30, "base_cp_max": 130, "color": "#ffd700", "description": "存在は光に向かう"},
|
|
{"id": 3, "name": "neutron", "base_cp_min": 40, "base_cp_max": 140, "color": "#cacfd2", "description": "中性子"},
|
|
{"id": 4, "name": "sun", "base_cp_min": 50, "base_cp_max": 150, "color": "#ff6b35", "description": "太陽"},
|
|
{"id": 5, "name": "night", "base_cp_min": 25, "base_cp_max": 125, "color": "#1a1a2e", "description": "夜空"},
|
|
{"id": 6, "name": "snow", "base_cp_min": 15, "base_cp_max": 115, "color": "#e3f2fd", "description": "雪"},
|
|
{"id": 7, "name": "thunder", "base_cp_min": 60, "base_cp_max": 160, "color": "#ffd93d", "description": "雷"},
|
|
{"id": 8, "name": "ultimate", "base_cp_min": 80, "base_cp_max": 180, "color": "#6c5ce7", "description": "超究"},
|
|
{"id": 9, "name": "sword", "base_cp_min": 70, "base_cp_max": 170, "color": "#a8e6cf", "description": "剣"},
|
|
{"id": 10, "name": "destruction", "base_cp_min": 90, "base_cp_max": 190, "color": "#ff4757", "description": "破壊"},
|
|
{"id": 11, "name": "earth", "base_cp_min": 35, "base_cp_max": 135, "color": "#4834d4", "description": "地球"},
|
|
{"id": 12, "name": "galaxy", "base_cp_min": 65, "base_cp_max": 165, "color": "#9c88ff", "description": "天の川"},
|
|
{"id": 13, "name": "create", "base_cp_min": 75, "base_cp_max": 175, "color": "#00d2d3", "description": "創造"},
|
|
{"id": 14, "name": "supernova", "base_cp_min": 100, "base_cp_max": 200, "color": "#ff9ff3", "description": "超新星"},
|
|
{"id": 15, "name": "world", "base_cp_min": 85, "base_cp_max": 185, "color": "#54a0ff", "description": "存在と世界は同じもの"},
|
|
]
|
|
|
|
|
|
async def init_db():
|
|
"""Initialize database tables and master data"""
|
|
print("Creating database tables...")
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
|
|
print("Inserting master data...")
|
|
async with async_session() as session:
|
|
# Check if master data already exists
|
|
try:
|
|
result = await session.execute(
|
|
select(func.count()).select_from(CardMaster)
|
|
)
|
|
count = result.scalar()
|
|
except Exception:
|
|
# Table might not exist yet
|
|
count = 0
|
|
|
|
if count == 0:
|
|
# Insert card master data
|
|
for card_data in CARD_MASTER_DATA:
|
|
card = CardMaster(**card_data)
|
|
session.add(card)
|
|
|
|
await session.commit()
|
|
print(f"Inserted {len(CARD_MASTER_DATA)} card master records")
|
|
else:
|
|
print("Master data already exists, skipping...")
|
|
|
|
print("Database initialization complete!")
|
|
|
|
|
|
async def drop_db():
|
|
"""Drop all database tables"""
|
|
print("Dropping all database tables...")
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.drop_all)
|
|
print("All tables dropped!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
|
|
if len(sys.argv) > 1 and sys.argv[1] == "drop":
|
|
asyncio.run(drop_db())
|
|
else:
|
|
asyncio.run(init_db()) |