"""调度器相关路由""" from fastapi import APIRouter, Depends from app.services.scheduler_service import SchedulerService from app.repositories.settings_repo import SettingsRepository from app.core.db import get_db from app.api.deps import get_scheduler_service from app.api.common import success_response, error_response from app.core.log import logger router = APIRouter(prefix="/api/scheduler", tags=["scheduler"]) settings_repo = SettingsRepository() async def _save_auto_validate_setting(enabled: bool): """保存自动验证设置""" async with get_db() as db: settings = await settings_repo.get_all(db) settings["auto_validate"] = enabled from app.models.schemas import SettingsSchema await settings_repo.save(db, SettingsSchema(**settings).model_dump()) @router.post("/start") async def start_scheduler(scheduler: SchedulerService = Depends(get_scheduler_service)): try: if scheduler.running: return success_response("验证调度器已在运行", {"running": True}) await scheduler.start() await _save_auto_validate_setting(True) return success_response("验证调度器已启动", {"running": True}) except Exception as e: logger.error(f"Start scheduler failed: {e}") return error_response(f"启动调度器失败: {str(e)}", 500) @router.post("/stop") async def stop_scheduler(scheduler: SchedulerService = Depends(get_scheduler_service)): try: if not scheduler.running: return success_response("验证调度器未运行", {"running": False}) await scheduler.stop() await _save_auto_validate_setting(False) return success_response("验证调度器已停止", {"running": False}) except Exception as e: logger.error(f"Stop scheduler failed: {e}") return error_response(f"停止调度器失败: {str(e)}", 500) @router.post("/validate-now") async def validate_now(scheduler: SchedulerService = Depends(get_scheduler_service)): try: scheduler.validate_all_now() return success_response("已开始全量验证", {"started": True}) except Exception as e: logger.error(f"Validate now failed: {e}") return error_response(f"启动验证失败: {str(e)}", 500) @router.get("/status") async def scheduler_status(scheduler: SchedulerService = Depends(get_scheduler_service)): return success_response( "获取状态成功", {"running": scheduler.running, "interval_minutes": scheduler.interval_minutes}, )