78 lines
3.1 KiB
Python
78 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from backend.bootstrap.settings import Settings
|
|
from backend.data.gateway import DataGateway
|
|
from backend.data.policy import DataSourcePolicy
|
|
from backend.data.providers import EastmoneyProvider, IfindProvider, TushareProvider
|
|
from backend.data.repository import MarketRepository
|
|
from backend.database.connection import Database
|
|
from backend.database.repositories.status import DatabaseStatusRepository
|
|
from backend.features.accounts.credentials import SystemCredentialService
|
|
from backend.features.accounts.model_pool import ModelPoolRepository, ModelPoolService
|
|
from backend.features.accounts.repository import AccountRepository, SystemCredentialRepository
|
|
from backend.features.accounts.service import (
|
|
AccountService,
|
|
MembershipService,
|
|
)
|
|
from backend.features.market import MarketService
|
|
from backend.features.market.insights import MarketInsightService
|
|
from backend.features.market.sync import MarketSnapshotService
|
|
from backend.features.screener.repository import ScreenerRepository
|
|
from backend.features.screener.service import ScreenerService
|
|
from backend.security import PasswordHasher, load_or_create_cipher
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class ApplicationContainer:
|
|
settings: Settings
|
|
database: Database
|
|
database_status: DatabaseStatusRepository
|
|
accounts: AccountService
|
|
memberships: MembershipService
|
|
system_credentials: SystemCredentialService
|
|
model_pool: ModelPoolService
|
|
market: MarketService
|
|
screener: ScreenerService
|
|
|
|
|
|
def build_container(settings: Settings) -> ApplicationContainer:
|
|
database = Database(settings.database_path)
|
|
account_repository = AccountRepository()
|
|
credential_repository = SystemCredentialRepository()
|
|
model_pool_repository = ModelPoolRepository()
|
|
cipher = load_or_create_cipher(settings)
|
|
credentials = SystemCredentialService(database, credential_repository, cipher)
|
|
tushare = TushareProvider(lambda: credentials.get("tushare_token"))
|
|
market_repository = MarketRepository()
|
|
gateway = DataGateway(
|
|
database,
|
|
market_repository,
|
|
(
|
|
tushare,
|
|
IfindProvider(
|
|
lambda: credentials.get("ifind_refresh_token"),
|
|
lambda: credentials.get("ifind_access_token"),
|
|
),
|
|
EastmoneyProvider(),
|
|
),
|
|
DataSourcePolicy(),
|
|
)
|
|
market = MarketService(
|
|
gateway,
|
|
MarketSnapshotService(database, market_repository, gateway),
|
|
MarketInsightService(database, market_repository, gateway),
|
|
)
|
|
return ApplicationContainer(
|
|
settings=settings,
|
|
database=database,
|
|
database_status=DatabaseStatusRepository(database),
|
|
accounts=AccountService(database, account_repository, PasswordHasher(), cipher),
|
|
memberships=MembershipService(database, account_repository),
|
|
system_credentials=credentials,
|
|
model_pool=ModelPoolService(database, model_pool_repository, cipher),
|
|
market=market,
|
|
screener=ScreenerService(database, ScreenerRepository(), market_repository, gateway),
|
|
)
|