These endpoints fire on every visit or refresh and drown the audit log. Login, config writes, uploads, downloads, and other mutations stay audited.
106 lines
2.9 KiB
Python
106 lines
2.9 KiB
Python
from fastapi import APIRouter, Depends, Request
|
|
|
|
from api.response import success
|
|
from domain.audit import AuditAction, audit
|
|
from domain.auth import get_current_active_user
|
|
from .service import TaskService
|
|
from .types import (
|
|
AutomationTaskCreate,
|
|
AutomationTaskUpdate,
|
|
TaskQueueSettings,
|
|
)
|
|
|
|
CurrentUser = TaskService.current_user_dep
|
|
|
|
router = APIRouter(
|
|
prefix="/api/tasks",
|
|
tags=["Tasks"],
|
|
dependencies=[Depends(get_current_active_user)],
|
|
responses={404: {"description": "Not found"}},
|
|
)
|
|
|
|
|
|
@router.get("/queue")
|
|
async def get_task_queue_status(current_user: CurrentUser):
|
|
payload = TaskService.get_queue_tasks()
|
|
return success(payload)
|
|
|
|
|
|
@router.get("/queue/settings")
|
|
async def get_task_queue_settings(current_user: CurrentUser):
|
|
payload = TaskService.get_queue_settings()
|
|
return success(payload.model_dump())
|
|
|
|
|
|
@router.post("/queue/settings")
|
|
@audit(
|
|
action=AuditAction.UPDATE,
|
|
description="更新任务队列设置",
|
|
body_fields=["concurrency"],
|
|
)
|
|
async def update_task_queue_settings(request: Request, settings: TaskQueueSettings, current_user: CurrentUser):
|
|
payload = await TaskService.update_queue_settings(settings, getattr(current_user, "id", None))
|
|
return success(payload.model_dump())
|
|
|
|
|
|
@router.get("/queue/{task_id}")
|
|
async def get_task_status(task_id: str, current_user: CurrentUser):
|
|
payload = TaskService.get_queue_task(task_id)
|
|
return success(payload)
|
|
|
|
|
|
@router.post("/")
|
|
@audit(
|
|
action=AuditAction.CREATE,
|
|
description="创建自动化任务",
|
|
body_fields=[
|
|
"name",
|
|
"event",
|
|
"trigger_config",
|
|
"processor_type",
|
|
"processor_config",
|
|
"enabled",
|
|
],
|
|
user_kw="user",
|
|
)
|
|
async def create_task(request: Request, task_in: AutomationTaskCreate, user: CurrentUser):
|
|
task = await TaskService.create_task(task_in, user)
|
|
return success(task)
|
|
|
|
|
|
@router.get("/{task_id}")
|
|
async def get_task(task_id: int, current_user: CurrentUser):
|
|
task = await TaskService.get_task(task_id)
|
|
return success(task)
|
|
|
|
|
|
@router.get("/")
|
|
async def list_tasks(current_user: CurrentUser):
|
|
tasks = await TaskService.list_tasks()
|
|
return success(tasks)
|
|
|
|
|
|
@router.put("/{task_id}")
|
|
@audit(
|
|
action=AuditAction.UPDATE,
|
|
description="更新自动化任务",
|
|
body_fields=[
|
|
"name",
|
|
"event",
|
|
"trigger_config",
|
|
"processor_type",
|
|
"processor_config",
|
|
"enabled",
|
|
],
|
|
)
|
|
async def update_task(request: Request, current_user: CurrentUser, task_id: int, task_in: AutomationTaskUpdate):
|
|
task = await TaskService.update_task(task_id, task_in, current_user)
|
|
return success(task)
|
|
|
|
|
|
@router.delete("/{task_id}")
|
|
@audit(action=AuditAction.DELETE, description="删除自动化任务", user_kw="user")
|
|
async def delete_task(task_id: int, request: Request, user: CurrentUser):
|
|
await TaskService.delete_task(task_id, user)
|
|
return success(msg="Task deleted")
|