102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
"""Template APIs."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Query, Request
|
|
|
|
from app.api.deps import get_auth_context, require_permission
|
|
from app.model.schemas import (
|
|
AuthContext,
|
|
TemplateCreate,
|
|
TemplateUpdate,
|
|
TemplateUseRequest,
|
|
)
|
|
from app.service.template_service import TemplateService
|
|
from app.utils.response import success_response
|
|
|
|
router = APIRouter()
|
|
AUTH_CONTEXT_DEP = Depends(get_auth_context)
|
|
TEMPLATE_READ_DEP = Depends(require_permission("template:read"))
|
|
TEMPLATE_WRITE_DEP = Depends(require_permission("template:write"))
|
|
template_service = TemplateService()
|
|
|
|
|
|
@router.get("/ping")
|
|
def ping(request: Request, auth: AuthContext = AUTH_CONTEXT_DEP):
|
|
return success_response(request, {"module": "templates", "status": "ready"})
|
|
|
|
|
|
@router.get("/search")
|
|
def search_templates(
|
|
request: Request,
|
|
auth: AuthContext = TEMPLATE_READ_DEP,
|
|
q: str = Query(min_length=1, max_length=256),
|
|
scene: str | None = None,
|
|
top_k: int = Query(default=10, ge=1, le=20),
|
|
):
|
|
result = template_service.search_templates(auth=auth, q=q, scene=scene, top_k=top_k)
|
|
return success_response(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.get("")
|
|
def list_templates(
|
|
request: Request,
|
|
auth: AuthContext = AUTH_CONTEXT_DEP,
|
|
scene: str | None = None,
|
|
is_approved: bool | None = None,
|
|
keyword: str | None = None,
|
|
page: int = Query(default=1, ge=1),
|
|
page_size: int = Query(default=20, ge=1, le=100),
|
|
):
|
|
result = template_service.list_templates(
|
|
auth=auth,
|
|
scene=scene,
|
|
is_approved=is_approved,
|
|
keyword=keyword,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
return success_response(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.post("")
|
|
def create_template(
|
|
request: Request,
|
|
payload: TemplateCreate,
|
|
auth: AuthContext = TEMPLATE_WRITE_DEP,
|
|
):
|
|
result = template_service.create_template(payload, auth)
|
|
return success_response(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.put("/{template_id}")
|
|
def update_template(
|
|
template_id: int,
|
|
request: Request,
|
|
payload: TemplateUpdate,
|
|
auth: AuthContext = TEMPLATE_WRITE_DEP,
|
|
):
|
|
result = template_service.update_template(template_id, payload, auth)
|
|
return success_response(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.delete("/{template_id}")
|
|
def delete_template(
|
|
template_id: int,
|
|
request: Request,
|
|
auth: AuthContext = TEMPLATE_WRITE_DEP,
|
|
):
|
|
result = template_service.soft_delete_template(template_id, auth)
|
|
return success_response(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.post("/{template_id}/use")
|
|
def use_template(
|
|
template_id: int,
|
|
request: Request,
|
|
payload: TemplateUseRequest,
|
|
auth: AuthContext = TEMPLATE_READ_DEP,
|
|
):
|
|
result = template_service.use_template(template_id, payload, auth, request.state.trace_id)
|
|
return success_response(request, result.model_dump(mode="json"))
|