workspace— step4
This commit is contained in:
@@ -6,6 +6,7 @@ from typing import Any
|
||||
from urllib import error, request
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from pydantic import ValidationError
|
||||
|
||||
from app.api.dependencies import get_container, require_bearer_token
|
||||
from app.core.container import ServiceContainer
|
||||
@@ -29,6 +30,7 @@ from app.utils.parse_util import (
|
||||
get_shipping_fee,
|
||||
)
|
||||
from surugaya_common import redis_keys
|
||||
from surugaya_common.models import SurugayaOrderDetail
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["scrape"])
|
||||
|
||||
@@ -279,18 +281,18 @@ async def order_add_trade_monitor(
|
||||
|
||||
@router.get(
|
||||
"/trade",
|
||||
response_model=ApiResponse[dict[str, Any]],
|
||||
response_model=ApiResponse[SurugayaOrderDetail],
|
||||
dependencies=[Depends(require_bearer_token)],
|
||||
)
|
||||
async def trade(
|
||||
trade_code: str,
|
||||
container: ServiceContainer = Depends(get_container),
|
||||
) -> ApiResponse[dict[str, Any]]:
|
||||
) -> ApiResponse[SurugayaOrderDetail]:
|
||||
"""
|
||||
获取订单详情
|
||||
"""
|
||||
if not trade_code or trade_code.strip() == "":
|
||||
return ApiResponse[dict[str, Any]](
|
||||
return ApiResponse[SurugayaOrderDetail](
|
||||
success=False,
|
||||
msg="trade_code 不能为空",
|
||||
data=None,
|
||||
@@ -298,7 +300,7 @@ async def trade(
|
||||
)
|
||||
|
||||
if container.session_store._redis is None:
|
||||
return ApiResponse[dict[str, Any]](
|
||||
return ApiResponse[SurugayaOrderDetail](
|
||||
success=False,
|
||||
msg="Redis 未配置",
|
||||
data=None,
|
||||
@@ -323,17 +325,29 @@ async def trade(
|
||||
approximate=True,
|
||||
)
|
||||
|
||||
return ApiResponse[dict[str, Any]](
|
||||
return ApiResponse[SurugayaOrderDetail](
|
||||
success=False,
|
||||
msg="未找到该交易",
|
||||
data=None,
|
||||
code=404,
|
||||
)
|
||||
|
||||
return ApiResponse[dict[str, Any]](
|
||||
# Redis 中存储的是 worker 写入的 SurugayaOrderDetail 序列化结果,
|
||||
# 用共享契约校验并类型化;历史脏数据校验失败时降级为结构化错误而非 500。
|
||||
try:
|
||||
order_detail = SurugayaOrderDetail.model_validate_json(trade_data)
|
||||
except ValidationError as exc:
|
||||
return ApiResponse[SurugayaOrderDetail](
|
||||
success=False,
|
||||
msg=f"订单详情数据结构异常: {exc.error_count()} 处校验失败",
|
||||
data=None,
|
||||
code=500,
|
||||
)
|
||||
|
||||
return ApiResponse[SurugayaOrderDetail](
|
||||
success=True,
|
||||
msg="success",
|
||||
data=json.loads(trade_data),
|
||||
data=order_detail,
|
||||
code=0,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user