Files
group_xinghuo_jinrong/app/api/templates.py
T

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"))