54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
|
|
from app.core.deps import CurrentUser, DbDep, require_perm
|
|
from app.core.exceptions import ok
|
|
from app.schemas.schedule import ScheduleCreate, ScheduleUpdate
|
|
from app.services import schedule_service
|
|
|
|
router = APIRouter(prefix="/schedules", tags=["schedule"])
|
|
|
|
|
|
@router.get("", dependencies=[Depends(require_perm("system:cron:view"))])
|
|
async def list_schedules(db: DbDep) -> dict:
|
|
return ok(await schedule_service.list_all(db))
|
|
|
|
|
|
@router.get("/{sid}", dependencies=[Depends(require_perm("system:cron:view"))])
|
|
async def get_schedule(sid: int, db: DbDep) -> dict:
|
|
return ok(await schedule_service.get(db, sid))
|
|
|
|
|
|
@router.get("/{sid}/logs", dependencies=[Depends(require_perm("system:cron:view"))])
|
|
async def list_schedule_logs(
|
|
sid: int, db: DbDep, limit: int = Query(50, ge=1, le=500)
|
|
) -> dict:
|
|
return ok(await schedule_service.list_logs(db, sid, limit))
|
|
|
|
|
|
@router.post("", dependencies=[Depends(require_perm("system:cron:create"))])
|
|
async def create_schedule(data: ScheduleCreate, db: DbDep, user: CurrentUser) -> dict:
|
|
return ok(await schedule_service.create(db, data, user))
|
|
|
|
|
|
@router.patch("/{sid}", dependencies=[Depends(require_perm("system:cron:update"))])
|
|
async def update_schedule(sid: int, data: ScheduleUpdate, db: DbDep) -> dict:
|
|
return ok(await schedule_service.update(db, sid, data))
|
|
|
|
|
|
@router.post("/{sid}/toggle", dependencies=[Depends(require_perm("system:cron:update"))])
|
|
async def toggle_schedule(sid: int, enabled: bool, db: DbDep) -> dict:
|
|
return ok(await schedule_service.toggle(db, sid, enabled))
|
|
|
|
|
|
@router.post("/{sid}/trigger", dependencies=[Depends(require_perm("system:cron:update"))])
|
|
async def trigger_now(sid: int, db: DbDep, user: CurrentUser) -> dict:
|
|
return ok(await schedule_service.trigger_now(db, sid, user))
|
|
|
|
|
|
@router.delete("/{sid}", dependencies=[Depends(require_perm("system:cron:delete"))])
|
|
async def delete_schedule(sid: int, db: DbDep) -> dict:
|
|
await schedule_service.delete(db, sid)
|
|
return ok()
|