通知系统模块
概述
通知系统提供实时消息推送、智能摘要合并和个性化偏好设置,确保用户不错过重要互动但也不被过度打扰。
数据模型
Notification (通知)
| 字段 |
类型 |
说明 |
| id |
Int @id |
主键 |
| userId |
Int |
用户ID |
| type |
NotifType |
通知类型 |
| title |
String |
标题 |
| content |
String? |
内容 |
| link |
String? |
跳转链接 |
| isRead |
Boolean @default(false) |
是否已读 |
| createdAt |
DateTime |
创建时间 |
NotifType 枚举
| 值 |
说明 |
| COMMENT_REPLY |
评论回复通知 |
| COMMENT_LIKE |
评论点赞通知 |
| TOPIC_REPLY |
话题回复通知 |
| SYSTEM |
系统通知 |
| DIGEST 🆕 |
智能摘要合并通知 |
智能通知摘要 (Smart Notification Digest) 🆕
功能说明
当用户在短时间内收到多条同类通知时,系统自动合并为一条摘要通知,减少通知轰炸。
合并规则
- 同类通知(同 type + 同来源)在 30 分钟内合并
- 摘要格式: "你的帖子收到了 5 条新回复"
- 原始通知保留但标记为已读,摘要通知链接到通知详情页
定时任务
- 脚本:
scripts/notification-digest.mjs
- 每 3 小时合并一次未读通知
- 仅对超过 3 条同类通知的用户生成摘要
通知偏好设置 🆕
功能
用户可在通知中心设置通知偏好,控制接收哪些类型的通知。
API
| 路由 |
方法 |
功能 |
| /api/user/notification-prefs |
GET |
获取通知偏好 |
| /api/user/notification-prefs |
PUT |
更新通知偏好 |
可配置项
| 偏好键 |
说明 |
默认值 |
| comment_reply |
评论回复通知 |
true |
| comment_like |
评论点赞通知 |
true |
| topic_reply |
话题回复通知 |
true |
| system |
系统通知 |
true |
| digest |
智能摘要通知 |
true |
| email_digest |
邮件摘要(未实现) |
false |
通知中心页面 🆕
路由
/user/notifications — 通知中心独立页面
功能
- 分类标签页: 全部 / 回复 / 点赞 / 系统 / 摘要
- 批量标记已读
- 单条跳转到目标内容
- 未读数量徽章
- 通知偏好设置入口
组件
NotificationCenter (src/components/forum/NotificationCenter.tsx)
API 接口
通知核心 API
| 路由 |
方法 |
功能 |
| /api/notifications |
GET |
获取通知列表(含未读数) |
| /api/notifications |
PUT |
标记通知为已读(支持指定ids或全部已读) |
| /api/notifications/unread-count |
GET |
获取未读通知数量(轻量级) |
通知偏好 API 🆕
| 路由 |
方法 |
功能 |
| /api/user/notification-prefs |
GET |
获取通知偏好设置 |
| /api/user/notification-prefs |
PUT |
更新通知偏好设置 |
自动触发规则
以下操作自动生成通知:
| 操作 |
通知对象 |
通知类型 |
| 回复评论 |
评论作者 |
COMMENT_REPLY |
| 点赞评论 |
评论作者 |
COMMENT_LIKE |
| 回复话题 |
话题作者 |
TOPIC_REPLY |
| 系统公告 |
所有用户 |
SYSTEM |
| 摘要合并 |
用户本人 |
DIGEST |
前端组件
| 组件 |
文件 |
说明 |
| NotificationBell |
src/components/forum/NotificationBell.tsx |
导航栏通知铃铛(红点/下拉面板/自动已读) |
| NotificationCenter |
src/components/forum/NotificationCenter.tsx 🆕 |
通知中心页面(分类标签/批量操作/偏好入口) |
NotificationBell 交互
- 未读时显示红色圆点徽章
- 点击展开快捷通知面板(最近5条)
- 下拉面板支持滚动加载更多
- 点击通知跳转到目标页面并自动标记已读
- "查看全部"链接跳转到通知中心