import logging import asyncio from sqlalchemy import select from app.db.database import SessionLocal from app.db.models import ApiSettings from app.core.config import settings from app.services.kis_auth import kis_auth from app.services.sync_service import sync_service from app.services.telegram_service import telegram_service logger = logging.getLogger(__name__) async def check_kis_connectivity(db_session, settings_obj): if not settings_obj.appKey or not settings_obj.appSecret: logger.warning(">> [KIS] Credentials NOT FOUND in DB.") return False logger.info(">> [KIS] Attempting Authentication...") try: token = await kis_auth.get_access_token(db_session) masked_token = token[:10] + "..." if token else "None" logger.info(f" [OK] Access Token Valid ({masked_token})") return True except Exception as e: logger.error(f" [FAILED] KIS Auth Failed: {e}") return False async def check_telegram_connectivity(settings_obj, is_startup=False): if settings_obj.useTelegram and settings_obj.telegramToken and settings_obj.telegramChatId: logger.info(">> [Telegram] Integration Enabled.") if is_startup: msg = "๐Ÿš€ BatchuKis ๋ฐฐ์ทจํ‚ค์Šค ์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n์ž๋™๋งค๋งค ์—”์ง„์ด ๊ฐ€๋™ ์ค‘์ž…๋‹ˆ๋‹ค." await telegram_service.send_message(settings_obj.telegramToken, settings_obj.telegramChatId, msg) return True else: # logger.debug(">> [Telegram] Disabled or missing config.") return False async def run_startup_sequence(): """ Executes the Phase 1~4 startup sequence. """ logger.info("=== Starting System Initialization Sequence ===") async with SessionLocal() as db_session: # Phase 1: Load Settings stmt = select(ApiSettings).where(ApiSettings.id == 1) result = await db_session.execute(stmt) settings_obj = result.scalar_one_or_none() if not settings_obj: settings_obj = ApiSettings(id=1) db_session.add(settings_obj) await db_session.commit() logger.info("Created Default ApiSettings.") # Phase 2: KIS & Telegram await check_kis_connectivity(db_session, settings_obj) await check_telegram_connectivity(settings_obj, is_startup=True) # Phase 3: Data Sync logger.info(">> [Phase 3] Syncing Account & Master Data...") await sync_service.sync_account(db_session) from app.services.master_service import master_service await master_service.sync_master_data(db_session) logger.info("=== System Initialization Complete ===")