from __future__ import annotations from dataclasses import dataclass from pathlib import Path from alert_service import AlertService from chart_data_provider import EastmoneyChartClient, MarketChartClient from database import ReviewDatabase from ifind_client import IfindHttpClient from mentor_agent import MentorSkillRegistry from realtime_aggregator import WebRealtimeAggregator from screener import ScreenerEngine from strategy_tracking import StrategyTrackingService from trade_journal import TradeJournalService @dataclass(frozen=True) class ApplicationContainer: database: ReviewDatabase ifind: IfindHttpClient screener: ScreenerEngine strategy_tracking: StrategyTrackingService alert_service: AlertService trade_journal: TradeJournalService mentor_skills: MentorSkillRegistry realtime_aggregator: WebRealtimeAggregator chart_data: MarketChartClient def build_application_container( database: ReviewDatabase, credentials: dict[str, object], mentor_skills_dir: Path, private_mentor_skills_dir: Path, ) -> ApplicationContainer: ifind = IfindHttpClient( str(credentials.get("ifind_refresh_token") or ""), str(credentials.get("ifind_access_token") or ""), ) return ApplicationContainer( database=database, ifind=ifind, screener=ScreenerEngine(database), strategy_tracking=StrategyTrackingService(database), alert_service=AlertService(database), trade_journal=TradeJournalService(database), mentor_skills=MentorSkillRegistry(mentor_skills_dir, private_mentor_skills_dir), realtime_aggregator=WebRealtimeAggregator(), chart_data=MarketChartClient(ifind, EastmoneyChartClient()), )