修复:首页轮播排除测试账号数据 #215

Merged
marco merged 2 commits from codex/marquee-exclude-test-account into main 2026-08-01 21:35:07 +08:00
Member

背景

线上首页轮播候选记录中,测试账号 u33(11111111111)贡献约 51.8% 的真实记录,导致该用户频繁出现。

改动

  • App 首页轮播真实记录查询排除全部已配置测试账号
  • 后台首页轮播可展示记录同步采用相同过滤口径
  • 同时兼容 TEST_ACCOUNT_PHONE 与 TEST_ACCOUNT_PHONES
  • 测试账号配置变化时立即使轮播查询缓存失效
  • 不删除历史业务数据,仅在展示查询中排除

验证

  • ruff check:通过
  • pytest tests/test_ops_marquee.py -q:1 passed
## 背景 线上首页轮播候选记录中,测试账号 u33(11111111111)贡献约 51.8% 的真实记录,导致该用户频繁出现。 ## 改动 - App 首页轮播真实记录查询排除全部已配置测试账号 - 后台首页轮播可展示记录同步采用相同过滤口径 - 同时兼容 TEST_ACCOUNT_PHONE 与 TEST_ACCOUNT_PHONES - 测试账号配置变化时立即使轮播查询缓存失效 - 不删除历史业务数据,仅在展示查询中排除 ## 验证 - ruff check:通过 - pytest tests/test_ops_marquee.py -q:1 passed
linkeyu added 1 commit 2026-08-01 16:54:05 +08:00
linkeyu added 1 commit 2026-08-01 16:59:16 +08:00
Member

🤖 review-pr 深审结论

🟢 可合并 · 0.9 — 首页轮播(App + 后台)查询排除已配置测试账号,改动干净、定向、有测试;合并最新 main 后实跑 test_ops_marquee.py 1 passed

改动(2 文件 +98/-7)

  • app/repositories/ops_marquee.py
    • App 端 _recent_real_rows 与后台 list_real_records 两条真实记录查询,均在 settings.test_account_phones 非空时加 User.phone.not_in(test_phones)
    • _real_rows_cache 增加 test_phones 维度:测试账号配置变化时缓存立即失效(比对不等 → 重查),避免旧缓存继续带测试号。

核对

  • 铁律1 契约settings.test_account_phonesconfig.py:208)是既有属性,取并集 TEST_ACCOUNT_PHONE(旧单值) + TEST_ACCOUNT_PHONES(新逗号分隔),本 PR 用法正确;测试同时 monkeypatch 两者并断言都被排除。
  • NULL 边界无碍User.phonenullable=Falseuser.py:28),故 NOT IN 的三值逻辑不会误伤真实 NULL 手机号(不存在此类行)。
  • 默认安全if test_phones: 守卫 —— 未配置测试号时不加过滤,行为与原来完全一致。
  • 两条查询口径一致(App 与后台同过滤),只在展示查询排除、不删历史数据(body 亦声明)。

构建 / 测试(已实跑,诚实)

  • 合并最新 main(PR head 已含最新 main)后隔离 worktree 实跑:tests/test_ops_marquee.py1 passed(旧号 + 列表号 + 真实号三方隔离,验证前两者被排除、真实号保留)。
  • 仅跑该定向用例;因过滤默认关闭(未配测试号即 no-op),对其它用例无行为改变。

建议

  • 无阻塞项。

🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 pytest

## 🤖 review-pr 深审结论 🟢 **可合并 · 0.9** — 首页轮播(App + 后台)查询排除已配置测试账号,改动干净、定向、有测试;合并最新 `main` 后实跑 `test_ops_marquee.py` **1 passed**。 ### 改动(2 文件 +98/-7) - `app/repositories/ops_marquee.py`: - App 端 `_recent_real_rows` 与后台 `list_real_records` 两条真实记录查询,均在 `settings.test_account_phones` 非空时加 `User.phone.not_in(test_phones)`。 - `_real_rows_cache` 增加 `test_phones` 维度:**测试账号配置变化时缓存立即失效**(比对不等 → 重查),避免旧缓存继续带测试号。 ### 核对 - **铁律1 契约**:`settings.test_account_phones`(`config.py:208`)是既有属性,取**并集** `TEST_ACCOUNT_PHONE`(旧单值) + `TEST_ACCOUNT_PHONES`(新逗号分隔),本 PR 用法正确;测试同时 monkeypatch 两者并断言都被排除。 - **NULL 边界无碍**:`User.phone` 为 `nullable=False`(`user.py:28`),故 `NOT IN` 的三值逻辑不会误伤真实 NULL 手机号(不存在此类行)。 - **默认安全**:`if test_phones:` 守卫 —— 未配置测试号时不加过滤,行为与原来完全一致。 - 两条查询口径一致(App 与后台同过滤),只在展示查询排除、**不删历史数据**(body 亦声明)。 ### 构建 / 测试(已实跑,诚实) - 合并最新 `main`(PR head 已含最新 main)后隔离 worktree 实跑:`tests/test_ops_marquee.py` → **1 passed**(旧号 + 列表号 + 真实号三方隔离,验证前两者被排除、真实号保留)。 - 仅跑该定向用例;因过滤默认关闭(未配测试号即 no-op),对其它用例无行为改变。 ### 建议 - 无阻塞项。 <sub>🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 pytest</sub>
marco merged commit 84251770b4 into main 2026-08-01 21:35:07 +08:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-app-server#215