Files
rakuten-api/app/trading/worker/models.py
T
q792602257andClaude Opus 4.6 07107094a7 实现下单任务网关与本地 worker
按 docs/order-gateway.md 落地:第三个部署单元 app.gateway(:31109)承担任务队列
+ 状态镜像;本地 worker 在 app.trading.worker 内,按 RAKUTEN_ORDER_GATEWAY_URL
决定是否启动。规格 §5 最关键约束已守:租约过期绝不自动重投,恢复只能 reclaim,
worker 收到 lease_count>1 时先核对站点订单。

站点交互(加购/下单/付款/订单列表反查)按规格 §10 留接口缝,site_interact.py
全部 NotImplementedError,verify.py 恒返回 unknown——等真实账号实测后再填,
不写猜测的提交逻辑。

310 个测试全绿,覆盖规格 §9 验收清单 12 条;架构测试守住三方互不 import。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-27 16:25:20 +08:00

29 lines
980 B
Python

"""worker 侧数据模型:不引用网关的 Pydantic 模型
worker 通过 HTTP 与网关交互,看到的只有 JSON。这里定义 worker 自己用来表达
「领到的任务」「核对结论」的数据类——结构上对应网关响应,但**不 import**
app.gateway 的任何东西,保证架构边界(worker → shared,禁止 worker → gateway)。
OrderState / TaskStatus 枚举在 app.shared.task_state,两侧共用同一份取值表。
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any
@dataclass(slots=True)
class LeaseTask:
"""worker 从网关领到的任务
对应网关 GET /api/orders/lease 的 LeaseData,但用 dataclass 表达——worker
内部不依赖网关侧的 Pydantic 模型。
"""
task_id: str
site: str
intent: dict[str, Any] = field(default_factory=dict)
lease_expires_at: str = ""
lease_count: int = 1
known_state: str | None = None