refactor: update ConfigurationService to avoid circular imports and streamline repository usage
This commit is contained in:
@@ -9,7 +9,6 @@ from pydantic import BaseModel, Field
|
|||||||
|
|
||||||
from arbitrade.config.settings import Settings
|
from arbitrade.config.settings import Settings
|
||||||
from arbitrade.storage.db import DuckDBStore
|
from arbitrade.storage.db import DuckDBStore
|
||||||
from arbitrade.storage.repositories import AuditRepository, ConfigSettingRepository
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigSection(BaseModel):
|
class ConfigSection(BaseModel):
|
||||||
@@ -59,19 +58,22 @@ class ConfigBacktestingDefaults(BaseModel):
|
|||||||
class ConfigurationService:
|
class ConfigurationService:
|
||||||
"""Manages application configuration from environment and database sources."""
|
"""Manages application configuration from environment and database sources."""
|
||||||
|
|
||||||
def __init__(self, settings: Settings, store: DuckDBStore, audit_repo: AuditRepository) -> None:
|
def __init__(self, settings: Settings, store: DuckDBStore, audit_repo) -> None:
|
||||||
self._settings = settings
|
self._settings = settings
|
||||||
self._store = store
|
self._store = store
|
||||||
self._audit_repo = audit_repo
|
self._audit_repo = audit_repo
|
||||||
self._config_version = 0
|
self._config_version = 0
|
||||||
self._loaded_settings: dict[str, Any] = {}
|
self._loaded_settings: dict[str, Any] = {}
|
||||||
self._setting_repo = ConfigSettingRepository(store)
|
|
||||||
self._load_database_settings()
|
self._load_database_settings()
|
||||||
|
|
||||||
def _load_database_settings(self) -> None:
|
def _load_database_settings(self) -> None:
|
||||||
"""Load user settings from database and merge with defaults."""
|
"""Load user settings from database and merge with defaults."""
|
||||||
|
# Import here to avoid circular imports
|
||||||
|
from arbitrade.storage.repositories import ConfigSettingRepository
|
||||||
|
setting_repo = ConfigSettingRepository(self._store)
|
||||||
|
|
||||||
# Load all settings from database
|
# Load all settings from database
|
||||||
db_settings = self._setting_repo.list_settings()
|
db_settings = setting_repo.list_settings()
|
||||||
|
|
||||||
# Convert to dictionary for easy access
|
# Convert to dictionary for easy access
|
||||||
for setting in db_settings:
|
for setting in db_settings:
|
||||||
@@ -112,6 +114,10 @@ class ConfigurationService:
|
|||||||
|
|
||||||
def set_setting(self, key: str, value: Any, updated_by: str | None = None) -> None:
|
def set_setting(self, key: str, value: Any, updated_by: str | None = None) -> None:
|
||||||
"""Set a configuration setting value and persist to database."""
|
"""Set a configuration setting value and persist to database."""
|
||||||
|
# Import here to avoid circular imports
|
||||||
|
from arbitrade.storage.repositories import ConfigSettingRepository
|
||||||
|
setting_repo = ConfigSettingRepository(self._store)
|
||||||
|
|
||||||
# Convert value to JSON string and determine type
|
# Convert value to JSON string and determine type
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
value_json = value
|
value_json = value
|
||||||
@@ -147,20 +153,10 @@ class ConfigurationService:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Check if setting exists
|
# Check if setting exists
|
||||||
existing_setting = self._setting_repo.get_setting(key)
|
existing_setting = setting_repo.get_setting(key)
|
||||||
if existing_setting:
|
if existing_setting:
|
||||||
# Update existing setting
|
# Update existing setting
|
||||||
updated_setting = self._setting_repo.update_setting(key, setting)
|
updated_setting = setting_repo.update_setting(key, setting)
|
||||||
else:
|
else:
|
||||||
# Create new setting
|
# Create new setting
|
||||||
updated_setting = self._setting_repo.create_setting(setting)
|
updated_setting = setting_repo.create_setting(setting)
|
||||||
|
|
||||||
# Update in-memory cache
|
|
||||||
self._loaded_settings[key] = value
|
|
||||||
|
|
||||||
# Increment version for hot reloading
|
|
||||||
self._config_version += 1
|
|
||||||
|
|
||||||
def get_all_settings(self) -> dict[str, Any]:
|
|
||||||
"""Get all configuration settings."""
|
|
||||||
return self._loaded_settings.copy()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user