Addition Of Files
This commit is contained in:
154
db/db_init.py
Normal file
154
db/db_init.py
Normal file
@@ -0,0 +1,154 @@
|
||||
"""
|
||||
Database initialization module
|
||||
Creates the SQLite database schema for Umamusume support cards
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
DB_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "database", "umamusume.db")
|
||||
|
||||
def get_conn():
|
||||
"""Get database connection"""
|
||||
os.makedirs(os.path.dirname(DB_PATH), exist_ok=True)
|
||||
return sqlite3.connect(DB_PATH)
|
||||
|
||||
def init_db(reset=False):
|
||||
"""
|
||||
Initialize the database with schema
|
||||
|
||||
Args:
|
||||
reset: If True, drops all existing tables first
|
||||
"""
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
if reset:
|
||||
print("Resetting database...")
|
||||
cur.execute("DROP TABLE IF EXISTS deck_slots")
|
||||
cur.execute("DROP TABLE IF EXISTS user_decks")
|
||||
cur.execute("DROP TABLE IF EXISTS event_skills")
|
||||
cur.execute("DROP TABLE IF EXISTS support_events")
|
||||
cur.execute("DROP TABLE IF EXISTS support_hints")
|
||||
cur.execute("DROP TABLE IF EXISTS support_effects")
|
||||
cur.execute("DROP TABLE IF EXISTS owned_cards")
|
||||
cur.execute("DROP TABLE IF EXISTS support_cards")
|
||||
|
||||
# Support Cards - main card info
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS support_cards (
|
||||
card_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
rarity TEXT,
|
||||
card_type TEXT,
|
||||
max_level INTEGER DEFAULT 50,
|
||||
gametora_url TEXT UNIQUE,
|
||||
image_path TEXT
|
||||
)
|
||||
""")
|
||||
|
||||
# Effects by level - stores effect values at each level
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS support_effects (
|
||||
effect_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
card_id INTEGER,
|
||||
level INTEGER,
|
||||
effect_name TEXT,
|
||||
effect_value TEXT,
|
||||
FOREIGN KEY (card_id) REFERENCES support_cards(card_id)
|
||||
)
|
||||
""")
|
||||
|
||||
# Support Hints - training skills that can be learned
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS support_hints (
|
||||
hint_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
card_id INTEGER,
|
||||
hint_name TEXT,
|
||||
hint_description TEXT,
|
||||
FOREIGN KEY (card_id) REFERENCES support_cards(card_id)
|
||||
)
|
||||
""")
|
||||
|
||||
# Training Events
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS support_events (
|
||||
event_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
card_id INTEGER,
|
||||
event_name TEXT,
|
||||
event_type TEXT,
|
||||
FOREIGN KEY (card_id) REFERENCES support_cards(card_id)
|
||||
)
|
||||
""")
|
||||
|
||||
# Event Skills
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS event_skills (
|
||||
skill_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
event_id INTEGER,
|
||||
skill_name TEXT,
|
||||
FOREIGN KEY (event_id) REFERENCES support_events(event_id)
|
||||
)
|
||||
""")
|
||||
|
||||
# User's owned cards - which cards the user personally owns
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS owned_cards (
|
||||
owned_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
card_id INTEGER UNIQUE,
|
||||
level INTEGER DEFAULT 50,
|
||||
limit_break INTEGER DEFAULT 0,
|
||||
owned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (card_id) REFERENCES support_cards(card_id)
|
||||
)
|
||||
""")
|
||||
|
||||
# User's saved decks
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS user_decks (
|
||||
deck_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
deck_name TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
""")
|
||||
|
||||
# Cards in each deck (6 slots max)
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS deck_slots (
|
||||
slot_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
deck_id INTEGER,
|
||||
card_id INTEGER,
|
||||
slot_position INTEGER,
|
||||
level INTEGER DEFAULT 50,
|
||||
FOREIGN KEY (deck_id) REFERENCES user_decks(deck_id),
|
||||
FOREIGN KEY (card_id) REFERENCES support_cards(card_id)
|
||||
)
|
||||
""")
|
||||
|
||||
# Create indexes for better query performance
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_effects_card_level ON support_effects(card_id, level)")
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_hints_card ON support_hints(card_id)")
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_events_card ON support_events(card_id)")
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_cards_type ON support_cards(card_type)")
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_cards_rarity ON support_cards(rarity)")
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_owned_card ON owned_cards(card_id)")
|
||||
cur.execute("CREATE INDEX IF NOT EXISTS idx_deck_slots ON deck_slots(deck_id)")
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
print("Database initialized successfully!")
|
||||
|
||||
def migrate_add_image_path():
|
||||
"""Add image_path column if it doesn't exist"""
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
try:
|
||||
cur.execute("ALTER TABLE support_cards ADD COLUMN image_path TEXT")
|
||||
conn.commit()
|
||||
print("Added image_path column")
|
||||
except sqlite3.OperationalError:
|
||||
pass # Column already exists
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_db(reset=True)
|
||||
Reference in New Issue
Block a user