e1bd0e3ef7
改了什么:新增新版大盘日期窗口聚合、广告收益拆分、比价耗时字段、美团 CPS 拉单入库与大盘展示,并同步反馈审核和邀请奖励下线口径。 验证:python -m pytest tests/test_admin_read.py tests/test_admin_write.py tests/test_compare_record.py tests/test_invite.py tests/test_feedback.py -q。
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
"""admin 比价记录 debug:按 user_id / phone 查列表 + 单条详情。"""
|
|
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="比价记录列表")
|
|
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="比价记录详情")
|
|
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)
|