修复定时任务更新接口:支持部分更新
PUT /schedules/{id} 原来要求完整 ScheduleIn(所有字段必传),
前端只传 {enabled} 时因缺少 task/cron 校验失败。
→ 新增 ScheduleUpdate schema(所有字段可选)
→ update_schedule 仅更新提供的字段
→ 使用最终值同步调度器
Co-Authored-By: new-provider/LongCat-2.0 <<EMAIL>>
)
This commit is contained in:
@@ -8,7 +8,7 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy import select, delete
|
||||
|
||||
from src.api.deps import require_admin
|
||||
from src.api.schemas import ScheduleIn, ScheduleOut
|
||||
from src.api.schemas import ScheduleIn, ScheduleUpdate, ScheduleOut
|
||||
from src.core.scheduler import scheduler
|
||||
from src.data.bzzoiro import ingest_bzzoiro_event_stats, ingest_bzzoiro_standings
|
||||
from src.data.sources import get_source
|
||||
@@ -98,21 +98,25 @@ async def create_schedule(req: ScheduleIn, db: AsyncSession = Depends(get_db_rea
|
||||
|
||||
|
||||
@router.put("/schedules/{schedule_id}")
|
||||
async def update_schedule(schedule_id: str, req: ScheduleIn, db: AsyncSession = Depends(get_db_read)):
|
||||
"""更新定时任务。"""
|
||||
async def update_schedule(schedule_id: str, req: ScheduleUpdate, db: AsyncSession = Depends(get_db_read)):
|
||||
"""更新定时任务(部分更新)。"""
|
||||
stmt = select(Schedule).where(Schedule.id == schedule_id)
|
||||
sched = (await db.execute(stmt)).scalar_one_or_none()
|
||||
if sched is None:
|
||||
raise HTTPException(404, "定时任务不存在")
|
||||
|
||||
if req.task is not None:
|
||||
sched.task = req.task
|
||||
if req.cron is not None:
|
||||
sched.cron = req.cron
|
||||
if req.leagues is not None:
|
||||
sched.leagues = ",".join(req.leagues) if req.leagues else None
|
||||
if req.enabled is not None:
|
||||
sched.enabled = req.enabled
|
||||
await db.commit()
|
||||
|
||||
# 更新调度器
|
||||
scheduler.register(schedule_id, req.task, lambda: _run_scheduled_task(schedule_id), enabled=req.enabled)
|
||||
# 更新调度器(使用最终值)
|
||||
scheduler.register(schedule_id, sched.task, lambda: _run_scheduled_task(schedule_id), enabled=sched.enabled)
|
||||
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
@@ -129,6 +129,13 @@ class ScheduleIn(BaseModel):
|
||||
enabled: bool = True
|
||||
|
||||
|
||||
class ScheduleUpdate(BaseModel):
|
||||
task: str | None = None
|
||||
cron: str | None = None
|
||||
leagues: list[str] | None = None
|
||||
enabled: bool | None = None
|
||||
|
||||
|
||||
class ScheduleOut(BaseModel):
|
||||
id: str
|
||||
task: str
|
||||
|
||||
Reference in New Issue
Block a user