# 通知系统模块 ## 概述 通知系统提供实时消息推送、智能摘要合并和个性化偏好设置,确保用户不错过重要互动但也不被过度打扰。 ## 数据模型 ### 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条) - 下拉面板支持滚动加载更多 - 点击通知跳转到目标页面并自动标记已读 - "查看全部"链接跳转到通知中心