workspace— step4

This commit is contained in:
2026-06-09 18:22:55 +08:00
parent 5ceabe9c9a
commit 66aebcf565
8 changed files with 535 additions and 10 deletions
+21 -7
View File
@@ -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,
)