# 通知系统 ## 概述 支持三类通知:系统公告(广播)、个人通知(定向)、事件驱动通知。 ### 数据库 `notifications` 表(迁移 `011_add_notifications.sql`): | 字段 | 类型 | 说明 | |------|------|------| | `scope` | `'all'` / `'user'` | 广播或定向 | | `user_id` | INTEGER / NULL | 定向时指定用户 | | `type` | VARCHAR | 通知类型 | | `title` | VARCHAR | 标题 | | `content` | TEXT | 正文 | | `priority` | `high` / `normal` / `low` | 优先级 | | `link` | VARCHAR | 点击跳转路径 | | `is_read` | BOOLEAN | 已读标记 | | `created_at` | TIMESTAMPTZ | 创建时间 | | `expires_at` | TIMESTAMPTZ | 过期时间 | ### 通知类型 | type | 触发场景 | scope | |------|---------|-------| | `system_maintenance` | 系统维护 | `all` | | `version_update` | 版本更新 | `all` | | `payment_success` | 支付成功 | `user` | | `member_expiry_soon` | 会员即将到期 | `user` | | `member_expired` | 会员已过期 | `user` | ## API ### 用户接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/notifications` | 通知列表(分页) | | PUT | `/api/notifications/{id}/read` | 标记已读 | | PUT | `/api/notifications/read-all` | 全部已读 | | GET | `/api/notifications/unread-count` | 未读数量 | ### 管理员接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/admin/notifications` | 创建通知(需管理员 JWT) | | DELETE | `/api/admin/notifications/{id}` | 删除通知 | ## 命令行工具 ```bash # 系统广播 ./scripts/send-notification.sh \ --all \ --type system_maintenance \ --title "系统维护通知" \ --content "将于今晚 22:00 进行系统维护,预计耗时 1 小时" \ --priority high # 定向通知 ./scripts/send-notification.sh \ --user 1 \ --type payment_success \ --title "会员开通成功" \ --content "您已成功开通包月会员" \ --link "/pkg-extra/upgrade/upgrade" \ --dev # 预览(不执行) ./scripts/send-notification.sh --all --type version_update --title "测试" --dry-run ``` 参数说明: | 参数 | 必填 | 说明 | |------|------|------| | `--all` | 是* | 发送给所有用户 | | `--user ` | 是* | 发送给指定用户(二选一) | | `--type ` | 是 | 通知类型 | | `--title ` | 是 | 标题 | | `--content ` | 否 | 正文 | | `--priority ` | 否 | 默认 `normal` | | `--link ` | 否 | 跳转路径 | | `--dev` | 否 | 操作开发库 | | `--dry-run` | 否 | 预览不执行 | ## 后续规划 此功能将在后续集成到网页管理端,管理员可通过后台界面: 1. 查看通知列表 2. 创建系统公告(选择类型、填写内容、设置优先级) 3. 发送个人通知(选择用户) 4. 管理已有通知(编辑、删除) 5. 查看发送记录