用途:端到端实现应用内通知,将职责拆分为事件、写入器、投递层与前端状态四部分,避免把事件与投递直接耦合而导致离线用户永久收不到通知。
主要能力:后端数据模型以 notifications 表存储 user_id、type、title、body、action_url、read_at、created_at,并对列表查询与未读计数建立索引;将创建逻辑集中在一个写入器函数中,投递采用 fire-and-forget,失败不影响主流程;写入器在事务提交后调用,避免回滚后残留通知;对可能重复触发的事件使用幂等键。投递层基于 SSE 注册连接并即时下发通知,连接时立即推送未读计数。已读接口使用 updateMany 并带 userId 条件以防越权。前端区分未读计数与通知列表两份状态,收到新通知时前插缓存而非失效重取;标记已读采用乐观更新,在 onMutate 中同步更新徽标与列表;铃铛 UI 徽标上限显示 99+ 并提供包含计数的 aria-label。
使用方式:资料给出目录与代码片段形式的实现步骤,涉及数据库表结构与索引、SSE 接口、读取/全部已读接口、前端 hook 与列表查询等。必要命令与代码保持原样,正文不重复长代码。
适用场景与限制:适用于已有用户体系并需要实时或近实时通知的应用;多实例部署需将内存注册表替换为 Redis Pub/Sub,提供方未展开具体实现。实时投递方式、持久化需求与多设备同步需按上下文确认。除资料所述内容外,其他细节暂未提供。