diff --git a/tests/test_douyu_gold_recharge_channel.py b/tests/test_douyu_gold_recharge_channel.py index 47aacef..70344f7 100644 --- a/tests/test_douyu_gold_recharge_channel.py +++ b/tests/test_douyu_gold_recharge_channel.py @@ -140,6 +140,32 @@ class TestDouyuGoldRechargeChannel: assert channel == {"gold_recharge_channel": "supplier_api"} + def test_update_config_switching_recharge_channel_and_peace_enabled(self): + from web.backend.routers.douyu import update_config + from web.backend.schemas import DouyuConfigUpdate + + admin_user = self.session.get(User, self.task.created_by) + + # 1. 切换到 supplier_api + req = DouyuConfigUpdate( + gold_recharge_channel="supplier_api", + peace_enabled=True, + ) + res = update_config(req, db=self.session, current=admin_user) + dumped = res.model_dump() + assert dumped["gold_recharge_channel"] == "supplier_api" + assert dumped["peace_enabled"] is True + + # 2. 切换回 wechat_qr + req2 = DouyuConfigUpdate( + gold_recharge_channel="wechat_qr", + peace_enabled=False, + ) + res2 = update_config(req2, db=self.session, current=admin_user) + dumped2 = res2.model_dump() + assert dumped2["gold_recharge_channel"] == "wechat_qr" + assert dumped2["peace_enabled"] is False + def test_recharge_audit_detail_includes_safe_account_identity(self): record_audit( self.session, diff --git a/web/backend/routers/douyu.py b/web/backend/routers/douyu.py index 8bb0094..b6a51e5 100644 --- a/web/backend/routers/douyu.py +++ b/web/backend/routers/douyu.py @@ -368,6 +368,7 @@ def _task_out(task: DouyuTask, *, include_detail: bool = False) -> DouyuTaskOut: def _config_out(config: DouyuConfig) -> DouyuConfigOut: text = lambda field: str(douyu_config_value(field, getattr(config, field))) number = lambda field: int(douyu_config_value(field, getattr(config, field))) + boolean = lambda field: bool(douyu_config_value(field, getattr(config, field))) return DouyuConfigOut( manual_id=text("manual_id"), rid=text("rid"), @@ -383,6 +384,7 @@ def _config_out(config: DouyuConfig) -> DouyuConfigOut: esports_chicken_skin_id=text("esports_chicken_skin_id"), esports_firework_gift_id=text("esports_firework_gift_id"), esports_firework_skin_id=text("esports_firework_skin_id"), + peace_enabled=boolean("peace_enabled"), xpd_act_alias=text("xpd_act_alias"), xpd_act_id=text("xpd_act_id"), xpd_rid=text("xpd_rid"), @@ -578,7 +580,7 @@ def update_config( config = ensure_douyu_config(db) changed_fields = [] for field in DOUYU_CONFIG_FIELDS: - value = getattr(req, field) + value = getattr(req, field, None) if value is None: continue setattr(config, field, value.strip() if isinstance(value, str) else value) diff --git a/web/backend/schemas.py b/web/backend/schemas.py index a4d562c..d131a65 100644 --- a/web/backend/schemas.py +++ b/web/backend/schemas.py @@ -783,6 +783,7 @@ class DouyuConfigOut(BaseModel): esports_chicken_skin_id: str = "0" esports_firework_gift_id: str = "24767" esports_firework_skin_id: str = "3850" + peace_enabled: bool = False xpd_act_alias: str = "20260623KDQFH" xpd_act_id: str = "46195" xpd_rid: str = "9263298" @@ -811,6 +812,7 @@ class DouyuConfigOut(BaseModel): "esports_chicken_skin_id": self.esports_chicken_skin_id, "esports_firework_gift_id": self.esports_firework_gift_id, "esports_firework_skin_id": self.esports_firework_skin_id, + "peace_enabled": self.peace_enabled, "xpd_act_alias": self.xpd_act_alias, "xpd_act_id": self.xpd_act_id, "xpd_rid": self.xpd_rid, @@ -839,6 +841,7 @@ class DouyuConfigUpdate(BaseModel): esports_chicken_skin_id: str | None = None esports_firework_gift_id: str | None = None esports_firework_skin_id: str | None = None + peace_enabled: bool | None = None xpd_act_alias: str | None = None xpd_act_id: str | None = None xpd_rid: str | None = None