feat(douyu-pool): 支持和平精英号池兑换与商品自动刷新,优化号池操作面板

- 扩展号池支持 peace (和平精英/小跑道) 活动 scope,映射 xpd_balance 与 exchange_xpd_goods 任务
- 新增 POST /douyu/pool/refresh-goods 接口与前端一键刷新,支持复用库内有效 CK 自动更新商品快照
- 前端 DouyuPoolPage 升级视觉设计与栅格布局,商品选择器支持按活动类型分类联动
- 修复 DouyuTask.result 类型守卫、account_events actor_id 类型防御与 runner 过滤规则边界值处理
- 验证方式:全量 pytest (797 通过)、pyright (0 错误)、tsc -b 及 ruff format/check 全部通过
This commit is contained in:
yml2213
2026-10-08 13:15:21 +08:00
parent 88422f2f05
commit bb20533c90
8 changed files with 669 additions and 211 deletions
+22 -1
View File
@@ -101,13 +101,33 @@ class TestSupply(_ApiBase):
def test_unsupported_scope_is_400(self):
with pytest.raises(HTTPException) as exc:
pool_router.pool_supply(
scope="peace",
scope="unknown_scope",
commodity_id=COMMODITY,
db=self.session,
current=self.support,
)
assert exc.value.status_code == 400
def test_peace_scope_supply(self):
from web.backend.models import DouyuXpdGoodsSnapshot
xpd_item = DouyuXpdGoodsSnapshot(
commodity_id="xpd_bag_1",
name="和平礼包",
price=8800,
)
self.session.add(xpd_item)
self.session.commit()
supply = pool_router.pool_supply(
scope="peace",
commodity_id="xpd_bag_1",
db=self.session,
current=self.support,
)
assert supply["commodity"]["name"] == "和平礼包"
assert supply["commodity"]["score"] == 8800
class TestExchange(_ApiBase):
def _patch_runner(self, monkeypatch, captured: list):
@@ -151,6 +171,7 @@ class TestExchange(_ApiBase):
assert task.task_type == "exchange_goods"
assert task.handbook_scope == "elite"
assert task.batch_id == result.batch_id
assert task.result is not None
assert task.result["payload"]["commodity_id"] == COMMODITY
assert task.result["payload"]["num"] == 1