Files
junhong_cmp_fiber/docs/tech-inapp-notifications/发布与下游接入清单.md
2026-07-24 16:07:18 +08:00

48 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 公共站内通知发布与下游接入清单
## 下游生产者契约
业务事务必须先生成稳定 `event_id`,并与业务事实在同一事务写入公共 Outbox。载荷版本固定为 `1`,调用 `EnqueueTask` 时传 struct 或 map禁止传预序列化 `[]byte`
明确后台账号事件使用 `notification.admin.direct.requested`,载荷为 `AdminDirectPayload`;个人客户事件使用 `notification.personal_customer.direct.requested`;后台动态事件使用 `notification.admin.dynamic.requested`,目标只允许:
- `account + 稳定真实申请人账号 ID`
- `platform_role + 平台角色 ID`
- `shop + 目标店铺 ID`
动态店铺目标只产生当前启用主账号和当前可用业务员,不沿层级扩散。无接收人是正常终态。同一事件必须复用原 `event_id`,不得在重试时生成新 ID。
新增业务通知类型必须在代码注册表中明确:稳定类型、类别、级别、固定纯文本模板、允许模板字段、接收人类型和允许 `ref_type`。不得透传任意标题、正文、HTML、URL、Token、Secret、回调原文或长期附件地址。
## 目标与期限
通知只保存受控 `ref_type/ref_id/ref_key`。后台目标接口只返回前端白名单 `target_type` 和结构化 ID/Key并再次复核当前权限拥有通知不授予资源权限。
- 审批结果不自动过期,数据保留 365 天。
- 套餐临期必须携带业务到期时间,数据保留 180 天。
- 同步异常默认最多展示 30 天,数据保留 180 天。
- 系统告警默认展示 30 天、最长 365 天,数据保留 365 天。
## 测试环境发布顺序
1. 进入维护窗口并确认下游生产者尚未启用。
2. 执行迁移 `000168_create_notification``000169_add_shop_business_owner`,核对无外键表、唯一索引、查询索引及店铺业务员普通索引。
3. 发布 Worker确认三个通知 Outbox 事件消费者、公共 `outbox:deliver` Handler 和每天 02:15 的 `notification:cleanup` 已注册。
4. 发布 API核对后台、C 端路由和 OpenAPI静态 `/read-all``/unread-count``/unread-summary` 必须可达。
5. 发布匹配的前端版本并按前端联调契约验收。
6. 最后启用 UR#33、UR#97、审批结果等下游生产者,避免消费者未就绪时制造不可见积压。
## 运行门禁与恢复
- 监控公共 Outbox pending/delivering/final failed、Asynq 重试与失败、通知 `no_recipient`、模板/解析失败和每日清理删除数。
- 出现永久模板错误、持续数据库错误、Outbox 积压或清理长期失败时,先停止对应下游生产者,不删除业务事实和已写通知。
- 已入队但未完成的事件继续使用原 `event_id` 恢复;不得要求用户重复提交或给同一业务生成新事件。
- 通知表已有事实后禁止执行 down 删除;应用回滚保留 `tb_notification` 和店铺业务员字段,修复后前向恢复。
- 不清理 Audit Event、Integration Log、Domain Ledger 或 Outbox不使用通知列表替代业务审计。
## 当前验证状态
已完成路由、RouteSpec、集中式文档 Handler、Worker 消费者、模板、清理 Handler/调度和组合根的静态核对;已生成 `docs/admin-openapi.yaml`,并通过 `gofmt``git diff --check``go build ./...` 和 OpenSpec 校验。
按测试环境 Change 豁免,尚未执行真实 PostgreSQL 迁移、Redis/Relay/Asynq 端到端、真实认证 HTTP、并发重复消费或浏览器人工验收这些门禁保持在任务 6.1、6.3、6.6,不能据此声明生产验收通过。