""" 定时任务API """ from fastapi import APIRouter, Depends from typing import List from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, desc from app.database import get_db from app.models import TaskLog from app.schemas import SchedulerStatus, SchedulerConfig, MessageResponse, TaskLogResponse from app.services.scheduler_service import scheduler_service from app.config import settings router = APIRouter(prefix="/api/scheduler", tags=["定时任务"]) @router.get("/status", response_model=SchedulerStatus) async def get_status(): """获取调度器状态""" return scheduler_service.get_status() @router.post("/start", response_model=MessageResponse) async def start_scheduler(): """启动调度器""" scheduler_service.start() return MessageResponse(success=True, message="调度器已启动") @router.post("/stop", response_model=MessageResponse) async def stop_scheduler(): """停止调度器""" scheduler_service.stop() return MessageResponse(success=True, message="调度器已停止") @router.post("/run-now", response_model=MessageResponse) async def run_now(): """立即执行同步任务""" import asyncio asyncio.create_task(scheduler_service.run_once()) return MessageResponse(success=True, message="已触发同步任务") @router.get("/logs", response_model=List[TaskLogResponse]) async def get_logs(limit: int = 20, db: AsyncSession = Depends(get_db)): """获取任务日志""" stmt = select(TaskLog).order_by(desc(TaskLog.started_at)).limit(limit) result = await db.execute(stmt) logs = result.scalars().all() return [TaskLogResponse.model_validate(log) for log in logs]