mirror of
https://github.com/Xe138/AI-Trader.git
synced 2026-04-01 17:17:24 -04:00
feat: auto-initialize trading_days schema on database creation
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -560,6 +560,35 @@ class Database:
|
|||||||
self.connection = sqlite3.connect(db_path, check_same_thread=False)
|
self.connection = sqlite3.connect(db_path, check_same_thread=False)
|
||||||
self.connection.row_factory = sqlite3.Row
|
self.connection.row_factory = sqlite3.Row
|
||||||
|
|
||||||
|
# Auto-initialize schema if needed
|
||||||
|
self._initialize_schema()
|
||||||
|
|
||||||
|
def _initialize_schema(self):
|
||||||
|
"""Initialize database schema if tables don't exist."""
|
||||||
|
import importlib.util
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Check if trading_days table exists
|
||||||
|
cursor = self.connection.execute(
|
||||||
|
"SELECT name FROM sqlite_master WHERE type='table' AND name='trading_days'"
|
||||||
|
)
|
||||||
|
|
||||||
|
if cursor.fetchone() is None:
|
||||||
|
# Schema doesn't exist, create it
|
||||||
|
# Import migration module using importlib (module name starts with number)
|
||||||
|
migration_path = os.path.join(
|
||||||
|
os.path.dirname(__file__),
|
||||||
|
'migrations',
|
||||||
|
'001_trading_days_schema.py'
|
||||||
|
)
|
||||||
|
spec = importlib.util.spec_from_file_location(
|
||||||
|
"trading_days_schema",
|
||||||
|
migration_path
|
||||||
|
)
|
||||||
|
migration_module = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(migration_module)
|
||||||
|
migration_module.create_trading_days_schema(self)
|
||||||
|
|
||||||
def create_trading_day(
|
def create_trading_day(
|
||||||
self,
|
self,
|
||||||
job_id: str,
|
job_id: str,
|
||||||
|
|||||||
30
tests/integration/test_database_initialization.py
Normal file
30
tests/integration/test_database_initialization.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import pytest
|
||||||
|
from api.database import Database
|
||||||
|
|
||||||
|
|
||||||
|
class TestDatabaseInitialization:
|
||||||
|
|
||||||
|
def test_database_creates_new_schema_on_init(self, tmp_path):
|
||||||
|
"""Test database automatically creates trading_days schema."""
|
||||||
|
db_path = tmp_path / "new.db"
|
||||||
|
|
||||||
|
# Create database (should auto-initialize schema)
|
||||||
|
db = Database(str(db_path))
|
||||||
|
|
||||||
|
# Verify trading_days table exists
|
||||||
|
cursor = db.connection.execute(
|
||||||
|
"SELECT name FROM sqlite_master WHERE type='table' AND name='trading_days'"
|
||||||
|
)
|
||||||
|
assert cursor.fetchone() is not None
|
||||||
|
|
||||||
|
# Verify holdings table exists
|
||||||
|
cursor = db.connection.execute(
|
||||||
|
"SELECT name FROM sqlite_master WHERE type='table' AND name='holdings'"
|
||||||
|
)
|
||||||
|
assert cursor.fetchone() is not None
|
||||||
|
|
||||||
|
# Verify actions table exists
|
||||||
|
cursor = db.connection.execute(
|
||||||
|
"SELECT name FROM sqlite_master WHERE type='table' AND name='actions'"
|
||||||
|
)
|
||||||
|
assert cursor.fetchone() is not None
|
||||||
Reference in New Issue
Block a user