53 lines
1.9 KiB
Python
53 lines
1.9 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.script_template import ScriptCreate, ScriptRead, ScriptUpdate
|
|
from app.services import script_template_service
|
|
|
|
router = APIRouter(prefix="/scripts", tags=["script-template"])
|
|
|
|
|
|
@router.get("", dependencies=[Depends(require_perm("system:script:view"))])
|
|
async def list_scripts(
|
|
db: DbDep,
|
|
page: int = Query(1, ge=1),
|
|
size: int = Query(20, ge=1, le=200),
|
|
keyword: str | None = None,
|
|
language: str | None = None,
|
|
) -> dict:
|
|
rows, total = await script_template_service.paginate(db, page, size, keyword, language)
|
|
return ok({
|
|
"list": [ScriptRead.model_validate(r).model_dump() for r in rows],
|
|
"total": total,
|
|
"page": page,
|
|
"size": size,
|
|
})
|
|
|
|
|
|
@router.get("/all", dependencies=[Depends(require_perm("skill:view"))])
|
|
async def list_all(db: DbDep) -> dict:
|
|
"""供 Skill 编辑时选脚本模板用。"""
|
|
rows = await script_template_service.list_all(db)
|
|
return ok([ScriptRead.model_validate(r).model_dump() for r in rows])
|
|
|
|
|
|
@router.post("", dependencies=[Depends(require_perm("system:script:create"))])
|
|
async def create_script(data: ScriptCreate, db: DbDep, user: CurrentUser) -> dict:
|
|
s = await script_template_service.create(db, data, owner_id=user.id)
|
|
return ok(ScriptRead.model_validate(s).model_dump())
|
|
|
|
|
|
@router.patch("/{sid}", dependencies=[Depends(require_perm("system:script:update"))])
|
|
async def update_script(sid: int, data: ScriptUpdate, db: DbDep) -> dict:
|
|
s = await script_template_service.update(db, sid, data)
|
|
return ok(ScriptRead.model_validate(s).model_dump())
|
|
|
|
|
|
@router.delete("/{sid}", dependencies=[Depends(require_perm("system:script:delete"))])
|
|
async def delete_script(sid: int, db: DbDep) -> dict:
|
|
await script_template_service.delete(db, sid)
|
|
return ok()
|