Files
2026-09-13 22:21:49 +08:00

100 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""草稿/调仓/发送路由(业务在 service/advisor/drafts.py,路由只做编排 + 透传 JWT/trace_id)。"""
from fastapi import APIRouter, Depends, Query, Request
from sqlalchemy.ext.asyncio import AsyncSession
from api.advisor._auth import extract_auth
from api.deps import require_advisor
from config.deps import get_db
from model.sys_user import SysUser
from schemas.advisor import DraftSaveReq, RebalanceRunReq, TalkScriptReq
from service.advisor import drafts as drafts_service
from utils.response import success
router = APIRouter()
@router.get("/drafts", summary="草稿列表(代理 Agent draft/list)")
async def list_drafts(
request: Request,
customer_id: int | None = Query(None),
status: str | None = Query(None, max_length=16),
page: int = Query(1, ge=1),
page_size: int = Query(10, ge=1, le=100),
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(
await drafts_service.list_drafts(
db, user, auth_header=auth, trace_id=trace_id,
customer_id=customer_id, status=status, page=page, page_size=page_size,
)
)
@router.get("/drafts/{draft_id}", summary="草稿详情(代理 Agent draft/{id})")
async def get_draft(
draft_id: str,
request: Request,
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(await drafts_service.get_draft(db, user, auth_header=auth, trace_id=trace_id, draft_id=draft_id))
@router.put("/drafts/{draft_id}/save", summary="编辑保存(代理 Agent + 本地镜像快照)")
async def save_draft(
draft_id: str,
req: DraftSaveReq,
request: Request,
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(await drafts_service.save_draft(db, user, auth_header=auth, trace_id=trace_id, draft_id=draft_id, req=req))
@router.post("/drafts/{draft_id}/discard", summary="废弃草稿(回写 Agent)")
async def discard_draft(
draft_id: str,
request: Request,
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(await drafts_service.discard_draft(db, user, auth_header=auth, trace_id=trace_id, draft_id=draft_id))
@router.post("/drafts/{draft_id}/send", summary="发送终审 + 手动发送(工作台本地)")
async def send_draft(
draft_id: str,
request: Request,
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(await drafts_service.send_draft(db, user, auth_header=auth, trace_id=trace_id, draft_id=draft_id))
@router.post("/rebalance/run", summary="手动触发调仓再平衡(异步受理)")
async def run_rebalance(
req: RebalanceRunReq,
request: Request,
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(await drafts_service.run_rebalance(db, user, auth_header=auth, trace_id=trace_id, req=req))
@router.post("/talk-script", summary="生成沟通话术草稿(同步,超时降级)")
async def talk_script(
req: TalkScriptReq,
request: Request,
user: SysUser = Depends(require_advisor),
db: AsyncSession = Depends(get_db),
):
auth, trace_id = extract_auth(request)
return success(await drafts_service.generate_talk_script(db, user, auth_header=auth, trace_id=trace_id, req=req))