3cab3b9055
- admin 列表 status pattern 加 cancelled(客户端会上报用户终止比价) - 上报端点拉 pricebot llm_calls 改 BackgroundTasks 异步回填, 不阻塞上报响应(独立 session) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
"""admin 比价记录 debug:按 user_id / phone 查列表 + 单条详情(含 LLM 每次调用明细 / 原始 payload)。
|
|
|
|
只读。读权限默认即可(get_current_admin),不额外 require_role(查记录是基础 debug 能力)。
|
|
trace_url 无条件下发——admin 是内部 debug 工具,不走 C 端 user.debug_trace_enabled 权限闸。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
|
|
from app.admin.deps import AdminDb, get_current_admin
|
|
from app.admin.repositories import queries
|
|
from app.admin.schemas.common import CursorPage
|
|
from app.admin.schemas.comparison import AdminComparisonDetail, AdminComparisonListItem
|
|
|
|
router = APIRouter(
|
|
prefix="/admin/api/comparison-records",
|
|
tags=["admin-comparison"],
|
|
dependencies=[Depends(get_current_admin)],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"",
|
|
response_model=CursorPage[AdminComparisonListItem],
|
|
summary="比价记录列表(按 user_id/phone 筛 + 分页)",
|
|
)
|
|
def list_comparison_records(
|
|
db: AdminDb,
|
|
user_id: Annotated[int | None, Query()] = None,
|
|
phone: Annotated[str | None, Query(description="手机号前缀")] = None,
|
|
status: Annotated[str | None, Query(pattern="^(success|failed|cancelled)$")] = None,
|
|
business_type: Annotated[str | None, Query()] = None,
|
|
limit: Annotated[int, Query(ge=1, le=100)] = 20,
|
|
cursor: Annotated[int | None, Query()] = None,
|
|
) -> CursorPage[AdminComparisonListItem]:
|
|
items, next_cursor, total = queries.list_comparison_records(
|
|
db, user_id=user_id, phone=phone, status=status,
|
|
business_type=business_type, limit=limit, cursor=cursor,
|
|
)
|
|
return CursorPage(
|
|
items=[AdminComparisonListItem.model_validate(r) for r in items],
|
|
next_cursor=next_cursor,
|
|
total=total,
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/{record_id}",
|
|
response_model=AdminComparisonDetail,
|
|
summary="比价记录详情(含 LLM 每次调用明细 + 原始 payload)",
|
|
)
|
|
def get_comparison_record(record_id: int, db: AdminDb) -> AdminComparisonDetail:
|
|
rec = queries.get_comparison_record(db, record_id)
|
|
if rec is None:
|
|
raise HTTPException(status_code=404, detail="记录不存在")
|
|
return AdminComparisonDetail.model_validate(rec)
|