Files
junhong_cmp_fiber/openspec/changes/scope-expiry-reminder-to-current-asset/tasks.md
邹进 713045a657
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 12m9s
fix: 第1批 M9 H5 进入资产的临期个人通知写入即已读
H5 进入资产时已同步弹窗展示临期提醒,通知中心再记未读会重复提醒;
通知按剩余天数每天新增一条,保持未读会持续累积红点。
直发通知载荷新增可选 mark_read,仅临期个人通知设置,其他直发通知与店铺临期通知仍为未读。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:45:20 +09:00

2.7 KiB
Raw Blame History

1. 停用个人客户预发布

  • 1.1 internal/infrastructure/packageexpiry/reminder_publisher.go 的 Publish 去掉给绑定客户批量写个人通知的循环,保留 appendShopNotification。

2. 进入资产时提醒

  • 2.1 pkg/constants/redis.go 新增去重键(客户 ID + 资产标识 + 上海日期)及 TTL 计算(当天结束加缓冲)。
  • 2.2 资产信息服务按当前资产复用 packageexpiry 最终到期推算;命中窗口时依次:检查键 → 经 Outbox 写 package.expiring 个人通知(事件号 pex:资产:到期日:剩余天数:客户)→ SET NX → 抢到才返回字段;写通知失败不占键不返回;Redis 不可用按未提醒处理。
  • 2.3 资产信息响应 DTO 新增临期提醒字段(剩余天数、到期时间、等级),更新接口说明。

3. 通知中心过滤

  • 3.1 个人通知列表、未读数与“全部已读”对 type = package.expiring AND ref_type = asset 只保留 ref_key 等于当前资产标识(卡 ICCID;设备虚拟号,空则 IMEI)的记录,其他类型不变,入参不变。

4. 文档与测试环境验证

  • 4.1 gofmt、go build ./cmd/api ./cmd/worker、go run cmd/gendocs/main.go。
  • 4.2 按 ENG-TEST-001(测试库 junhong_cmp_test、Redis DB 6)构造同一客户绑定两个临期资产:进入 A 只返回 A 的字段并新增 A 的通知,通知中心与未读数只含 A;在 A 中“全部已读”后 B 的临期通知仍未读;同一天再次进入 A 不返回字段、不新增通知;清理键模拟第二天后再次提醒;客户 B 进入 A 独立提醒一次;非临期通知不受过滤。
  • 4.3 手动触发每日扫描:不再给个人客户写临期通知,店铺通知照常。
  • 4.4 运行 openspec validate --all 与 ./scripts/context-health.sh。

5. 临期个人通知写入即已读

  • 5.1 internal/application/notification/delivery.go:直发载荷新增可选 mark_read(默认 false);deliverOne 标记为 true 时写 is_read=true、read_at=now;审计 after_data 按实际已读状态记录。
  • 5.2 internal/infrastructure/packageexpiry/reminder_publisher.go 的 appendNotification 设置 mark_read=true;appendShopNotification 不变。
  • 5.3 测试环境验证(AGENTS.md 规定自动化测试 N/A,不写单元测试):临期个人通知以已读创建;换货发货、自动续费等直发通知仍为未读;店铺临期通知仍为未读。
  • 5.4 gofmt、go build ./cmd/api ./cmd/worker、go run cmd/gendocs/main.go(已通过,接口文档无变化);部署后测试环境验证:进入卡 89860624590014594318(已造好临期数据,10-20 到期)后,新通知 is_read=true,个人未读数不变。