- Added new modules for advisor compliance, KYC sessions, and script templates, enhancing the advisor agent's capabilities. - Implemented a comprehensive API structure under the `/api/advisor-agent` prefix, ensuring clear organization and access to new features. - Established database models and repositories for compliance rules and KYC sessions, facilitating robust data management. - Integrated exception handling and response models to improve error management and user feedback. - Updated settings to include new configurations for compliance and KYC features, ensuring flexibility and adaptability. This update significantly expands the advisor agent's functionality, providing essential tools for compliance and customer interaction while maintaining a structured API design.
96 lines
3.1 KiB
Python
96 lines
3.1 KiB
Python
"""Template APIs."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Query, Request
|
|
|
|
from app.api.advisor_auth_adapter import AdvisorAuthContext, get_advisor_auth, require_advisor_permission
|
|
from app.model.advisor_schemas import TemplateCreate, TemplateUpdate, TemplateUseRequest
|
|
from app.service.script_template_service import ScriptTemplateService
|
|
from app.api.advisor_http import advisor_ok as _advisor_ok
|
|
|
|
router = APIRouter(prefix="/api/advisor-agent/script-templates", tags=["advisor-agent-script-templates"])
|
|
AUTH_CONTEXT_DEP = Depends(get_advisor_auth)
|
|
TEMPLATE_READ_DEP = Depends(require_advisor_permission("template:read"))
|
|
TEMPLATE_WRITE_DEP = Depends(require_advisor_permission("template:write"))
|
|
template_service = ScriptTemplateService()
|
|
|
|
|
|
@router.get("/ping")
|
|
def ping(request: Request, auth: AdvisorAuthContext = AUTH_CONTEXT_DEP):
|
|
return _advisor_ok(request, {"module": "templates", "status": "ready"})
|
|
|
|
|
|
@router.get("/search")
|
|
def search_templates(
|
|
request: Request,
|
|
auth: AdvisorAuthContext = 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 _advisor_ok(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.get("")
|
|
def list_templates(
|
|
request: Request,
|
|
auth: AdvisorAuthContext = 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 _advisor_ok(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.post("")
|
|
def create_template(
|
|
request: Request,
|
|
payload: TemplateCreate,
|
|
auth: AdvisorAuthContext = TEMPLATE_WRITE_DEP,
|
|
):
|
|
result = template_service.create_template(payload, auth)
|
|
return _advisor_ok(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.put("/{template_id}")
|
|
def update_template(
|
|
template_id: int,
|
|
request: Request,
|
|
payload: TemplateUpdate,
|
|
auth: AdvisorAuthContext = TEMPLATE_WRITE_DEP,
|
|
):
|
|
result = template_service.update_template(template_id, payload, auth)
|
|
return _advisor_ok(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.delete("/{template_id}")
|
|
def delete_template(
|
|
template_id: int,
|
|
request: Request,
|
|
auth: AdvisorAuthContext = TEMPLATE_WRITE_DEP,
|
|
):
|
|
result = template_service.soft_delete_template(template_id, auth)
|
|
return _advisor_ok(request, result.model_dump(mode="json"))
|
|
|
|
|
|
@router.post("/{template_id}/use")
|
|
def use_template(
|
|
template_id: int,
|
|
request: Request,
|
|
payload: TemplateUseRequest,
|
|
auth: AdvisorAuthContext = TEMPLATE_READ_DEP,
|
|
):
|
|
result = template_service.use_template(template_id, payload, auth, request.state.trace_id)
|
|
return _advisor_ok(request, result.model_dump(mode="json")) |