feat(docs): 完成星撰平台M2基础用户系统完整设计文档体系
✨ 新增功能设计文档: - M2基础用户系统数据库设计(12个核心表,RBAC权限模型) - M2基础用户系统接口设计(41个API接口,含排序功能) - 完整的项目需求文档和开发计划 📚 核心文档结构: - 数据库设计:支持树形结构、软删除、审计日志的完整用户权限体系 - 接口设计:包含认证、用户管理、角色权限、组织架构、字典标签等9大模块 - 排序功能:新增7个排序接口,支持拖拽和批量操作 - 项目规划:从MVP到完整生态的4阶段开发计划 🔧 技术栈确定: - 后端:Elysia + Bun.js + MySQL + Redis + Elasticsearch - 前端:Vue.js/React + TypeScript - 部署:Docker + Docker Compose - 测试:Vitest + 完整测试规范 📋 设计亮点: - 无外键约束设计,应用层维护数据完整性 - 树形结构支持(path、level字段优化查询) - 完整的权限继承机制和权限快照 - 支持root超级管理员和多级角色体系 - 标签系统和智能推荐功能 - 统一的响应格式和错误码规范 🎯 覆盖功能: - 用户认证与管理(注册、登录、权限控制) - RBAC角色权限体系(树形角色、权限继承) - 组织架构管理(多级组织、人员分配) - 数据字典与标签系统 - 完整的排序和数据导入导出功能 📈 文档规模: - 数据库设计:38KB,922行 - 接口设计:55KB,3024行 - 总计:约100KB的详细技术文档 🔄 配套更新: - 更新Elysia后端开发规范 - 完善健康检查控制器 - 统一项目代码规范和注释规范
This commit is contained in:
parent
2ee70e5d42
commit
2518986557
@ -13,7 +13,6 @@ alwaysApply: true
|
|||||||
│ ├── controllers/ # 路由与业务入口
|
│ ├── controllers/ # 路由与业务入口
|
||||||
│ ├── services/ # 业务逻辑
|
│ ├── services/ # 业务逻辑
|
||||||
│ ├── models/ # 数据模型与类型定义
|
│ ├── models/ # 数据模型与类型定义
|
||||||
│ ├── middlewares/ # 中间件
|
|
||||||
│ ├── plugins/ # Elysia 插件
|
│ ├── plugins/ # Elysia 插件
|
||||||
│ ├── utils/ # 工具函数
|
│ ├── utils/ # 工具函数
|
||||||
│ ├── validators/ # 参数校验,注意!!!所有的参数校验必须挡在此目录中,目录结构遵照路由结构
|
│ ├── validators/ # 参数校验,注意!!!所有的参数校验必须挡在此目录中,目录结构遵照路由结构
|
||||||
|
7312
aiChat/003-cursor_.md
Normal file
7312
aiChat/003-cursor_.md
Normal file
File diff suppressed because it is too large
Load Diff
2078
aiChat/004-cursor_.md
Normal file
2078
aiChat/004-cursor_.md
Normal file
File diff suppressed because it is too large
Load Diff
3024
prd/M2-基础用户系统-接口设计.md
Normal file
3024
prd/M2-基础用户系统-接口设计.md
Normal file
File diff suppressed because it is too large
Load Diff
922
prd/M2-基础用户系统-数据库设计.md
Normal file
922
prd/M2-基础用户系统-数据库设计.md
Normal file
@ -0,0 +1,922 @@
|
|||||||
|
# M2 - 基础用户系统 - 数据库设计文档
|
||||||
|
|
||||||
|
## 1. 概述
|
||||||
|
|
||||||
|
本文档为星撰个人综合平台的基础用户系统(M2阶段)提供详细的数据库设计方案。设计遵循以下原则:
|
||||||
|
|
||||||
|
- **无外键约束**:所有关联关系通过应用层代码维护,提高性能和灵活性
|
||||||
|
- **软删除机制**:所有业务表支持软删除,保留数据历史
|
||||||
|
- **树形结构支持**:角色、组织、权限、字典等支持无限层级的树形结构
|
||||||
|
- **审计追踪**:完整的创建、修改记录
|
||||||
|
- **高性能**:合理的索引设计,支持大数据量查询
|
||||||
|
- **扩展性**:预留扩展字段,支持未来功能演进
|
||||||
|
|
||||||
|
## 2. 数据库 ER 图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
%% 用户相关
|
||||||
|
sys_users {
|
||||||
|
bigint id PK "主键,雪花ID"
|
||||||
|
varchar(50) username UK "用户名"
|
||||||
|
varchar(100) email UK "邮箱"
|
||||||
|
varchar(20) mobile "手机号"
|
||||||
|
varchar(255) password_hash "密码哈希"
|
||||||
|
varchar(255) avatar "头像URL"
|
||||||
|
varchar(100) nickname "昵称"
|
||||||
|
varchar(20) status "状态:字典[user_status]"
|
||||||
|
tinyint gender "性别:0未知,1男,2女"
|
||||||
|
date birthday "生日"
|
||||||
|
varchar(500) bio "个人简介"
|
||||||
|
int login_count "登录次数"
|
||||||
|
datetime last_login_at "最后登录时间"
|
||||||
|
varchar(45) last_login_ip "最后登录IP"
|
||||||
|
int failed_attempts "失败尝试次数"
|
||||||
|
datetime locked_until "锁定截止时间"
|
||||||
|
boolean is_root "是否超级管理员"
|
||||||
|
json extra "扩展信息JSON"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
bigint updated_by "更新人"
|
||||||
|
datetime updated_at "更新时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
int version "乐观锁版本号"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 角色相关
|
||||||
|
sys_roles {
|
||||||
|
bigint id PK "主键"
|
||||||
|
varchar(50) code UK "角色代码"
|
||||||
|
varchar(100) name "角色名称"
|
||||||
|
text description "角色描述"
|
||||||
|
bigint pid "父角色ID"
|
||||||
|
varchar(500) path "层级路径,如:/1/2/3/"
|
||||||
|
int level "层级深度"
|
||||||
|
int sort_order "排序号"
|
||||||
|
varchar(20) status "状态:字典[role_status]"
|
||||||
|
boolean is_system "是否系统角色"
|
||||||
|
json permissions_snapshot "权限快照"
|
||||||
|
json extra "扩展信息"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
bigint updated_by "更新人"
|
||||||
|
datetime updated_at "更新时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
int version "版本号"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 权限相关
|
||||||
|
sys_permissions {
|
||||||
|
bigint id PK "主键"
|
||||||
|
varchar(100) code UK "权限代码"
|
||||||
|
varchar(100) name "权限名称"
|
||||||
|
varchar(20) type "类型:menu,button,api,data"
|
||||||
|
varchar(50) resource "资源标识"
|
||||||
|
varchar(50) action "操作:read,write,delete等"
|
||||||
|
text description "权限描述"
|
||||||
|
bigint pid "父权限ID"
|
||||||
|
varchar(500) path "层级路径"
|
||||||
|
int level "层级深度"
|
||||||
|
int sort_order "排序号"
|
||||||
|
varchar(20) status "状态"
|
||||||
|
json meta "元数据"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
bigint updated_by "更新人"
|
||||||
|
datetime updated_at "更新时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 组织架构
|
||||||
|
sys_organizations {
|
||||||
|
bigint id PK "主键"
|
||||||
|
varchar(100) code UK "组织代码"
|
||||||
|
varchar(200) name "组织名称"
|
||||||
|
varchar(200) full_name "组织全称"
|
||||||
|
text description "组织描述"
|
||||||
|
bigint pid "父组织ID"
|
||||||
|
varchar(500) path "层级路径"
|
||||||
|
int level "层级深度"
|
||||||
|
varchar(20) type "类型:字典[org_type]"
|
||||||
|
varchar(20) status "状态:字典[org_status]"
|
||||||
|
int sort_order "排序号"
|
||||||
|
varchar(100) leader_id "负责人ID"
|
||||||
|
varchar(200) address "地址"
|
||||||
|
varchar(50) phone "电话"
|
||||||
|
json extra "扩展信息"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
bigint updated_by "更新人"
|
||||||
|
datetime updated_at "更新时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
int version "版本号"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 字典管理
|
||||||
|
sys_dict_types {
|
||||||
|
bigint id PK "主键"
|
||||||
|
varchar(50) code UK "字典类型代码"
|
||||||
|
varchar(100) name "字典类型名称"
|
||||||
|
text description "描述"
|
||||||
|
bigint pid "父字典类型ID"
|
||||||
|
varchar(500) path "层级路径"
|
||||||
|
int level "层级深度"
|
||||||
|
varchar(20) status "状态:active,inactive"
|
||||||
|
boolean is_system "是否系统字典"
|
||||||
|
int sort_order "排序号"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
bigint updated_by "更新人"
|
||||||
|
datetime updated_at "更新时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_dict_items {
|
||||||
|
bigint id PK "主键"
|
||||||
|
bigint type_id "字典类型ID"
|
||||||
|
varchar(50) item_key "字典项键"
|
||||||
|
varchar(200) item_value "字典项值"
|
||||||
|
varchar(100) label "显示标签"
|
||||||
|
varchar(200) label_en "英文标签"
|
||||||
|
text description "描述"
|
||||||
|
bigint pid "父字典项ID"
|
||||||
|
varchar(500) path "层级路径"
|
||||||
|
int level "层级深度"
|
||||||
|
int sort_order "排序号"
|
||||||
|
varchar(20) status "状态"
|
||||||
|
varchar(50) css_class "样式类"
|
||||||
|
varchar(50) color "颜色值"
|
||||||
|
json extra "扩展属性"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
bigint updated_by "更新人"
|
||||||
|
datetime updated_at "更新时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 标签管理
|
||||||
|
sys_tags {
|
||||||
|
bigint id PK "主键"
|
||||||
|
varchar(50) name UK "标签名称"
|
||||||
|
varchar(50) type "标签类型:user,role,content"
|
||||||
|
varchar(50) color "标签颜色"
|
||||||
|
text description "描述"
|
||||||
|
int usage_count "使用次数"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
datetime deleted_at "删除时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 关联表
|
||||||
|
sys_user_roles {
|
||||||
|
bigint id PK "主键"
|
||||||
|
bigint user_id "用户ID"
|
||||||
|
bigint role_id "角色ID"
|
||||||
|
datetime expired_at "过期时间"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_role_permissions {
|
||||||
|
bigint id PK "主键"
|
||||||
|
bigint role_id "角色ID"
|
||||||
|
bigint permission_id "权限ID"
|
||||||
|
boolean is_half "是否半选(树形权限)"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_user_organizations {
|
||||||
|
bigint id PK "主键"
|
||||||
|
bigint user_id "用户ID"
|
||||||
|
bigint organization_id "组织ID"
|
||||||
|
boolean is_primary "是否主组织"
|
||||||
|
varchar(100) position "职位"
|
||||||
|
datetime joined_at "加入时间"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_user_tags {
|
||||||
|
bigint id PK "主键"
|
||||||
|
bigint user_id "用户ID"
|
||||||
|
bigint tag_id "标签ID"
|
||||||
|
bigint created_by "创建人"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 操作日志
|
||||||
|
sys_operation_logs {
|
||||||
|
bigint id PK "主键"
|
||||||
|
bigint user_id "用户ID"
|
||||||
|
varchar(100) username "用户名"
|
||||||
|
varchar(50) module "模块"
|
||||||
|
varchar(50) action "操作"
|
||||||
|
varchar(200) target "操作对象"
|
||||||
|
bigint target_id "对象ID"
|
||||||
|
text request_data "请求数据"
|
||||||
|
text response_data "响应数据"
|
||||||
|
varchar(20) status "状态:success,fail"
|
||||||
|
varchar(45) ip "IP地址"
|
||||||
|
varchar(200) user_agent "用户代理"
|
||||||
|
bigint duration "耗时(ms)"
|
||||||
|
text error_msg "错误信息"
|
||||||
|
datetime created_at "创建时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 关系定义
|
||||||
|
sys_users ||--o{ sys_user_roles : "拥有"
|
||||||
|
sys_roles ||--o{ sys_user_roles : "被分配"
|
||||||
|
sys_roles ||--o{ sys_role_permissions : "拥有"
|
||||||
|
sys_permissions ||--o{ sys_role_permissions : "被分配"
|
||||||
|
sys_users ||--o{ sys_user_organizations : "属于"
|
||||||
|
sys_organizations ||--o{ sys_user_organizations : "包含"
|
||||||
|
sys_users ||--o{ sys_user_tags : "拥有"
|
||||||
|
sys_tags ||--o{ sys_user_tags : "被使用"
|
||||||
|
sys_dict_types ||--o{ sys_dict_items : "包含"
|
||||||
|
sys_roles ||--o| sys_roles : "继承自"
|
||||||
|
sys_organizations ||--o| sys_organizations : "隶属于"
|
||||||
|
sys_permissions ||--o| sys_permissions : "包含"
|
||||||
|
sys_dict_items ||--o| sys_dict_items : "子项"
|
||||||
|
sys_dict_types ||--o| sys_dict_types : "包含"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. 表结构详细设计
|
||||||
|
|
||||||
|
### 3.1 用户表 (sys_users)
|
||||||
|
|
||||||
|
用户系统的核心表,存储用户基本信息和认证信息。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_users` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键,雪花ID',
|
||||||
|
`username` VARCHAR(50) NOT NULL COMMENT '用户名,唯一',
|
||||||
|
`email` VARCHAR(100) NOT NULL COMMENT '邮箱,唯一',
|
||||||
|
`mobile` VARCHAR(20) NULL COMMENT '手机号',
|
||||||
|
`password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希值',
|
||||||
|
`avatar` VARCHAR(255) NULL COMMENT '头像URL',
|
||||||
|
`nickname` VARCHAR(100) NULL COMMENT '昵称',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态:active-正常,inactive-未激活,locked-锁定,disabled-禁用',
|
||||||
|
`gender` TINYINT NULL DEFAULT 0 COMMENT '性别:0-未知,1-男,2-女',
|
||||||
|
`birthday` DATE NULL COMMENT '生日',
|
||||||
|
`bio` VARCHAR(500) NULL COMMENT '个人简介',
|
||||||
|
`login_count` INT NOT NULL DEFAULT 0 COMMENT '登录次数',
|
||||||
|
`last_login_at` DATETIME NULL COMMENT '最后登录时间',
|
||||||
|
`last_login_ip` VARCHAR(45) NULL COMMENT '最后登录IP',
|
||||||
|
`failed_attempts` INT NOT NULL DEFAULT 0 COMMENT '连续失败尝试次数',
|
||||||
|
`locked_until` DATETIME NULL COMMENT '锁定截止时间',
|
||||||
|
`is_root` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否超级管理员',
|
||||||
|
`extra` JSON NULL COMMENT '扩展信息,JSON格式',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`updated_by` BIGINT NULL COMMENT '更新人ID',
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间,软删除标记',
|
||||||
|
`version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_username` ON `sys_users` (`username`, `deleted_at`);
|
||||||
|
CREATE UNIQUE INDEX `uk_email` ON `sys_users` (`email`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_mobile` ON `sys_users` (`mobile`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_users` (`status`);
|
||||||
|
CREATE INDEX `idx_created_at` ON `sys_users` (`created_at`);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_users` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_is_root` ON `sys_users` (`is_root`);
|
||||||
|
CREATE INDEX `idx_last_login` ON `sys_users` (`last_login_at`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 角色表 (sys_roles)
|
||||||
|
|
||||||
|
支持树形结构的角色管理表,实现角色继承。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_roles` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`code` VARCHAR(50) NOT NULL COMMENT '角色代码,唯一',
|
||||||
|
`name` VARCHAR(100) NOT NULL COMMENT '角色名称',
|
||||||
|
`description` TEXT NULL COMMENT '角色描述',
|
||||||
|
`pid` BIGINT NULL DEFAULT 0 COMMENT '父角色ID,0表示顶级',
|
||||||
|
`path` VARCHAR(500) NULL COMMENT '层级路径,如:/1/2/3/',
|
||||||
|
`level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
|
||||||
|
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '同级排序号',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态:active-启用,inactive-禁用',
|
||||||
|
`is_system` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否系统内置角色',
|
||||||
|
`permissions_snapshot` JSON NULL COMMENT '权限快照,用于优化查询',
|
||||||
|
`extra` JSON NULL COMMENT '扩展信息',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`updated_by` BIGINT NULL COMMENT '更新人ID',
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间',
|
||||||
|
`version` INT NOT NULL DEFAULT 1 COMMENT '版本号',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_code` ON `sys_roles` (`code`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_name` ON `sys_roles` (`name`);
|
||||||
|
CREATE INDEX `idx_pid` ON `sys_roles` (`pid`);
|
||||||
|
CREATE INDEX `idx_path` ON `sys_roles` (`path`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_roles` (`status`);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_roles` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_is_system` ON `sys_roles` (`is_system`);
|
||||||
|
CREATE INDEX `idx_sort` ON `sys_roles` (`pid`, `sort_order`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 权限表 (sys_permissions)
|
||||||
|
|
||||||
|
细粒度的权限定义表,支持多种权限类型。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_permissions` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`code` VARCHAR(100) NOT NULL COMMENT '权限代码,唯一',
|
||||||
|
`name` VARCHAR(100) NOT NULL COMMENT '权限名称',
|
||||||
|
`type` VARCHAR(20) NOT NULL COMMENT '权限类型:menu-菜单,button-按钮,api-接口,data-数据',
|
||||||
|
`resource` VARCHAR(50) NULL COMMENT '资源标识,如:user,role,post',
|
||||||
|
`action` VARCHAR(50) NULL COMMENT '操作标识,如:read,create,update,delete',
|
||||||
|
`description` TEXT NULL COMMENT '权限描述',
|
||||||
|
`pid` BIGINT NULL DEFAULT 0 COMMENT '父权限ID',
|
||||||
|
`path` VARCHAR(500) NULL COMMENT '层级路径',
|
||||||
|
`level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
|
||||||
|
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态',
|
||||||
|
`meta` JSON NULL COMMENT '元数据,如:图标、路由等',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`updated_by` BIGINT NULL COMMENT '更新人ID',
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_code` ON `sys_permissions` (`code`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_type` ON `sys_permissions` (`type`);
|
||||||
|
CREATE INDEX `idx_resource_action` ON `sys_permissions` (`resource`, `action`);
|
||||||
|
CREATE INDEX `idx_pid` ON `sys_permissions` (`pid`);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_permissions` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_permissions` (`status`);
|
||||||
|
CREATE INDEX `idx_sort` ON `sys_permissions` (`pid`, `sort_order`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.4 组织架构表 (sys_organizations)
|
||||||
|
|
||||||
|
支持多级组织结构,用于用户归属管理。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_organizations` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`code` VARCHAR(100) NOT NULL COMMENT '组织代码,唯一',
|
||||||
|
`name` VARCHAR(200) NOT NULL COMMENT '组织名称',
|
||||||
|
`full_name` VARCHAR(200) NULL COMMENT '组织全称',
|
||||||
|
`description` TEXT NULL COMMENT '组织描述',
|
||||||
|
`pid` BIGINT NULL DEFAULT 0 COMMENT '父组织ID',
|
||||||
|
`path` VARCHAR(500) NULL COMMENT '层级路径',
|
||||||
|
`level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
|
||||||
|
`type` VARCHAR(20) NULL COMMENT '组织类型:company,department,team',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态',
|
||||||
|
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
`leader_id` BIGINT NULL COMMENT '负责人ID',
|
||||||
|
`address` VARCHAR(200) NULL COMMENT '地址',
|
||||||
|
`phone` VARCHAR(50) NULL COMMENT '联系电话',
|
||||||
|
`extra` JSON NULL COMMENT '扩展信息',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`updated_by` BIGINT NULL COMMENT '更新人ID',
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间',
|
||||||
|
`version` INT NOT NULL DEFAULT 1 COMMENT '版本号',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织架构表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_code` ON `sys_organizations` (`code`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_name` ON `sys_organizations` (`name`);
|
||||||
|
CREATE INDEX `idx_pid` ON `sys_organizations` (`pid`);
|
||||||
|
CREATE INDEX `idx_path` ON `sys_organizations` (`path`);
|
||||||
|
CREATE INDEX `idx_type` ON `sys_organizations` (`type`);
|
||||||
|
CREATE INDEX `idx_leader_id` ON `sys_organizations` (`leader_id`);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_organizations` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_organizations` (`status`);
|
||||||
|
CREATE INDEX `idx_sort` ON `sys_organizations` (`pid`, `sort_order`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.5 字典类型表 (sys_dict_types)
|
||||||
|
|
||||||
|
管理系统中的各类数据字典,支持树形结构。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_dict_types` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`code` VARCHAR(50) NOT NULL COMMENT '字典类型代码,唯一',
|
||||||
|
`name` VARCHAR(100) NOT NULL COMMENT '字典类型名称',
|
||||||
|
`description` TEXT NULL COMMENT '描述',
|
||||||
|
`pid` BIGINT NULL DEFAULT 0 COMMENT '父字典类型ID,支持字典分类',
|
||||||
|
`path` VARCHAR(500) NULL COMMENT '层级路径',
|
||||||
|
`level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态:active-启用,inactive-禁用',
|
||||||
|
`is_system` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否系统内置',
|
||||||
|
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`updated_by` BIGINT NULL COMMENT '更新人ID',
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_code` ON `sys_dict_types` (`code`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_name` ON `sys_dict_types` (`name`);
|
||||||
|
CREATE INDEX `idx_pid` ON `sys_dict_types` (`pid`);
|
||||||
|
CREATE INDEX `idx_path` ON `sys_dict_types` (`path`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_dict_types` (`status`);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_dict_types` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_is_system` ON `sys_dict_types` (`is_system`);
|
||||||
|
CREATE INDEX `idx_sort` ON `sys_dict_types` (`pid`, `sort_order`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.6 字典项表 (sys_dict_items)
|
||||||
|
|
||||||
|
存储具体的字典数据,支持树形结构。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_dict_items` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`type_id` BIGINT NOT NULL COMMENT '字典类型ID',
|
||||||
|
`item_key` VARCHAR(50) NOT NULL COMMENT '字典项键',
|
||||||
|
`item_value` VARCHAR(200) NOT NULL COMMENT '字典项值',
|
||||||
|
`label` VARCHAR(100) NOT NULL COMMENT '显示标签',
|
||||||
|
`label_en` VARCHAR(200) NULL COMMENT '英文标签',
|
||||||
|
`description` TEXT NULL COMMENT '描述',
|
||||||
|
`pid` BIGINT NULL DEFAULT 0 COMMENT '父字典项ID,支持树形字典',
|
||||||
|
`path` VARCHAR(500) NULL COMMENT '层级路径',
|
||||||
|
`level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
|
||||||
|
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态',
|
||||||
|
`css_class` VARCHAR(50) NULL COMMENT 'CSS样式类',
|
||||||
|
`color` VARCHAR(50) NULL COMMENT '颜色值,如:#FF0000',
|
||||||
|
`extra` JSON NULL COMMENT '扩展属性',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`updated_by` BIGINT NULL COMMENT '更新人ID',
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典项表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_type_key` ON `sys_dict_items` (`type_id`, `item_key`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_type_id` ON `sys_dict_items` (`type_id`);
|
||||||
|
CREATE INDEX `idx_pid` ON `sys_dict_items` (`pid`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_dict_items` (`status`);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_dict_items` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_sort` ON `sys_dict_items` (`type_id`, `sort_order`);
|
||||||
|
CREATE INDEX `idx_key` ON `sys_dict_items` (`item_key`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.7 标签表 (sys_tags)
|
||||||
|
|
||||||
|
灵活的标签系统,可用于用户、内容等多种场景。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_tags` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`name` VARCHAR(50) NOT NULL COMMENT '标签名称',
|
||||||
|
`type` VARCHAR(50) NULL DEFAULT 'user' COMMENT '标签类型:user-用户标签,role-角色标签,content-内容标签',
|
||||||
|
`color` VARCHAR(50) NULL COMMENT '标签颜色,如:#FF0000',
|
||||||
|
`description` TEXT NULL COMMENT '描述',
|
||||||
|
`usage_count` INT NOT NULL DEFAULT 0 COMMENT '使用次数统计',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
`deleted_at` DATETIME NULL COMMENT '删除时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='标签表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_name_type` ON `sys_tags` (`name`, `type`, `deleted_at`);
|
||||||
|
CREATE INDEX `idx_type` ON `sys_tags` (`type`);
|
||||||
|
CREATE INDEX `idx_usage_count` ON `sys_tags` (`usage_count` DESC);
|
||||||
|
CREATE INDEX `idx_deleted_at` ON `sys_tags` (`deleted_at`);
|
||||||
|
CREATE INDEX `idx_name` ON `sys_tags` (`name`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.8 用户角色关联表 (sys_user_roles)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_user_roles` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||||||
|
`role_id` BIGINT NOT NULL COMMENT '角色ID',
|
||||||
|
`expired_at` DATETIME NULL COMMENT '过期时间,NULL表示永久',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_user_role` ON `sys_user_roles` (`user_id`, `role_id`);
|
||||||
|
CREATE INDEX `idx_user_id` ON `sys_user_roles` (`user_id`);
|
||||||
|
CREATE INDEX `idx_role_id` ON `sys_user_roles` (`role_id`);
|
||||||
|
CREATE INDEX `idx_expired_at` ON `sys_user_roles` (`expired_at`);
|
||||||
|
CREATE INDEX `idx_created_at` ON `sys_user_roles` (`created_at`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.9 角色权限关联表 (sys_role_permissions)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_role_permissions` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`role_id` BIGINT NOT NULL COMMENT '角色ID',
|
||||||
|
`permission_id` BIGINT NOT NULL COMMENT '权限ID',
|
||||||
|
`is_half` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否半选状态(树形权限)',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_role_permission` ON `sys_role_permissions` (`role_id`, `permission_id`);
|
||||||
|
CREATE INDEX `idx_role_id` ON `sys_role_permissions` (`role_id`);
|
||||||
|
CREATE INDEX `idx_permission_id` ON `sys_role_permissions` (`permission_id`);
|
||||||
|
CREATE INDEX `idx_is_half` ON `sys_role_permissions` (`is_half`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.10 用户组织关联表 (sys_user_organizations)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_user_organizations` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||||||
|
`organization_id` BIGINT NOT NULL COMMENT '组织ID',
|
||||||
|
`is_primary` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否主组织',
|
||||||
|
`position` VARCHAR(100) NULL COMMENT '职位',
|
||||||
|
`joined_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户组织关联表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_user_org` ON `sys_user_organizations` (`user_id`, `organization_id`);
|
||||||
|
CREATE INDEX `idx_user_id` ON `sys_user_organizations` (`user_id`);
|
||||||
|
CREATE INDEX `idx_organization_id` ON `sys_user_organizations` (`organization_id`);
|
||||||
|
CREATE INDEX `idx_is_primary` ON `sys_user_organizations` (`is_primary`);
|
||||||
|
CREATE INDEX `idx_joined_at` ON `sys_user_organizations` (`joined_at`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.11 用户标签关联表 (sys_user_tags)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_user_tags` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||||||
|
`tag_id` BIGINT NOT NULL COMMENT '标签ID',
|
||||||
|
`created_by` BIGINT NULL COMMENT '创建人ID',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户标签关联表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE UNIQUE INDEX `uk_user_tag` ON `sys_user_tags` (`user_id`, `tag_id`);
|
||||||
|
CREATE INDEX `idx_user_id` ON `sys_user_tags` (`user_id`);
|
||||||
|
CREATE INDEX `idx_tag_id` ON `sys_user_tags` (`tag_id`);
|
||||||
|
CREATE INDEX `idx_created_at` ON `sys_user_tags` (`created_at`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.12 操作日志表 (sys_operation_logs)
|
||||||
|
|
||||||
|
记录所有重要操作,用于审计和问题追踪。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表结构
|
||||||
|
CREATE TABLE `sys_operation_logs` (
|
||||||
|
`id` BIGINT NOT NULL COMMENT '主键',
|
||||||
|
`user_id` BIGINT NULL COMMENT '操作用户ID',
|
||||||
|
`username` VARCHAR(100) NULL COMMENT '操作用户名',
|
||||||
|
`module` VARCHAR(50) NOT NULL COMMENT '操作模块',
|
||||||
|
`action` VARCHAR(50) NOT NULL COMMENT '操作类型',
|
||||||
|
`target` VARCHAR(200) NULL COMMENT '操作对象描述',
|
||||||
|
`target_id` BIGINT NULL COMMENT '操作对象ID',
|
||||||
|
`request_data` TEXT NULL COMMENT '请求数据',
|
||||||
|
`response_data` TEXT NULL COMMENT '响应数据',
|
||||||
|
`status` VARCHAR(20) NOT NULL COMMENT '操作状态:success-成功,fail-失败',
|
||||||
|
`ip` VARCHAR(45) NULL COMMENT 'IP地址',
|
||||||
|
`user_agent` VARCHAR(200) NULL COMMENT '用户代理',
|
||||||
|
`duration` BIGINT NULL COMMENT '操作耗时(毫秒)',
|
||||||
|
`error_msg` TEXT NULL COMMENT '错误信息',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
|
||||||
|
|
||||||
|
-- 索引设计
|
||||||
|
CREATE INDEX `idx_user_id` ON `sys_operation_logs` (`user_id`);
|
||||||
|
CREATE INDEX `idx_module_action` ON `sys_operation_logs` (`module`, `action`);
|
||||||
|
CREATE INDEX `idx_target` ON `sys_operation_logs` (`target_id`);
|
||||||
|
CREATE INDEX `idx_status` ON `sys_operation_logs` (`status`);
|
||||||
|
CREATE INDEX `idx_created_at` ON `sys_operation_logs` (`created_at`);
|
||||||
|
CREATE INDEX `idx_ip` ON `sys_operation_logs` (`ip`);
|
||||||
|
-- 分区建议:按月分区
|
||||||
|
ALTER TABLE `sys_operation_logs` PARTITION BY RANGE (YEAR(created_at) * 100 + MONTH(created_at)) (
|
||||||
|
PARTITION p202401 VALUES LESS THAN (202402),
|
||||||
|
PARTITION p202402 VALUES LESS THAN (202403),
|
||||||
|
-- 继续添加更多分区...
|
||||||
|
PARTITION p_future VALUES LESS THAN MAXVALUE
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. 设计特点说明
|
||||||
|
|
||||||
|
### 4.1 软删除机制
|
||||||
|
|
||||||
|
- 所有业务表都包含 `deleted_at` 字段
|
||||||
|
- 删除操作只更新 `deleted_at` 为当前时间
|
||||||
|
- 唯一索引都包含 `deleted_at`,确保已删除数据不影响唯一性
|
||||||
|
- 查询时默认过滤 `deleted_at IS NULL`
|
||||||
|
- 提供回收站功能,可恢复误删数据
|
||||||
|
|
||||||
|
### 4.2 树形结构支持
|
||||||
|
|
||||||
|
- 使用 `pid` 存储父节点ID,0或NULL表示顶级节点
|
||||||
|
- `path` 字段存储完整路径(如:/1/2/3/),便于查询所有子节点
|
||||||
|
- `level` 记录层级深度,优化层级查询
|
||||||
|
- 支持无限层级嵌套
|
||||||
|
- 提供递归查询的存储过程优化性能
|
||||||
|
|
||||||
|
### 4.3 审计追踪
|
||||||
|
|
||||||
|
- 所有表包含 `created_by`、`created_at`、`updated_by`、`updated_at`
|
||||||
|
- 重要操作记录到 `sys_operation_logs` 表
|
||||||
|
- 支持数据变更历史追踪
|
||||||
|
- 可配置敏感操作的详细日志记录
|
||||||
|
|
||||||
|
### 4.4 性能优化
|
||||||
|
|
||||||
|
- 合理的索引设计,覆盖常用查询场景
|
||||||
|
- 使用JSON字段存储扩展信息,减少表结构变更
|
||||||
|
- 权限快照机制,避免复杂的联表查询
|
||||||
|
- 日志表按月分区,提高查询效率
|
||||||
|
- 高频查询数据缓存到Redis
|
||||||
|
|
||||||
|
### 4.5 扩展性设计
|
||||||
|
|
||||||
|
- 预留 `extra` JSON字段,支持灵活扩展
|
||||||
|
- 版本号字段支持乐观锁
|
||||||
|
- 标签系统支持多种业务场景
|
||||||
|
- 字典系统支持动态配置
|
||||||
|
- 支持插件化扩展新功能
|
||||||
|
|
||||||
|
### 4.6 数据完整性
|
||||||
|
|
||||||
|
- 虽然不使用外键,但通过应用层保证引用完整性
|
||||||
|
- 删除操作需级联处理关联数据
|
||||||
|
- 使用事务保证操作原子性
|
||||||
|
- 定期数据一致性检查任务
|
||||||
|
|
||||||
|
### 4.7 安全性设计
|
||||||
|
|
||||||
|
- 密码使用bcrypt算法加密,成本因子不低于12
|
||||||
|
- 登录失败次数限制,防止暴力破解
|
||||||
|
- 操作日志记录IP和UserAgent,便于审计
|
||||||
|
- 敏感数据(如手机号)部分存储时脱敏
|
||||||
|
- SQL注入防护通过参数化查询实现
|
||||||
|
|
||||||
|
## 5. 初始化数据
|
||||||
|
|
||||||
|
### 5.1 系统初始用户
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 创建root超级管理员
|
||||||
|
INSERT INTO `sys_users` (`id`, `username`, `email`, `password_hash`, `nickname`, `is_root`, `status`)
|
||||||
|
VALUES (1, 'root', 'root@system.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewYpfQaXUIkRrPJK', '超级管理员', TRUE, 'active');
|
||||||
|
|
||||||
|
-- 创建系统管理员
|
||||||
|
INSERT INTO `sys_users` (`id`, `username`, `email`, `password_hash`, `nickname`, `status`)
|
||||||
|
VALUES (2, 'admin', 'admin@system.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewYpfQaXUIkRrPJK', '系统管理员', 'active');
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 系统初始角色
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 超级管理员角色
|
||||||
|
INSERT INTO `sys_roles` (`id`, `code`, `name`, `description`, `is_system`, `status`)
|
||||||
|
VALUES (1, 'super_admin', '超级管理员', '拥有系统所有权限', TRUE, 'active');
|
||||||
|
|
||||||
|
-- 系统管理员角色
|
||||||
|
INSERT INTO `sys_roles` (`id`, `code`, `name`, `description`, `is_system`, `status`, `pid`, `path`, `level`)
|
||||||
|
VALUES (2, 'admin', '系统管理员', '负责系统配置和用户管理', TRUE, 'active', 1, '/1/2/', 2);
|
||||||
|
|
||||||
|
-- 普通用户角色
|
||||||
|
INSERT INTO `sys_roles` (`id`, `code`, `name`, `description`, `is_system`, `status`)
|
||||||
|
VALUES (3, 'user', '普通用户', '普通注册用户默认角色', TRUE, 'active');
|
||||||
|
|
||||||
|
-- 分配角色
|
||||||
|
INSERT INTO `sys_user_roles` (`user_id`, `role_id`) VALUES (1, 1);
|
||||||
|
INSERT INTO `sys_user_roles` (`user_id`, `role_id`) VALUES (2, 2);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 基础字典数据
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 字典分类
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`) VALUES
|
||||||
|
(1, 'system', '系统字典', TRUE),
|
||||||
|
(2, 'business', '业务字典', TRUE);
|
||||||
|
|
||||||
|
-- 用户状态字典
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
|
||||||
|
(10, 'user_status', '用户状态', TRUE, 1, '/1/10/');
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `color`, `sort_order`) VALUES
|
||||||
|
(10, 'active', 'active', '正常', '#52c41a', 1),
|
||||||
|
(10, 'inactive', 'inactive', '未激活', '#faad14', 2),
|
||||||
|
(10, 'locked', 'locked', '锁定', '#ff4d4f', 3),
|
||||||
|
(10, 'disabled', 'disabled', '禁用', '#d9d9d9', 4);
|
||||||
|
|
||||||
|
-- 组织类型字典
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
|
||||||
|
(11, 'org_type', '组织类型', TRUE, 1, '/1/11/');
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
|
||||||
|
(11, 'company', 'company', '公司', 1),
|
||||||
|
(11, 'department', 'department', '部门', 2),
|
||||||
|
(11, 'team', 'team', '团队', 3),
|
||||||
|
(11, 'group', 'group', '小组', 4);
|
||||||
|
|
||||||
|
-- 性别字典
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
|
||||||
|
(12, 'gender', '性别', TRUE, 1, '/1/12/');
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
|
||||||
|
(12, '0', '0', '未知', 1),
|
||||||
|
(12, '1', '1', '男', 2),
|
||||||
|
(12, '2', '2', '女', 3);
|
||||||
|
|
||||||
|
-- 权限类型字典
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
|
||||||
|
(13, 'permission_type', '权限类型', TRUE, 1, '/1/13/');
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `color`, `sort_order`) VALUES
|
||||||
|
(13, 'menu', 'menu', '菜单', '#1890ff', 1),
|
||||||
|
(13, 'button', 'button', '按钮', '#52c41a', 2),
|
||||||
|
(13, 'api', 'api', '接口', '#fa8c16', 3),
|
||||||
|
(13, 'data', 'data', '数据', '#722ed1', 4);
|
||||||
|
|
||||||
|
-- 标签类型字典
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
|
||||||
|
(14, 'tag_type', '标签类型', TRUE, 1, '/1/14/');
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
|
||||||
|
(14, 'user', 'user', '用户标签', 1),
|
||||||
|
(14, 'role', 'role', '角色标签', 2),
|
||||||
|
(14, 'content', 'content', '内容标签', 3);
|
||||||
|
|
||||||
|
-- 地区字典(示例)
|
||||||
|
INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
|
||||||
|
(20, 'region', '地区', TRUE, 2, '/2/20/');
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
|
||||||
|
(20, 'CN', 'CN', '中国', 1);
|
||||||
|
|
||||||
|
INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `pid`, `path`, `sort_order`) VALUES
|
||||||
|
(20, 'CN_BJ', 'CN_BJ', '北京', (SELECT id FROM sys_dict_items WHERE item_key = 'CN'), NULL, 1),
|
||||||
|
(20, 'CN_SH', 'CN_SH', '上海', (SELECT id FROM sys_dict_items WHERE item_key = 'CN'), NULL, 2);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.4 基础权限数据
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 系统管理权限
|
||||||
|
INSERT INTO `sys_permissions` (`id`, `code`, `name`, `type`, `resource`, `action`) VALUES
|
||||||
|
(1, 'system:manage', '系统管理', 'menu', 'system', 'manage'),
|
||||||
|
(2, 'user:read', '查看用户', 'api', 'user', 'read'),
|
||||||
|
(3, 'user:create', '创建用户', 'api', 'user', 'create'),
|
||||||
|
(4, 'user:update', '更新用户', 'api', 'user', 'update'),
|
||||||
|
(5, 'user:delete', '删除用户', 'api', 'user', 'delete'),
|
||||||
|
(6, 'role:read', '查看角色', 'api', 'role', 'read'),
|
||||||
|
(7, 'role:create', '创建角色', 'api', 'role', 'create'),
|
||||||
|
(8, 'role:update', '更新角色', 'api', 'role', 'update'),
|
||||||
|
(9, 'role:delete', '删除角色', 'api', 'role', 'delete');
|
||||||
|
|
||||||
|
-- 为超级管理员角色分配所有权限
|
||||||
|
INSERT INTO `sys_role_permissions` (`role_id`, `permission_id`)
|
||||||
|
SELECT 1, id FROM `sys_permissions`;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.5 初始组织架构
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 创建顶级组织
|
||||||
|
INSERT INTO `sys_organizations` (`id`, `code`, `name`, `type`, `status`) VALUES
|
||||||
|
(1, 'ROOT', '星撰集团', 'company', 'active');
|
||||||
|
|
||||||
|
-- 创建部门
|
||||||
|
INSERT INTO `sys_organizations` (`id`, `code`, `name`, `type`, `pid`, `path`, `level`, `status`) VALUES
|
||||||
|
(2, 'TECH', '技术部', 'department', 1, '/1/2/', 2, 'active'),
|
||||||
|
(3, 'PRODUCT', '产品部', 'department', 1, '/1/3/', 2, 'active'),
|
||||||
|
(4, 'OPERATE', '运营部', 'department', 1, '/1/4/', 2, 'active');
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.6 示例标签数据
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 用户标签
|
||||||
|
INSERT INTO `sys_tags` (`name`, `type`, `color`, `description`) VALUES
|
||||||
|
('VIP', 'user', '#ff4d4f', 'VIP用户'),
|
||||||
|
('活跃用户', 'user', '#52c41a', '经常登录的用户'),
|
||||||
|
('内容创作者', 'user', '#1890ff', '发布优质内容的用户'),
|
||||||
|
('新用户', 'user', '#faad14', '注册不满30天的用户');
|
||||||
|
|
||||||
|
-- 角色标签
|
||||||
|
INSERT INTO `sys_tags` (`name`, `type`, `color`, `description`) VALUES
|
||||||
|
('核心角色', 'role', '#ff4d4f', '系统核心角色'),
|
||||||
|
('业务角色', 'role', '#1890ff', '业务相关角色');
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. 注意事项
|
||||||
|
|
||||||
|
1. **ID生成策略**:建议使用雪花算法生成分布式ID,避免自增ID的局限性
|
||||||
|
2. **密码存储**:必须使用bcrypt或类似的强哈希算法,成本因子不低于12
|
||||||
|
3. **并发控制**:使用version字段实现乐观锁,防止并发更新冲突
|
||||||
|
4. **查询优化**:对于树形结构的查询,优先使用path字段而非递归查询
|
||||||
|
5. **数据归档**:日志表建议定期归档,避免单表数据量过大
|
||||||
|
6. **缓存策略**:权限、字典等数据变更不频繁,建议缓存到Redis
|
||||||
|
7. **批量操作**:大批量数据操作时使用批量SQL,避免循环单条执行
|
||||||
|
8. **索引维护**:定期分析索引使用情况,删除无用索引,优化查询性能
|
||||||
|
|
||||||
|
## 7. 性能优化建议
|
||||||
|
|
||||||
|
### 7.1 查询优化
|
||||||
|
- 使用覆盖索引减少回表查询
|
||||||
|
- 合理使用联合索引,注意索引顺序
|
||||||
|
- 避免在WHERE子句中对字段进行函数操作
|
||||||
|
- 使用EXPLAIN分析SQL执行计划
|
||||||
|
|
||||||
|
### 7.2 树形结构查询优化
|
||||||
|
```sql
|
||||||
|
-- 查询所有子节点(使用path)
|
||||||
|
SELECT * FROM sys_roles WHERE path LIKE '/1/2/%' AND deleted_at IS NULL;
|
||||||
|
|
||||||
|
-- 查询直接子节点
|
||||||
|
SELECT * FROM sys_roles WHERE pid = 2 AND deleted_at IS NULL ORDER BY sort_order;
|
||||||
|
|
||||||
|
-- 递归查询所有子节点(MySQL 8.0+)
|
||||||
|
WITH RECURSIVE role_tree AS (
|
||||||
|
SELECT * FROM sys_roles WHERE id = 1
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.* FROM sys_roles r
|
||||||
|
INNER JOIN role_tree rt ON r.pid = rt.id
|
||||||
|
)
|
||||||
|
SELECT * FROM role_tree;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.3 权限查询优化
|
||||||
|
```sql
|
||||||
|
-- 使用权限快照避免多表联查
|
||||||
|
SELECT permissions_snapshot FROM sys_roles WHERE id = ?;
|
||||||
|
|
||||||
|
-- 获取用户所有权限(包括角色继承)
|
||||||
|
SELECT DISTINCT p.*
|
||||||
|
FROM sys_permissions p
|
||||||
|
JOIN sys_role_permissions rp ON p.id = rp.permission_id
|
||||||
|
JOIN sys_user_roles ur ON rp.role_id = ur.role_id
|
||||||
|
WHERE ur.user_id = ?
|
||||||
|
AND ur.expired_at IS NULL OR ur.expired_at > NOW()
|
||||||
|
AND p.deleted_at IS NULL;
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. 后续扩展建议
|
||||||
|
|
||||||
|
1. **多租户支持**:预留tenant_id字段,支持SaaS化部署
|
||||||
|
2. **数据权限**:扩展权限表,支持行级数据权限控制
|
||||||
|
3. **审批流程**:增加工作流相关表,支持复杂的审批场景
|
||||||
|
4. **消息通知**:增加消息表,支持站内信、邮件、短信等通知
|
||||||
|
5. **登录日志**:独立的登录日志表,记录所有登录尝试
|
||||||
|
6. **配置管理**:系统配置表,支持动态配置管理
|
||||||
|
7. **定时任务**:任务调度表,支持定时任务管理
|
||||||
|
8. **数据字典缓存**:实现字典数据的多级缓存机制
|
||||||
|
|
||||||
|
## 9. 安全建议
|
||||||
|
|
||||||
|
1. **SQL注入防护**:使用参数化查询,避免拼接SQL
|
||||||
|
2. **XSS防护**:对用户输入进行转义处理
|
||||||
|
3. **CSRF防护**:使用Token机制防止跨站请求伪造
|
||||||
|
4. **敏感数据加密**:对敏感字段进行加密存储
|
||||||
|
5. **访问控制**:实施最小权限原则
|
||||||
|
6. **审计日志**:记录所有敏感操作
|
||||||
|
7. **数据备份**:定期备份,异地容灾
|
||||||
|
8. **安全扫描**:定期进行安全漏洞扫描
|
249
prd/M2-基础用户系统-详细设计.back.md
Normal file
249
prd/M2-基础用户系统-详细设计.back.md
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
# M2 - 基础用户系统 - 详细设计 (V2)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 引言
|
||||||
|
|
||||||
|
### 1.1. 文档目的
|
||||||
|
本文档是 "M2 - 基础用户系统" 阶段的 **V2 修订版**,旨在提供一份详尽、准确、可直接用于开发的技术设计方案。V2 版根据反馈进行了全面重构,重点增强了数据库设计的合理性、API定义的完整性,并补充了关键的 `root` 用户机制和标签功能。
|
||||||
|
|
||||||
|
### 1.2. 模块范围
|
||||||
|
本设计覆盖功能点包括:
|
||||||
|
- 用户认证(注册、登录)及 `root` 超级管理员机制。
|
||||||
|
- 用户、角色、权限、组织、字典的CRUD管理,支持层级结构。
|
||||||
|
- 用户标签系统。
|
||||||
|
- 基于角色的访问控制(RBAC)的实现。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 数据库设计 (Revised)
|
||||||
|
|
||||||
|
### 2.1. E-R 图 (Entity-Relationship Diagram)
|
||||||
|
*已更新,包含标签和重构后的字典表*
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
users {
|
||||||
|
bigint id PK
|
||||||
|
varchar(50) username UK
|
||||||
|
varchar(255) email UK
|
||||||
|
varchar(255) password_hash
|
||||||
|
varchar(20) status
|
||||||
|
datetime created_at
|
||||||
|
datetime updated_at
|
||||||
|
}
|
||||||
|
|
||||||
|
roles {
|
||||||
|
bigint id PK
|
||||||
|
varchar(50) name UK
|
||||||
|
text description
|
||||||
|
bigint parent_id FK "nullable, self-ref"
|
||||||
|
datetime created_at
|
||||||
|
datetime updated_at
|
||||||
|
}
|
||||||
|
|
||||||
|
permissions {
|
||||||
|
bigint id PK
|
||||||
|
varchar(50) action UK
|
||||||
|
varchar(50) resource UK
|
||||||
|
text description
|
||||||
|
}
|
||||||
|
|
||||||
|
organizations {
|
||||||
|
bigint id PK
|
||||||
|
varchar(100) name
|
||||||
|
text description
|
||||||
|
bigint parent_id FK "nullable, self-ref"
|
||||||
|
datetime created_at
|
||||||
|
datetime updated_at
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary_types {
|
||||||
|
bigint id PK
|
||||||
|
varchar(50) type_name UK
|
||||||
|
text description
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary_items {
|
||||||
|
bigint id PK
|
||||||
|
bigint type_id FK
|
||||||
|
varchar(50) `key`
|
||||||
|
varchar(255) value
|
||||||
|
int sort_order
|
||||||
|
}
|
||||||
|
|
||||||
|
tags {
|
||||||
|
bigint id PK
|
||||||
|
varchar(50) name UK
|
||||||
|
}
|
||||||
|
|
||||||
|
users ||--o{ user_roles : "has"
|
||||||
|
roles ||--o{ user_roles : "assigned to"
|
||||||
|
roles ||--o{ role_permissions : "has"
|
||||||
|
permissions ||--o{ role_permissions : "granted to"
|
||||||
|
users ||--o{ user_organizations : "belongs to"
|
||||||
|
organizations ||--o{ user_organizations : "has"
|
||||||
|
users ||--o{ user_tags : "has"
|
||||||
|
tags ||--o{ user_tags : "applied to"
|
||||||
|
dictionary_types ||--o{ dictionary_items : "has"
|
||||||
|
|
||||||
|
roles }o..o| roles : "is child of"
|
||||||
|
organizations }o..o| organizations : "is child of"
|
||||||
|
|
||||||
|
user_roles { bigint user_id PK,FK; bigint role_id PK,FK }
|
||||||
|
role_permissions { bigint role_id PK,FK; bigint permission_id PK,FK }
|
||||||
|
user_organizations { bigint user_id PK,FK; bigint organization_id PK,FK }
|
||||||
|
user_tags { bigint user_id PK,FK; bigint tag_id PK,FK }
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2. 表结构定义
|
||||||
|
|
||||||
|
#### `roles` / `organizations`
|
||||||
|
- **`parent_id`**: `BIGINT NULL`, `FOREIGN KEY (parent_id) REFERENCES roles(id) ON DELETE SET NULL`。此字段用于实现树形层级结构。值为`NULL`表示为顶级角色/组织。
|
||||||
|
|
||||||
|
#### `dictionary_types` - 字典类型表
|
||||||
|
| 字段名 | 类型 | 约束 | 描述 |
|
||||||
|
|---------------|---------------|---------------------|----------------------|
|
||||||
|
| `id` | `BIGINT` | `PK`, `AI` | 类型唯一ID |
|
||||||
|
| `type_name` | `VARCHAR(50)` | `UNIQUE`, `NOT NULL`| 字典类型名(如: `user_status`) |
|
||||||
|
| `description` | `TEXT` | | 类型描述 |
|
||||||
|
|
||||||
|
#### `dictionary_items` - 字典条目表
|
||||||
|
| 字段名 | 类型 | 约束 | 描述 |
|
||||||
|
|---------------|----------------|----------------------|----------------------|
|
||||||
|
| `id` | `BIGINT` | `PK`, `AI` | 条目唯一ID |
|
||||||
|
| `type_id` | `BIGINT` | `NOT NULL`, `FK` | 关联到`dictionary_types.id` |
|
||||||
|
| `key` | `VARCHAR(50)` | `NOT NULL` | 键 (程序中使用) |
|
||||||
|
| `value` | `VARCHAR(255)` | `NOT NULL` | 值 (UI中显示) |
|
||||||
|
| `sort_order` | `INT` | `DEFAULT 0` | 排序字段 |
|
||||||
|
*复合唯一键: `(type_id, key)`*
|
||||||
|
|
||||||
|
#### `tags` - 标签表
|
||||||
|
| 字段名 | 类型 | 约束 | 描述 |
|
||||||
|
|--------|---------------|---------------------|------------|
|
||||||
|
| `id` | `BIGINT` | `PK`, `AI` | 标签唯一ID |
|
||||||
|
| `name` | `VARCHAR(50)` | `UNIQUE`, `NOT NULL`| 标签名 |
|
||||||
|
|
||||||
|
#### `user_tags` - 用户标签关联表
|
||||||
|
| 字段名 | 类型 | 约束 | 描述 |
|
||||||
|
|-----------|----------|----------|------------|
|
||||||
|
| `user_id` | `BIGINT` | `PK`, `FK` | 关联用户ID |
|
||||||
|
| `tag_id` | `BIGINT` | `PK`, `FK` | 关联标签ID |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Root 用户与系统初始化
|
||||||
|
|
||||||
|
- **`root` 用户**:
|
||||||
|
- `root` 是一个特殊的超级管理员账户,拥有系统中所有权限。
|
||||||
|
- 此账户 **不可通过 API 创建或删除**。它应在系统首次部署时,通过数据库 **Seeding (种子填充) 脚本** 创建。
|
||||||
|
- `root` 用户的角色是固定的(如 `super_admin`),此角色同样通过 Seeding 创建,并关联所有已定义的权限。
|
||||||
|
- 任何权限校验逻辑都必须对 `root` 用户或 `super_admin` 角色开绿灯。任何API都不能降低 `root` 的权限或删除该用户。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. API 接口设计 (Detailed)
|
||||||
|
|
||||||
|
**Base URL**: `/api/v1`
|
||||||
|
**通用错误响应结构**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 40001, // 详细业务错误码
|
||||||
|
"message": "Validation failed: username must be at least 3 characters.",
|
||||||
|
"data": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.1. Auth - 认证接口 (`/auth`)
|
||||||
|
|
||||||
|
#### `POST /register` - 用户注册
|
||||||
|
- **权限**: Public
|
||||||
|
- **请求体 (`application/json`)**:
|
||||||
|
| 名称 | 类型 | 必填 | 校验规则 | 描述 |
|
||||||
|
|------------|--------|------|----------------------------------------------------|----------------|
|
||||||
|
| `username` | string | 是 | min:3, max:50, 字母/数字/下划线组合 | 用户名 |
|
||||||
|
| `email` | string | 是 | valid email format | 邮箱地址 |
|
||||||
|
| `password` | string | 是 | min:8, max:100, 必须包含大小写字母和数字 | 密码 |
|
||||||
|
- **成功响应 (201 Created)**:
|
||||||
|
```json
|
||||||
|
{ "code": 0, "message": "User registered successfully.", "data": { "id": 1, "username": "newuser", "email": "..." } }
|
||||||
|
```
|
||||||
|
- **异常响应**:
|
||||||
|
| HTTP 码 | 业务码 | 原因 |
|
||||||
|
|---------|----------|----------------------------|
|
||||||
|
| 400 | 40001 | 请求参数不符合校验规则 |
|
||||||
|
| 409 | 40901 | 用户名或邮箱已被占用 |
|
||||||
|
|
||||||
|
#### `POST /login` - 用户登录
|
||||||
|
- **权限**: Public
|
||||||
|
- **请求体 (`application/json`)**:
|
||||||
|
| 名称 | 类型 | 必填 | 校验规则 | 描述 |
|
||||||
|
|------------|--------|------|------------------|------------------|
|
||||||
|
| `username` | string | 是 | - | 用户名或邮箱 |
|
||||||
|
| `password` | string | 是 | - | 密码 |
|
||||||
|
- **成功响应 (200 OK)**:
|
||||||
|
```json
|
||||||
|
{ "code": 0, "message": "Login successful.", "data": { "token": "ey..." } }
|
||||||
|
```
|
||||||
|
- **异常响应**:
|
||||||
|
| HTTP 码 | 业务码 | 原因 |
|
||||||
|
|---------|----------|--------------------------|
|
||||||
|
| 401 | 40101 | 用户名或密码错误 |
|
||||||
|
| 401 | 40102 | 账户被禁用或未激活 |
|
||||||
|
|
||||||
|
---
|
||||||
|
### 3.2. Users - 用户接口 (`/users`)
|
||||||
|
*除特殊说明外,均需认证*
|
||||||
|
|
||||||
|
#### `GET /me` - 获取当前用户信息
|
||||||
|
- **权限**: Authenticated
|
||||||
|
- **成功响应 (200 OK)**: `data` 包含当前用户详细信息、关联的角色和权限列表。
|
||||||
|
|
||||||
|
#### `GET /` - 获取用户列表
|
||||||
|
- **权限**: `read:users`
|
||||||
|
- **查询参数**:
|
||||||
|
| 名称 | 类型 | 必填 | 描述 |
|
||||||
|
|-----------|--------|------|------------------------------------|
|
||||||
|
| `page` | number | 否 | 页码, default 1 |
|
||||||
|
| `pageSize`| number | 否 | 每页数量, default 10 |
|
||||||
|
| `keyword` | string | 否 | 按用户名或邮箱模糊搜索 |
|
||||||
|
- **成功响应 (200 OK)**: `data` 包含 `items` (用户列表) 和 `pagination` (分页信息)。
|
||||||
|
|
||||||
|
#### `PUT /{userId}/status` - 更新用户状态
|
||||||
|
- **权限**: `update:user_status`
|
||||||
|
- **请求体**: `{ "status": "active" }` (status 必须是字典中 `user_status` 类型的值)
|
||||||
|
- **成功响应 (200 OK)**: 返回更新后的用户信息。
|
||||||
|
- **异常响应**:
|
||||||
|
| HTTP 码 | 业务码 | 原因 |
|
||||||
|
|---------|----------|--------------------------|
|
||||||
|
| 403 | 40301 | 试图修改 `root` 用户状态 |
|
||||||
|
| 404 | 40401 | 指定用户不存在 |
|
||||||
|
|
||||||
|
#### `POST /{userId}/tags` - 为用户打标签
|
||||||
|
- **权限**: `update:user_tags`
|
||||||
|
- **请求体**: `{ "tagIds": [1, 2, 3] }`
|
||||||
|
- **成功响应 (204 No Content)**.
|
||||||
|
|
||||||
|
---
|
||||||
|
### 3.3. Roles - 角色接口 (`/roles`)
|
||||||
|
*所有接口均需 `manage:roles` 权限*
|
||||||
|
|
||||||
|
#### `GET /` - 获取角色列表
|
||||||
|
- **描述**: 以树形结构返回所有角色。
|
||||||
|
- **成功响应 (200 OK)**: `data` 是一个包含 `children` 属性的树形数组。
|
||||||
|
|
||||||
|
#### `POST /` - 创建新角色
|
||||||
|
- **请求体**: `{ "name": "editor", "description": "...", "parentId": 1, "permissionIds": [101, 102] }`
|
||||||
|
- **成功响应 (201 Created)**: `data` 包含新创建的角色信息。
|
||||||
|
- **异常响应 (409 Conflict)**: 角色名已存在。
|
||||||
|
|
||||||
|
---
|
||||||
|
*其他模块(Organizations, Dictionaries, Tags)的API将遵循类似的详细设计模式:提供完整的增删改查接口,明确定义权限、请求体、校验规则和所有可能的成功/异常响应。*
|
||||||
|
|
||||||
|
# 补充说明
|
||||||
|
|
||||||
|
1. 你忽略了我在main.md中提到的root用户,所以缺少一类集中管理的接口和机制,请认真阅读
|
||||||
|
2. 接口设计太简陋了,太粗略了,需要把异常情况考虑进去,
|
||||||
|
3. 数据库设计完全无法满足需求,没有pid如何实现层级结构
|
||||||
|
4. 字典确实,无法完成拓展任务
|
||||||
|
5. 标签功能呢
|
||||||
|
6. 接口参数范围,校验
|
65
prd/main.md
Normal file
65
prd/main.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# 个人网站策划
|
||||||
|
|
||||||
|
## 前言
|
||||||
|
|
||||||
|
我想做一个个人博客网站需要有一下功能
|
||||||
|
|
||||||
|
1. 基本用户系统
|
||||||
|
|
||||||
|
- 字典,维护一些常用字典:地区省份、菜单类别、组织架构类别等,为以后其他功能开发提供可拓展的属性
|
||||||
|
|
||||||
|
- 角色,角色是树形结构,可以有标签、排序等功能
|
||||||
|
|
||||||
|
- 组织架构/用户组,是树形结构,用户可以在多个组织
|
||||||
|
|
||||||
|
- 用户标签,字典中维护的一些用户属性
|
||||||
|
|
||||||
|
- 权限,包括页面权限,接口权限和数据权限等,下级角色只能从上级角色已有的权限中分配
|
||||||
|
|
||||||
|
- 用户,用户基础信息,用户拓展信息,用户创建,注册通过邮箱注册,可以限制错误登录次数,也可以重置,可以禁用用户,注销用户,找回密码,修改个人信息,最高管理员为root账户,他能做所有事情
|
||||||
|
|
||||||
|
2. 笔记/博客系统
|
||||||
|
|
||||||
|
- 笔记结构是树形的,可以增加标签
|
||||||
|
|
||||||
|
- 笔记可以发布为博客,即设置为公开内容,博客是单独的内容,修改笔记不影响博客能容,但是有绑定关系,可以更新和重新发布
|
||||||
|
|
||||||
|
- 博客可以点赞、评论、收藏,也是层级结构,可以增加标签分类
|
||||||
|
|
||||||
|
- 内容有markdown、富文本、思维导图、画板,结构通过关系型数据库存储,内容可以通过其他数据库存储,如mongodb、es等,增强搜索性能,可以嵌入文件等
|
||||||
|
|
||||||
|
- 对代码和编程友好
|
||||||
|
|
||||||
|
- 可以接入ai,mcp等,将笔记作为知识库,增强实用性
|
||||||
|
|
||||||
|
3. 个人空间
|
||||||
|
|
||||||
|
- 生活日志,分享照片、视频等
|
||||||
|
|
||||||
|
- 可以评论、收藏、分享、点赞
|
||||||
|
|
||||||
|
4. 阅读
|
||||||
|
|
||||||
|
- 可以上传自己下载的书,支持多种格式
|
||||||
|
|
||||||
|
- ai解读
|
||||||
|
|
||||||
|
- 评论、批注、分享
|
||||||
|
|
||||||
|
5. 工具
|
||||||
|
|
||||||
|
- 密码记录器(同步开发浏览器插件)
|
||||||
|
|
||||||
|
- 书签记录同步器(同步开发浏览器插件)
|
||||||
|
|
||||||
|
- bilibili收藏同步
|
||||||
|
|
||||||
|
- qq音乐、网易云音乐同步
|
||||||
|
|
||||||
|
- 文件管理:nas、支持在线音视频播放、媒体文件预览
|
||||||
|
|
||||||
|
- 文件对传:WEBRTC、P2P、阿里云OSS
|
||||||
|
|
||||||
|
- 热点新闻捕获
|
||||||
|
|
||||||
|
- 网页离线存储,做成pdf
|
455
prd/personal-website-comprehensive-prd.md
Normal file
455
prd/personal-website-comprehensive-prd.md
Normal file
@ -0,0 +1,455 @@
|
|||||||
|
# 个人网站综合平台产品需求文档 (PRD)
|
||||||
|
|
||||||
|
## 引言/概述
|
||||||
|
|
||||||
|
### 项目背景
|
||||||
|
构建一个集成化的个人网站平台,涵盖内容创作、知识管理、生活记录、实用工具等多个维度,旨在打造一个功能完整、用户体验优秀的个人数字空间。
|
||||||
|
|
||||||
|
### 核心价值
|
||||||
|
- **知识管理中心**:统一管理个人笔记、博客、阅读内容
|
||||||
|
- **生活记录平台**:记录和分享个人生活点滴
|
||||||
|
- **实用工具集**:集成常用的个人效率工具
|
||||||
|
- **智能化体验**:通过AI增强内容创作和知识检索
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
### 主要目标
|
||||||
|
1. **建立完整的个人数字资产管理体系**
|
||||||
|
2. **提供便捷的内容创作和发布平台**
|
||||||
|
3. **构建实用的个人效率工具集**
|
||||||
|
4. **实现智能化的知识管理和检索**
|
||||||
|
|
||||||
|
### 可衡量目标
|
||||||
|
- 支持多种内容格式(Markdown、富文本、思维导图、画板)
|
||||||
|
- 实现秒级内容搜索响应
|
||||||
|
- 支持10+种实用工具集成
|
||||||
|
- 提供完整的权限管理体系
|
||||||
|
|
||||||
|
## 用户故事 (User Stories)
|
||||||
|
|
||||||
|
- **作为一名创作者**, 我希望能够在一个地方写笔记、画思维导图,并且能将它们无缝地整理成树状结构,方便我构建自己的知识体系。
|
||||||
|
- **作为一名博主**, 我希望可以一键将我精心撰写的笔记发布成一篇公开的博客,并且发布后对笔记的修改不会影响已发布的博客,除非我选择更新它。
|
||||||
|
- **作为一名普通用户**, 我希望能用我的邮箱快速注册一个账号,并且可以管理我的个人信息、重置密码,确保我的账户安全。
|
||||||
|
- **作为一名开发者**, 我希望有一个工具能帮我安全地记录各种网站的密码,并通过浏览器插件自动填充,还能同步我的书签,提升我的工作效率。
|
||||||
|
- **作为一名生活记录者**, 我希望能方便地上传照片和视频,以时间线的形式记录我的生活点滴,并能设置只对特定的人开放。
|
||||||
|
|
||||||
|
## 功能模块详述
|
||||||
|
|
||||||
|
### 1. 基础用户系统模块
|
||||||
|
|
||||||
|
#### 1.1 字典管理子系统
|
||||||
|
**功能描述**:维护系统中使用的各类数据字典
|
||||||
|
- **地区字典**:省份、城市、区县三级联动
|
||||||
|
- **分类字典**:菜单类别、标签类别、文件类型等
|
||||||
|
- **组织字典**:部门类型、角色类型、权限类型
|
||||||
|
- **状态字典**:用户状态、内容状态、审核状态等
|
||||||
|
- **扩展字典**:支持自定义字典类型
|
||||||
|
**验收标准**:
|
||||||
|
- 管理员可以增删改查字典类型和字典项。
|
||||||
|
- 系统关键状态(如用户禁用、启用)应与字典数据关联。
|
||||||
|
- 前端下拉框、选项等数据应能通过API动态获取字典。
|
||||||
|
|
||||||
|
#### 1.2 角色权限子系统
|
||||||
|
**功能描述**:基于RBAC模型的权限管理体系
|
||||||
|
- **角色管理**:
|
||||||
|
- 树形结构的角色层级
|
||||||
|
- 角色继承机制
|
||||||
|
- 角色标签和属性
|
||||||
|
- 角色排序和分组
|
||||||
|
- **权限管理**:
|
||||||
|
- 页面访问权限
|
||||||
|
- 接口调用权限
|
||||||
|
- 数据访问权限(行级、字段级)
|
||||||
|
- 操作权限(增删改查)
|
||||||
|
- **权限分配**:
|
||||||
|
- 下级角色只能分配上级已有权限
|
||||||
|
- 批量权限分配
|
||||||
|
- 权限模板机制
|
||||||
|
**验收标准**:
|
||||||
|
- Root管理员拥有所有权限,且不可被修改。
|
||||||
|
- 角色创建时,其可分配的权限不能超过创建者拥有的权限。
|
||||||
|
- 用户访问未授权的页面或API时,应返回403 Forbidden状态。
|
||||||
|
- 角色的树形结构应能正确地在前端展示和操作。
|
||||||
|
|
||||||
|
#### 1.3 组织架构子系统
|
||||||
|
**功能描述**:管理用户组织关系
|
||||||
|
- **组织结构**:
|
||||||
|
- 树形组织架构
|
||||||
|
- 支持多级嵌套
|
||||||
|
- 组织属性和标签
|
||||||
|
- **用户归属**:
|
||||||
|
- 用户可属于多个组织
|
||||||
|
- 主组织和辅助组织
|
||||||
|
- 组织内角色分配
|
||||||
|
**验收标准**:
|
||||||
|
- 用户可以被分配到多个组织节点下。
|
||||||
|
- 组织架构支持拖拽调整层级和顺序。
|
||||||
|
- 管理员可以根据组织架构筛选和管理用户。
|
||||||
|
|
||||||
|
#### 1.4 用户管理子系统
|
||||||
|
**功能描述**:完整的用户生命周期管理
|
||||||
|
- **用户注册**:
|
||||||
|
- 邮箱注册验证
|
||||||
|
- 手机号注册(可选)
|
||||||
|
- 社交账号登录集成
|
||||||
|
- **用户认证**:
|
||||||
|
- 密码登录
|
||||||
|
- 登录错误次数限制
|
||||||
|
- 账户锁定和解锁机制
|
||||||
|
- 双因子认证(可选)
|
||||||
|
- **用户信息**:
|
||||||
|
- 基础信息:用户名、邮箱、手机、头像
|
||||||
|
- 扩展信息:个人简介、兴趣标签、社交链接
|
||||||
|
- 隐私设置:信息可见性控制
|
||||||
|
- **账户管理**:
|
||||||
|
- 密码修改和重置
|
||||||
|
- 找回密码(邮箱/手机)
|
||||||
|
- 账户禁用和注销
|
||||||
|
- Root超级管理员
|
||||||
|
**验收标准**:
|
||||||
|
- 新用户注册后,系统需发送验证邮件,点击链接后方可激活账户。
|
||||||
|
- 用户连续5次输错密码后,账户应被锁定30分钟。
|
||||||
|
- 用户可以随时修改自己的个人信息(除用户名外)。
|
||||||
|
- 注销功能需要用户二次确认,并告知数据将被永久删除。
|
||||||
|
|
||||||
|
### 2. 内容管理系统模块
|
||||||
|
|
||||||
|
#### 2.1 笔记管理子系统
|
||||||
|
**功能描述**:个人知识管理和笔记系统
|
||||||
|
- **笔记结构**:
|
||||||
|
- 树形文件夹结构
|
||||||
|
- 无限层级嵌套
|
||||||
|
- 文件夹和笔记混合组织
|
||||||
|
- **内容格式**:
|
||||||
|
- Markdown编辑器
|
||||||
|
- 富文本编辑器
|
||||||
|
- 思维导图工具
|
||||||
|
- 在线画板工具
|
||||||
|
- 代码片段高亮
|
||||||
|
- **笔记功能**:
|
||||||
|
- 实时保存
|
||||||
|
- 版本历史
|
||||||
|
- 标签分类
|
||||||
|
- 全文搜索
|
||||||
|
- 笔记链接和引用
|
||||||
|
- 附件管理(图片、文档、音视频)
|
||||||
|
- **协作功能**:
|
||||||
|
- 笔记分享(链接分享、权限控制)
|
||||||
|
- 协作编辑(可选)
|
||||||
|
- 评论和批注
|
||||||
|
**验收标准**:
|
||||||
|
- 笔记内容在编辑时应每隔30秒自动保存一次。
|
||||||
|
- 支持至少三级以上的树形目录结构。
|
||||||
|
- 全文搜索功能应能在1秒内返回标题或内容包含关键词的结果。
|
||||||
|
- 分享的笔记链接可以设置有效期和密码。
|
||||||
|
|
||||||
|
#### 2.2 博客发布子系统
|
||||||
|
**功能描述**:将笔记转化为公开博客
|
||||||
|
- **发布机制**:
|
||||||
|
- 笔记一键发布为博客
|
||||||
|
- 博客独立存储(修改笔记不影响已发布博客)
|
||||||
|
- 绑定关系维护
|
||||||
|
- 重新发布和更新机制
|
||||||
|
- **博客管理**:
|
||||||
|
- 发布状态管理(草稿、已发布、下线)
|
||||||
|
- SEO优化(标题、描述、关键词)
|
||||||
|
- 分类和标签
|
||||||
|
- 发布时间控制
|
||||||
|
- **互动功能**:
|
||||||
|
- 点赞和收藏
|
||||||
|
- 评论系统(层级评论)
|
||||||
|
- 阅读量统计
|
||||||
|
- 分享功能
|
||||||
|
- **展示功能**:
|
||||||
|
- 博客列表和详情页
|
||||||
|
- 分类和标签筛选
|
||||||
|
- 搜索功能
|
||||||
|
- RSS订阅
|
||||||
|
**验收标准**:
|
||||||
|
- 从笔记发布博客后,二者内容各自独立。
|
||||||
|
- 博客可以关联多个分类和标签。
|
||||||
|
- 未发布的博客(草稿)在公开列表不可见。
|
||||||
|
- 评论支持层级回复,并有新评论通知。
|
||||||
|
|
||||||
|
#### 2.3 AI集成子系统
|
||||||
|
**功能描述**:AI增强的内容创作和知识管理
|
||||||
|
- **内容创作辅助**:
|
||||||
|
- AI写作建议
|
||||||
|
- 文本润色和优化
|
||||||
|
- 自动摘要生成
|
||||||
|
- 关键词提取
|
||||||
|
- **知识库功能**:
|
||||||
|
- 笔记内容向量化
|
||||||
|
- 智能检索和推荐
|
||||||
|
- 相关内容关联
|
||||||
|
- 问答系统
|
||||||
|
- **MCP集成**:
|
||||||
|
- 多模态内容处理
|
||||||
|
- 代码理解和生成
|
||||||
|
- 图像识别和描述
|
||||||
|
|
||||||
|
### 3. 个人空间模块
|
||||||
|
|
||||||
|
#### 3.1 生活日志子系统
|
||||||
|
**功能描述**:记录和分享个人生活
|
||||||
|
- **内容类型**:
|
||||||
|
- 文字日志
|
||||||
|
- 图片分享(支持多图)
|
||||||
|
- 视频分享
|
||||||
|
- 位置签到
|
||||||
|
- 心情记录
|
||||||
|
- **组织方式**:
|
||||||
|
- 时间轴展示
|
||||||
|
- 分类管理
|
||||||
|
- 标签系统
|
||||||
|
- 重要程度标记
|
||||||
|
- **隐私控制**:
|
||||||
|
- 公开/私密/好友可见
|
||||||
|
- 精细化权限控制
|
||||||
|
- 访客记录
|
||||||
|
|
||||||
|
#### 3.2 社交互动子系统
|
||||||
|
**功能描述**:与访客的互动功能
|
||||||
|
- **互动功能**:
|
||||||
|
- 点赞系统
|
||||||
|
- 评论功能
|
||||||
|
- 收藏功能
|
||||||
|
- 分享功能
|
||||||
|
- **通知系统**:
|
||||||
|
- 实时通知
|
||||||
|
- 消息聚合
|
||||||
|
- 邮件通知(可选)
|
||||||
|
|
||||||
|
### 4. 阅读管理模块
|
||||||
|
|
||||||
|
#### 4.1 电子书管理子系统
|
||||||
|
**功能描述**:个人电子书库管理
|
||||||
|
- **格式支持**:
|
||||||
|
- PDF、EPUB、MOBI、TXT等
|
||||||
|
- 在线阅读器
|
||||||
|
- 进度同步
|
||||||
|
|
||||||
|
#### 4.2 阅读社区子系统
|
||||||
|
**功能描述**:阅读交流和分享
|
||||||
|
- **分享功能**:
|
||||||
|
- 读书笔记分享
|
||||||
|
- 书评发布
|
||||||
|
- 阅读进度分享
|
||||||
|
|
||||||
|
### 5. 实用工具模块
|
||||||
|
|
||||||
|
#### 5.1 密码管理子系统
|
||||||
|
**功能描述**:个人密码安全管理
|
||||||
|
- **密码存储**:
|
||||||
|
- 加密存储
|
||||||
|
- 分类管理
|
||||||
|
- 标签系统
|
||||||
|
- **浏览器插件**:
|
||||||
|
- 自动填充
|
||||||
|
- 密码生成
|
||||||
|
- 同步功能
|
||||||
|
|
||||||
|
#### 5.2 书签同步子系统
|
||||||
|
**功能描述**:跨设备书签管理
|
||||||
|
- **同步功能**:
|
||||||
|
- 浏览器书签导入/导出
|
||||||
|
- 实时同步
|
||||||
|
- 冲突解决
|
||||||
|
|
||||||
|
#### 5.3 第三方平台同步子系统
|
||||||
|
**功能描述**:整合各平台数据
|
||||||
|
- **Bilibili收藏同步**:
|
||||||
|
- 收藏视频同步
|
||||||
|
- 分类管理
|
||||||
|
- 观看进度
|
||||||
|
|
||||||
|
#### 5.4 文件管理子系统
|
||||||
|
**功能描述**:个人云存储和媒体中心
|
||||||
|
- **存储功能**:
|
||||||
|
- NAS集成
|
||||||
|
- 文件上传下载
|
||||||
|
- 文件夹管理
|
||||||
|
- 权限控制
|
||||||
|
- **媒体功能**:
|
||||||
|
- 在线音视频播放
|
||||||
|
- 图片预览
|
||||||
|
- 文档在线查看
|
||||||
|
- **传输功能**:
|
||||||
|
- WebRTC点对点传输
|
||||||
|
- 阿里云OSS集成
|
||||||
|
- 断点续传
|
||||||
|
|
||||||
|
#### 5.5 信息聚合子系统
|
||||||
|
**功能描述**:热点信息和内容聚合
|
||||||
|
- **新闻聚合**:
|
||||||
|
- 多源新闻抓取
|
||||||
|
- 分类展示
|
||||||
|
- 关键词过滤
|
||||||
|
|
||||||
|
## 高阶数据模型概览 (High-Level Data Model)
|
||||||
|
|
||||||
|
此为概念模型,用于指导数据库设计,具体字段和关系将在详细设计阶段确定。
|
||||||
|
|
||||||
|
- **核心实体**:
|
||||||
|
- `User`: 存储用户信息 (id, username, email, password_hash)
|
||||||
|
- `Role`: 角色定义 (id, name, description)
|
||||||
|
- `Permission`: 权限定义 (id, action, resource)
|
||||||
|
- `Organization`: 组织架构 (id, name, parent_id)
|
||||||
|
- `Dictionary`: 数据字典 (id, type, key, value)
|
||||||
|
- `Note`: 笔记内容 (id, user_id, title, content, content_type, parent_id)
|
||||||
|
- `Post`: 博客文章 (id, user_id, source_note_id, title, content, status)
|
||||||
|
- `Tag`: 标签 (id, name)
|
||||||
|
- `Category`: 分类 (id, name)
|
||||||
|
- `Comment`: 评论 (id, post_id, user_id, content, parent_id)
|
||||||
|
- `File`: 文件管理 (id, user_id, file_name, path, type)
|
||||||
|
- `Bookmark`: 书签 (id, user_id, title, url)
|
||||||
|
- `Password`: 密码记录 (id, user_id, entry_name, username, encrypted_password)
|
||||||
|
|
||||||
|
- **关系**:
|
||||||
|
- `User` (多) <-> (多) `Role` (通过 `UserRole` 中间表)
|
||||||
|
- `Role` (多) <-> (多) `Permission` (通过 `RolePermission` 中间表)
|
||||||
|
- `User` (多) <-> (多) `Organization` (通过 `UserOrganization` 中间表)
|
||||||
|
- `Note` (一) -> (多) `Post`
|
||||||
|
- `Post` (多) <-> (多) `Tag` (通过 `PostTag` 中间表)
|
||||||
|
- `Post` (多) <-> (多) `Category` (通过 `PostCategory` 中间表)
|
||||||
|
- `Post` (一) -> (多) `Comment`
|
||||||
|
- `User` (一) -> (多) `Note`, `Post`, `File`, `Bookmark`, `Password`
|
||||||
|
|
||||||
|
## 关键用户交互流程 (Key User Flows)
|
||||||
|
|
||||||
|
### 流程一:新用户注册与激活
|
||||||
|
1. **访问首页**: 用户访问网站,点击"注册"按钮。
|
||||||
|
2. **填写信息**: 跳转至注册页面,要求输入用户名、邮箱和密码(密码需二次确认)。
|
||||||
|
3. **前端校验**: 实时校验用户名和邮箱是否已被占用,密码是否符合复杂度要求。
|
||||||
|
4. **提交注册**: 用户点击"注册",前端校验通过后,将数据发送至后端。
|
||||||
|
5. **后端处理**: 后端创建用户记录(状态为`inactive`),生成验证Token,并向用户邮箱发送一封包含激活链接(含Token)的邮件。
|
||||||
|
6. **用户激活**: 用户打开邮箱,点击激活链接。
|
||||||
|
7. **激活验证**: 后端验证Token有效性,将用户状态更新为`active`,并引导用户至登录页面,提示"激活成功"。
|
||||||
|
|
||||||
|
### 流程二:从笔记到博客的发布
|
||||||
|
1. **创建笔记**: 用户在笔记系统中创建并编辑一篇笔记,内容可以是Markdown、富文本等。
|
||||||
|
2. **发起发布**: 在笔记编辑页面,用户点击"发布为博客"按钮。
|
||||||
|
3. **配置博客信息**: 弹窗或新页面要求用户填写博客的URL slug、选择分类、添加标签、设置封面图等。
|
||||||
|
4. **确认发布**: 用户点击"确认发布"。
|
||||||
|
5. **后端处理**:
|
||||||
|
- 后端在`Posts`表中创建一条新记录。
|
||||||
|
- 复制当前版本的笔记内容到该`Post`记录中。
|
||||||
|
- 记录该`Post`与源`Note`的关联关系 (`source_note_id`)。
|
||||||
|
- 将博客状态设置为`published`。
|
||||||
|
6. **发布成功**: 系统提示"发布成功",并提供查看博客文章的链接。
|
||||||
|
7. **后续修改**: 用户后续在原笔记上的任何修改,都不会影响已发布的这篇博客文章。用户可在博客管理界面选择"从笔记更新内容"来同步最新修改。
|
||||||
|
|
||||||
|
## 技术架构需求
|
||||||
|
|
||||||
|
### 后端技术栈
|
||||||
|
- **框架**:Elysia + Bun.js
|
||||||
|
- **数据库**:MySQL (主) + Redis (缓存) + Elasticsearch (搜索)
|
||||||
|
- **对象存储**:支持本地存储、阿里云OSS、自建NAS
|
||||||
|
- **消息队列**:Redis/RabbitMQ(处理异步任务)
|
||||||
|
|
||||||
|
### 前端技术栈
|
||||||
|
- **Web端**:Vue.js/React + TypeScript
|
||||||
|
- **移动端**:PWA或React Native
|
||||||
|
- **浏览器插件**:Manifest V3
|
||||||
|
|
||||||
|
### 基础设施
|
||||||
|
- **部署**:Docker + Docker Compose
|
||||||
|
- **监控**:日志收集、性能监控、错误追踪
|
||||||
|
- **安全**:HTTPS、数据加密、访问控制
|
||||||
|
|
||||||
|
### API设计原则
|
||||||
|
- **RESTful风格**: 使用标准的HTTP方法 (GET, POST, PUT, DELETE, PATCH)。
|
||||||
|
- **版本控制**: API URL中应包含版本号,如 `/api/v1/...`。
|
||||||
|
- **统一响应格式**: 所有响应遵循 `{ "code": 0, "message": "success", "data": {} }` 结构。
|
||||||
|
- **分页**: 对列表数据提供统一的分页参数,如 `page` 和 `pageSize`。
|
||||||
|
- **排序与筛选**: 支持通过URL参数对结果进行排序和筛选。
|
||||||
|
- **认证**: 受保护的API需通过`Authorization`头传递JWT。
|
||||||
|
|
||||||
|
## 非功能性需求
|
||||||
|
|
||||||
|
### 性能要求
|
||||||
|
- **响应时间**:页面加载<2s,接口响应<500ms
|
||||||
|
- **并发支持**:支持1000+并发用户
|
||||||
|
- **可用性**:99.9%系统可用性
|
||||||
|
|
||||||
|
### 安全要求
|
||||||
|
- **数据加密**:敏感数据加密存储和传输
|
||||||
|
- **访问控制**:完善的认证和授权机制
|
||||||
|
- **审计日志**:关键操作日志记录
|
||||||
|
|
||||||
|
### 扩展性要求
|
||||||
|
- **模块化设计**:支持功能模块独立部署
|
||||||
|
- **API设计**:RESTful API,支持版本控制
|
||||||
|
- **数据库**:支持读写分离和分库分表
|
||||||
|
|
||||||
|
## 开发优先级
|
||||||
|
|
||||||
|
### 第一期:核心基础(MVP)
|
||||||
|
1. 基础用户系统(用户管理、角色权限)
|
||||||
|
2. 笔记系统核心功能
|
||||||
|
3. 基础博客发布
|
||||||
|
4. 系统基础架构
|
||||||
|
|
||||||
|
### 第二期:内容增强
|
||||||
|
1. 完整的博客系统
|
||||||
|
2. 个人空间功能
|
||||||
|
3. 基础工具(密码管理、书签)
|
||||||
|
4. 搜索优化
|
||||||
|
|
||||||
|
### 第三期:高级功能
|
||||||
|
1. 阅读管理系统
|
||||||
|
2. 文件管理系统
|
||||||
|
3. AI集成功能
|
||||||
|
4. 第三方平台同步
|
||||||
|
|
||||||
|
### 第四期:生态完善
|
||||||
|
1. 移动端应用
|
||||||
|
2. 浏览器插件
|
||||||
|
3. 高级分析功能
|
||||||
|
4. 性能优化
|
||||||
|
|
||||||
|
## 风险与挑战
|
||||||
|
|
||||||
|
### 技术风险
|
||||||
|
- **数据迁移**:大量历史数据的迁移和同步
|
||||||
|
- **性能优化**:大文件上传和处理
|
||||||
|
- **第三方集成**:API变更和限制
|
||||||
|
|
||||||
|
### 产品风险
|
||||||
|
- **功能复杂度**:避免功能过于复杂影响用户体验
|
||||||
|
- **数据安全**:个人敏感数据的安全保护
|
||||||
|
- **兼容性**:跨浏览器和设备兼容
|
||||||
|
|
||||||
|
## 成功指标
|
||||||
|
|
||||||
|
### 用户指标
|
||||||
|
- 日活跃用户数
|
||||||
|
- 用户留存率
|
||||||
|
- 功能使用率
|
||||||
|
|
||||||
|
### 技术指标
|
||||||
|
- 系统响应时间
|
||||||
|
- 错误率控制
|
||||||
|
- 数据备份完整性
|
||||||
|
|
||||||
|
### 业务指标
|
||||||
|
- 内容创作量
|
||||||
|
- 用户满意度
|
||||||
|
- 功能完成度
|
||||||
|
|
||||||
|
## 后续规划
|
||||||
|
|
||||||
|
### 短期目标(6个月内)
|
||||||
|
- 完成第一期功能开发
|
||||||
|
- 系统稳定性优化
|
||||||
|
- 基础功能测试
|
||||||
|
|
||||||
|
### 中期目标(1年内)
|
||||||
|
- 完成主要功能模块
|
||||||
|
- 移动端支持
|
||||||
|
- 性能优化
|
||||||
|
|
||||||
|
### 长期目标(1年以上)
|
||||||
|
- AI功能深度集成
|
||||||
|
- 开放API生态
|
||||||
|
- 多语言支持
|
128
prd/星撰-工程设计.md
Normal file
128
prd/星撰-工程设计.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# 星撰个人综合平台 - 项目工程设计文档
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. 引言
|
||||||
|
|
||||||
|
本文档旨在为"星撰"个人综合平台项目提供全面的工程设计与规划。基于已确定的产品需求文档(PRD),本文档从软件工程和工程控制论的视角出发,深入分析项目的技术指标、可行性、技术选型、未来展望及各项核心系统属性,为项目的顺利开发、部署和长期演进提供一份结构化的工程蓝图。
|
||||||
|
|
||||||
|
**项目代号**: 星撰 (StarWriter)
|
||||||
|
|
||||||
|
**核心愿景**: 构建一个高度集成、数据私有、体验优秀的个人数字化中枢,统一管理知识、生活与工具。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 技术指标 (Technical Specifications)
|
||||||
|
|
||||||
|
为确保项目质量,我们设定以下可量化的关键技术指标:
|
||||||
|
|
||||||
|
| 类别 | 指标项 | 目标值 | 备注 |
|
||||||
|
|--------------|------------------------------|------------------------------------------------|----------------------------------------------|
|
||||||
|
| **性能** | API 平均响应时间 | < 200ms (95th percentile) | 针对核心数据读写操作 |
|
||||||
|
| | 复杂查询/搜索响应时间 | < 800ms | 如全文搜索、聚合分析 |
|
||||||
|
| | 页面首次内容绘制 (FCP) | < 1.5s | 核心页面的加载性能 |
|
||||||
|
| **并发** | MVP 阶段并发用户数 | 100+ | 系统可稳定支持的并发会话数 |
|
||||||
|
| | 长期目标并发用户数 | 1000+ | |
|
||||||
|
| **可用性** | 系统年可用性 (Uptime) | 99.9% | 相当于每年停机时间不超过 8.76 小时 |
|
||||||
|
| **稳定性** | 核心 API 成功率 | > 99.95% | |
|
||||||
|
| | 数据备份恢复点目标 (RPO) | 24 小时 | 每日自动备份,最多丢失 24 小时数据 |
|
||||||
|
| | 数据备份恢复时间目标 (RTO) | < 2 小时 | 从灾难发生到恢复服务所需时间 |
|
||||||
|
| **安全性** | 安全漏洞响应 | 遵循 OWASP Top 10 防御原则,0 高危漏洞 | 使用自动化工具扫描并定期审查 |
|
||||||
|
| | 敏感数据处理 | 密码、密钥等使用非对称加密或强哈希算法存储 | |
|
||||||
|
| **代码质量** | 核心模块单元测试覆盖率 | > 90% | 确保业务逻辑的稳定可靠 |
|
||||||
|
| | CI/CD 流水线单次执行时间 | < 10 分钟 | 从代码提交到构建部署完成 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 可行性分析 (Feasibility Analysis)
|
||||||
|
|
||||||
|
- **技术可行性**:
|
||||||
|
- **技术栈成熟度**: 项目选用的 Elysia.js, Bun, Vue/React, MySQL, Redis 等技术均为成熟或高速发展的开源技术,拥有活跃的社区和丰富的文档,技术风险可控。
|
||||||
|
- **实现复杂度**: 项目功能虽多,但采用模块化、分阶段(MVP)的开发策略,可将复杂系统分解为多个可管理的小模块,降低了单次开发的复杂度。
|
||||||
|
- **团队技能**: 核心开发人员具备所需的全栈技术能力,能够驾驭该技术栈。
|
||||||
|
|
||||||
|
- **经济可行性**:
|
||||||
|
- **初期成本**: 主要成本为服务器托管费用。初期可利用云服务商的免费套餐或低成本VPS,成本极低。所有核心软件均为开源,无授权费用。
|
||||||
|
- **长期成本**: 随着用户量和数据量的增长,服务器和存储成本会线性增加,但成本模型清晰可控。
|
||||||
|
- **开发成本**: 作为个人项目,主要为时间成本,无直接的人力资源开销。
|
||||||
|
|
||||||
|
- **操作与维护可行性**:
|
||||||
|
- **部署**: 采用 Docker 和 Docker Compose 进行容器化部署,实现了环境的标准化和一键部署,极大降低了操作和维护的复杂性。
|
||||||
|
- **监控**: 规划了完善的日志和监控体系,能够主动发现和定位问题,提升了系统的可维护性。
|
||||||
|
- **开发流程**: 明确的 PRD 和工程设计文档,结合 CI/CD 自动化流程,保障了开发过程的规范性和高效性。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 技术选型与论证 (Technology Stack Selection & Justification)
|
||||||
|
|
||||||
|
| 领域 | 技术选型 | 选型论证 |
|
||||||
|
|----------------|-----------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| **后端运行时** | **Bun.js** | 极高的执行效率,内置打包器、测试器、包管理器,提供了现代、一体化的开发体验,与 Elysia.js 完美契合。 |
|
||||||
|
| **后端框架** | **Elysia.js** | 基于 Bun 设计,性能卓越。提供端到端的类型安全(Type-Safe),开发体验极佳,插件生态丰富,非常适合构建高性能、类型健壮的 API 服务。 |
|
||||||
|
| **前端框架** | **Vue.js / React** | 两者均为业界领先的声明式 UI 框架,拥有强大的生态系统和组件库。选择其一可快速构建复杂、交互丰富的单页应用(SPA)。最终选择可根据个人偏好决定。 |
|
||||||
|
| **数据库** | **MySQL (主) + Redis (缓存) + Elasticsearch (搜索)** | **MySQL**: 成熟可靠的关系型数据库,提供事务支持和数据一致性,适合存储结构化的核心业务数据。**Redis**: 高性能内存数据库,用于缓存、会话管理、消息队列等场景,能极大提升系统响应速度。**Elasticsearch**: 强大的全文搜索引擎,为笔记、博客等内容提供毫秒级的复杂搜索能力,是内容驱动型平台的关键组件。 |
|
||||||
|
| **部署方案** | **Docker + Docker Compose** | 实现开发、测试、生产环境的一致性,简化部署流程,便于服务的水平扩展和管理。 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 前沿技术展望 (Future Technology Outlook)
|
||||||
|
|
||||||
|
本项目在设计上保持开放,为未来集成前沿技术预留了接口:
|
||||||
|
|
||||||
|
- **深度 AI 集成 (LLM/RAG)**: 当前规划的 AI 功能是基础。未来可引入基于私有数据(笔记、文档)的检索增强生成(RAG)技术,将平台打造成一个真正个性化的智能问答和创作助手。
|
||||||
|
- **去中心化身份与存储 (DID/IPFS)**: 探索使用去中心化身份标识(DID)进行用户认证,增强用户的自主权。核心的、不可变的笔记或博客可选择性地发布到 IPFS/Arweave 等去中心化存储网络,实现数据的永久保存和抗审查。
|
||||||
|
- **边缘计算 (Edge Computing)**: 对于静态资源和一些低延迟要求的 API,可以利用边缘计算节点进行分发和计算,为全球用户提供更快的访问速度。
|
||||||
|
- **WebAssembly (WASM)**: 对于前端的性能敏感模块,如富文本编辑器、思维导图、在线画板的核心引擎,未来可采用 Rust/C++ 编写并通过 WASM 在浏览器中运行,以获得接近原生的性能。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 实用性分析 (Utility Analysis)
|
||||||
|
|
||||||
|
本项目的核心实用价值在于 **"终极整合"** 与 **"数据主权"**。
|
||||||
|
|
||||||
|
- **解决的核心痛点**: 现代人的数字信息散落在各个孤立的平台(笔记在A应用,书签在B浏览器,密码在C工具,博客在D平台)。"星撰"旨在通过一个统一的平台整合这些功能,消除切换成本,构建个人数据的内在联系。
|
||||||
|
- **为用户创造的价值**:
|
||||||
|
1. **数据所有权**: 用户数据完全存储在自己的服务器上,彻底摆脱对商业平台的依赖和隐私泄露的担忧。
|
||||||
|
2. **高度可定制**: 作为一个自建项目,可以根据个人需求无限扩展和定制功能,不受商业产品的限制。
|
||||||
|
3. **效率提升**: 将多种高频工具集成,减少了跨应用的操作,提升了日常工作和学习的效率。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 商用性分析 (Commercial Viability Analysis)
|
||||||
|
|
||||||
|
尽管项目初衷为个人使用,但其架构和功能具备一定的商用潜力。
|
||||||
|
|
||||||
|
- **潜在市场**: 面向注重数据隐私、有极客精神、需要高度定制化解决方案的个人开发者、知识工作者、内容创作者。
|
||||||
|
- **商业模式探索**:
|
||||||
|
1. **SaaS 订阅服务**: 提供托管服务,用户无需自行部署。可通过免费增值模式(Freemium)吸引用户,高级功能(如无限AI调用、团队协作、更大存储空间)收费。
|
||||||
|
2. **开源+付费支持/高级版**: 项目核心开源,吸引社区贡献。提供付费的企业级支持、高级插件或一键部署的商业版。
|
||||||
|
3. **模板/插件市场**: 建立一个生态,允许开发者创建和销售主题模板、功能插件。
|
||||||
|
- **核心竞争力**: 与 Notion, Obsidian 等产品的竞争中,其核心优势是 **开源、可自托管、高度集成**。这对于目标市场中的特定群体具有强大吸引力。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 稳定性与可靠性设计 (Stability & Reliability Design)
|
||||||
|
|
||||||
|
- **冗余与备份**: 数据库采用主从复制(Read Replicas)实现读写分离和高可用。实施每日全量备份和增量备份策略,并定期进行恢复演练。
|
||||||
|
- - **无状态服务**: 后端 API 设计为无状态,所有会话信息存储在 Redis 中。这使得服务可以轻松地进行水平扩展和故障切换。
|
||||||
|
- **优雅降级**: 当 Elasticsearch 或 Redis 等非核心依赖出现故障时,系统应能自动降级服务(如暂时关闭搜索功能、使用数据库替代缓存),保证核心功能(如读写笔记)不受影响。
|
||||||
|
- **健康检查**: 对外提供健康检查 API (`/health`),供负载均衡和监控系统调用,实现故障节点的自动摘除。
|
||||||
|
- **配置中心**: 所有配置(数据库连接、密钥等)通过环境变量或配置中心管理,实现配置与代码分离,增强安全性与灵活性。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 可拓展性设计 (Scalability & Extensibility Design)
|
||||||
|
|
||||||
|
- **水平扩展 (Scale Out)**: 无状态的后端服务设计,使其可以轻易地在负载均衡器后部署多个实例,以应对增长的流量。
|
||||||
|
- **垂直扩展 (Scale Up)**: 系统也可以通过增加单个服务器的 CPU 和内存来提升处理能力。
|
||||||
|
- **数据库扩展**: 初期采用读写分离。未来若数据量巨大,可根据业务模块进行垂直拆分(如用户库、内容库),或对超大表进行水平分片(Sharding)。
|
||||||
|
- **功能扩展 (Extensibility)**:
|
||||||
|
- **模块化架构**: `src` 目录下的 `controllers`, `services`, `plugins` 结构清晰,新增功能模块不会影响现有逻辑。
|
||||||
|
- **插件化设计**: 核心功能稳定后,可设计一套正式的插件机制,允许社区或自己以插件形式开发新功能(如新的编辑器、新的同步工具),实现真正的"热插拔"式扩展。
|
||||||
|
- **事件驱动**: 通过引入消息队列,采用事件驱动模式解耦核心业务和附加业务(如发送邮件、生成通知、索引文档),提高系统的响应能力和可扩展性。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 结论
|
||||||
|
|
||||||
|
"星撰"项目不仅在产品功能上满足了现代数字生活的需求,其工程设计也遵循了高标准。项目技术上可行,经济上低成本,且在稳定性、可扩展性方面进行了深思熟虑的规划。本文档将作为指导,确保项目沿着一条稳健、高效、可持续的道路前进。
|
121
prd/星撰-开发计划.md
Normal file
121
prd/星撰-开发计划.md
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
# 星撰个人综合平台 - 详细开发计划 (按功能模块划分)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 引言
|
||||||
|
|
||||||
|
### 1.1. 文档目的
|
||||||
|
本文档基于《产品需求文档 (PRD)》和《概要设计》,旨在将项目需求拆分为具体、可执行的开发任务,并将其组织成一个以核心功能模块为导向、分阶段的开发计划。本文档是项目执行阶段的核心路线图。
|
||||||
|
|
||||||
|
### 1.2. 计划结构
|
||||||
|
本计划遵循迭代式增量开发模型,将整个项目划分为多个主要阶段。**此版本已根据 `main.md` 的功能列表进行重组**,每个阶段聚焦于一个完整的功能模块。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段一: 项目初始化与基础设施
|
||||||
|
**目标**: 搭建项目骨架,配置开发环境和规范,建立 CI/CD 基础流程。这是后续所有开发工作的基础。
|
||||||
|
- [ ] **1.1. 项目脚手架**: 初始化 Elysia + Bun + TypeScript 项目,配置 `tsconfig.json` 和路径别名。
|
||||||
|
- [ ] **1.2. 代码规范**: 配置 ESLint 和 Prettier,确保代码风格和质量一致。
|
||||||
|
- [ ] **1.3. 配置文件管理**: 建立 `src/config` 目录,管理数据库、JWT、日志等配置,支持环境变量。
|
||||||
|
- [ ] **1.4. 数据库连接**: 编写并测试 MySQL 和 Redis 的连接模块。
|
||||||
|
- [ ] **1.5. 核心插件**: 实现全局错误处理、结构化日志 (`pino`) 和 Swagger API 文档插件。
|
||||||
|
- [ ] **1.6. 容器化**: 编写 `Dockerfile` 和 `docker-compose.yml`,实现开发环境一键启动。
|
||||||
|
- [ ] **1.7. CI/CD 基础**: 搭建基础的 GitHub Actions 工作流,实现提交代码时自动运行 lint 和测试。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段二: 基础用户系统
|
||||||
|
**目标**: 实现一个完整的、支持RBAC的用户中心,包含用户、角色、权限、组织和字典等核心功能。
|
||||||
|
- [ ] **2.1. 数据库设计**: 设计并创建 `users`, `roles`, `permissions`, `organizations`, `dictionaries` 及相关联的表。
|
||||||
|
- [ ] **2.2. 用户认证 API**:
|
||||||
|
- [ ] `POST /api/v1/auth/register`: 实现用户注册(含数据校验、密码哈希)。
|
||||||
|
- [ ] `POST /api/v1/auth/login`: 实现用户登录,成功后返回 JWT。
|
||||||
|
- [ ] `GET /api/v1/users/me`: 创建受保护路由,获取当前登录用户信息。
|
||||||
|
- [ ] **2.3. JWT与权限中间件**:
|
||||||
|
- [ ] 实现 JWT 校验中间件。
|
||||||
|
- [ ] 实现一个基础的 RBAC 权限校验中间件。
|
||||||
|
- [ ] **2.4. 字典管理 CRUD API**: 实现对数据字典类型和条目的增删改查。
|
||||||
|
- [ ] **2.5. 角色管理 CRUD API**: 实现对角色的增删改查及权限分配。
|
||||||
|
- [ ] **2.6. 组织架构 CRUD API**: 实现树形组织架构的增删改查。
|
||||||
|
- [ ] **2.7. 用户管理 CRUD API**: 实现后台对用户的增删改查和角色分配。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段三: 笔记与博客系统
|
||||||
|
**目标**: 构建平台的内容核心,支持从私有笔记到公开博客的完整流程,并集成搜索和社交功能。
|
||||||
|
- [ ] **3.1. 数据库设计**: 设计 `notes`, `posts`, `tags`, `categories`, `comments` 及相关关联表。
|
||||||
|
- [ ] **3.2. 笔记核心 API**:
|
||||||
|
- [ ] 实现笔记的 CRUD (创建/读取/更新/删除)。
|
||||||
|
- [ ] `GET /api/v1/notes`: 获取用户的笔记树形结构列表。
|
||||||
|
- [ ] 实现笔记的标签管理功能。
|
||||||
|
- [ ] **3.3. 博客发布流程 API**:
|
||||||
|
- [ ] `POST /api/v1/notes/:id/publish`: 从笔记一键发布为博客。
|
||||||
|
- [ ] 实现博客的 CRUD,包括分类管理。
|
||||||
|
- [ ] **3.4. 公开访问 API**:
|
||||||
|
- [ ] `GET /api/v1/public/posts`: (公开) 获取博客列表(分页、分类、标签筛选)。
|
||||||
|
- [ ] `GET /api/v1/public/posts/:slug`: (公开) 获取单篇博客内容。
|
||||||
|
- [ ] **3.5. 互动功能 API**:
|
||||||
|
- [ ] 实现博客的点赞、收藏功能。
|
||||||
|
- [ ] 实现层级评论的发表和查看功能。
|
||||||
|
- [ ] **3.6. 搜索引擎集成**:
|
||||||
|
- [ ] 配置 Elasticsearch 服务。
|
||||||
|
- [ ] 编写服务将 `posts` 数据索引到 ES。
|
||||||
|
- [ ] `GET /api/v1/public/search`: 实现基于 ES 的博客全文搜索 API。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段四: 个人空间
|
||||||
|
**目标**: 开发一个用于记录和分享个人生活点滴的模块。
|
||||||
|
- [ ] **4.1. 数据库设计**: 设计 `life_logs` 表,支持文本、图片/视频链接、位置、心情等。
|
||||||
|
- [ ] **4.2. 生活日志 CRUD API**: 实现生活日志的增删改查。
|
||||||
|
- [ ] **4.3. 时间线 API**: `GET /api/v1/space/timeline` 按时间线获取日志列表。
|
||||||
|
- [ ] **4.4. 隐私控制**: 为日志增加隐私设置(公开/私密/好友可见)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段五: 阅读系统
|
||||||
|
**目标**: 构建个人电子书库,支持在线阅读、批注和智能解读。
|
||||||
|
- [ ] **5.1. 数据库设计**: 设计 `ebooks`, `annotations` (批注) 表。
|
||||||
|
- [ ] **5.2. 电子书 API**: 实现电子书文件的上传、元数据解析和列表管理。
|
||||||
|
- [ ] **5.3. 阅读功能 API**: 实现阅读时添加/查看批注、记录和同步阅读进度的功能。
|
||||||
|
- [ ] **5.4. (选做) AI 解读 API**: `POST /api/v1/ebooks/:id/interpret` 对书籍内容进行摘要或问答。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段六: 综合工具集
|
||||||
|
**目标**: 集成一系列实用工具,提升平台的附加价值和用户粘性。
|
||||||
|
- [ ] **6.1. 密码与书签管理**:
|
||||||
|
- [ ] 数据库设计 `passwords`, `bookmarks` 表,关键字段加密。
|
||||||
|
- [ ] 实现密码管理器的安全 CRUD API。
|
||||||
|
- [ ] 实现书签管理器的 CRUD API。
|
||||||
|
- [ ] **6.2. 文件管理系统**:
|
||||||
|
- [ ] 数据库设计 `files` 表,存储文件元数据。
|
||||||
|
- [ ] 封装一个支持本地/OSS的对象存储服务。
|
||||||
|
- [ ] 实现文件的上传、下载、删除、重命名和目录管理 API。
|
||||||
|
- [ ] **6.3. 第三方平台同步**:
|
||||||
|
- [ ] 设计同步任务管理模块和第三方平台适配器。
|
||||||
|
- [ ] 实现 Bilibili 收藏夹同步适配器。
|
||||||
|
- [ ] 实现 QQ音乐/网易云音乐 歌单同步适配器。
|
||||||
|
- [ ] **6.4. 信息聚合工具**:
|
||||||
|
- [ ] 实现热点新闻捕获和聚合的后台任务。
|
||||||
|
- [ ] `POST /api/v1/tools/web-to-pdf`: 实现网页离线存储为 PDF 的 API。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段七: 高级功能与生态完善
|
||||||
|
**目标**: 引入AI、实时通知等高级功能,并通过跨平台应用完善生态。最后对系统进行加固和优化,确保长期稳定。
|
||||||
|
- [ ] **7.1. AI 功能深度集成**:
|
||||||
|
- [ ] `POST /api/v1/ai/summary`: 对给定文本生成摘要。
|
||||||
|
- [ ] `POST /api/v1/ai/polish`: 对给定文本进行润色。
|
||||||
|
- [ ] (高级) 探索将笔记向量化,实现基于个人知识库的智能问答。
|
||||||
|
- [ ] **7.2. 高级功能与优化**:
|
||||||
|
- [ ] 使用 WebSocket 实现评论、点赞等事件的实时通知。
|
||||||
|
- [ ] 开发基础的网站访问统计和内容分析功能。
|
||||||
|
- [ ] 设计并实现基于 OAuth 2.0 的开放 API 体系。
|
||||||
|
- [ ] **7.3. 跨平台生态**:
|
||||||
|
- [ ] (前端) 将 Web 应用打包为 PWA。
|
||||||
|
- [ ] (前端) 开发用于快速保存书签和填充密码的浏览器插件。
|
||||||
|
- [ ] **7.4. 系统加固与维护**:
|
||||||
|
- [ ] 引入 CDN 加速静态资源,分析并优化慢查询 SQL。
|
||||||
|
- [ ] 定期进行依赖项安全扫描和代码审计。
|
||||||
|
- [ ] 完善所有功能的开发者文档和用户手册。
|
217
prd/星撰-概要设计.md
Normal file
217
prd/星撰-概要设计.md
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
# 星撰个人综合平台 - 软件开发概要设计
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 引言
|
||||||
|
|
||||||
|
### 1.1. 文档目的
|
||||||
|
本概要设计文档旨在为"星撰"个人综合平台项目定义一个完整的软件开发生命周期(SDLC)框架。它将作为项目从规划、设计、实现到部署和维护的最高指导性文件,确保所有开发活动遵循标准化的软件工程最佳实践。
|
||||||
|
|
||||||
|
### 1.2. 项目概述
|
||||||
|
"星撰"是一个高度集成的个人数字化中枢,其核心功能、用户故事及非功能性需求已在《个人网站综合平台产品需求文档 (PRD)》中详细定义。本项目旨在将该PRD转化为一个稳定、可扩展、高质量的软件产品。
|
||||||
|
|
||||||
|
### 1.3. 范围
|
||||||
|
本文档覆盖范围包括:
|
||||||
|
- 项目开发模型的选定。
|
||||||
|
- 系统的高层体系结构设计。
|
||||||
|
- 各阶段(设计、开发、测试、部署)的规划和规范。
|
||||||
|
- 项目管理、风险控制和质量保证策略。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 项目规划与管理
|
||||||
|
|
||||||
|
### 2.1. 开发模型
|
||||||
|
本项目采用 **迭代式增量开发模型 (Iterative and Incremental Development)**。
|
||||||
|
- **迭代式**: 将开发过程划分为多个短周期的迭代,每个迭代都包含需求分析、设计、编码、测试的完整流程。
|
||||||
|
- **增量式**: 每个迭代都会产出一个可测试、可交付的软件增量。产品功能将分阶段(见PRD中的优先级规划)逐步构建和完善。
|
||||||
|
|
||||||
|
**优势**: 此模型能够快速交付核心功能(MVP),及时获取反馈,灵活应对需求变化,并有效控制项目风险。
|
||||||
|
|
||||||
|
### 2.2. 项目里程碑
|
||||||
|
项目将按照PRD中的优先级划分为四个主要里程碑(阶段):
|
||||||
|
|
||||||
|
| 里程碑 | 名称 | 核心交付物 | 目标 |
|
||||||
|
|--------|--------------|------------------------------------------------------|------------------------------------|
|
||||||
|
| M1 | **核心基础 (MVP)** | 基础用户系统、笔记核心功能、基础博客发布、CI/CD流程建立 | 验证核心架构,跑通开发部署全流程 |
|
||||||
|
| M2 | **内容增强** | 完整博客系统、个人空间、基础工具、搜索引擎集成 | 完善内容生态,提升用户体验 |
|
||||||
|
| M3 | **高级功能** | 阅读管理、文件管理、AI功能集成、第三方平台同步 | 扩展平台能力,引入智能化 |
|
||||||
|
| M4 | **生态完善** | 移动端应用、浏览器插件、高级分析功能、性能深度优化 | 构建跨平台生态,实现长期稳定运营 |
|
||||||
|
|
||||||
|
### 2.3. 风险管理
|
||||||
|
| 风险类别 | 风险描述 | 可能性 | 影响 | 应对策略 |
|
||||||
|
|--------------|----------------------------------------|--------|------|------------------------------------------------------------------------|
|
||||||
|
| **技术风险** | 第三方API变更(如B站、QQ音乐) | 中 | 中 | 封装Adapter层,隔离变化;设计优雅降级机制。 |
|
||||||
|
| | 新技术引入(Bun/Elysia)的未知问题 | 低 | 中 | 保持对社区的关注,构建完善的测试体系以快速发现问题。 |
|
||||||
|
| **进度风险** | 个人项目时间投入不稳定 | 高 | 高 | 严格遵循任务清单,将大任务分解为小任务,利用碎片时间完成。 |
|
||||||
|
| **安全风险** | 个人敏感数据(密码、文件)泄露 | 中 | 高 | 强制加密存储;定期进行安全扫描;代码审查时关注安全漏洞。 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 系统设计
|
||||||
|
|
||||||
|
### 3.1. 系统架构
|
||||||
|
系统采用分层、模块化的架构,实现前后端分离。
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "客户端 (Clients)"
|
||||||
|
WebApp[Web 应用 (Vue/React)]
|
||||||
|
BrowserExt[浏览器插件]
|
||||||
|
MobileApp[移动应用 (PWA/Native)]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "服务端 (Backend - Elysia.js on Bun)"
|
||||||
|
API_Gateway[API 网关 / 路由层]
|
||||||
|
|
||||||
|
subgraph "核心服务层 (Core Services)"
|
||||||
|
AuthService[认证与授权服务]
|
||||||
|
UserService[用户管理服务]
|
||||||
|
ContentService[内容管理服务 (笔记/博客)]
|
||||||
|
FileService[文件管理服务]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "工具服务层 (Utility Services)"
|
||||||
|
ToolService[密码/书签/同步等工具服务]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "插件与中间件 (Plugins & Middlewares)"
|
||||||
|
Logger[日志插件]
|
||||||
|
ErrorHandler[错误处理]
|
||||||
|
JWTMiddleware[JWT认证]
|
||||||
|
Swagger[Swagger文档]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "数据与存储层 (Data & Storage)"
|
||||||
|
MySQL[(MySQL - 关系型数据)]
|
||||||
|
Redis[(Redis - 缓存/会话)]
|
||||||
|
Elasticsearch[(Elasticsearch - 全文搜索)]
|
||||||
|
ObjectStorage[对象存储 (OSS/NAS)]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "第三方服务 (3rd Party Services)"
|
||||||
|
EmailService[邮件服务]
|
||||||
|
OAuth[OAuth 2.0 提供商]
|
||||||
|
AI_API[AI/LLM API]
|
||||||
|
end
|
||||||
|
|
||||||
|
%% 连接关系
|
||||||
|
WebApp --> API_Gateway
|
||||||
|
BrowserExt --> API_Gateway
|
||||||
|
MobileApp --> API_Gateway
|
||||||
|
|
||||||
|
API_Gateway --> AuthService
|
||||||
|
API_Gateway --> UserService
|
||||||
|
API_Gateway --> ContentService
|
||||||
|
API_Gateway --> FileService
|
||||||
|
API_Gateway --> ToolService
|
||||||
|
|
||||||
|
AuthService <--> MySQL
|
||||||
|
UserService <--> MySQL
|
||||||
|
ContentService <--> MySQL
|
||||||
|
ContentService <--> Elasticsearch
|
||||||
|
FileService <--> ObjectStorage
|
||||||
|
ToolService <--> MySQL
|
||||||
|
|
||||||
|
AuthService --> JWTMiddleware
|
||||||
|
API_Gateway -- use --> Logger
|
||||||
|
API_Gateway -- use --> ErrorHandler
|
||||||
|
API_Gateway -- use --> JWTMiddleware
|
||||||
|
API_Gateway -- use --> Swagger
|
||||||
|
|
||||||
|
subgraph "通用依赖"
|
||||||
|
AuthService <--> Redis
|
||||||
|
UserService <--> Redis
|
||||||
|
ContentService <--> Redis
|
||||||
|
end
|
||||||
|
|
||||||
|
AuthService --> EmailService
|
||||||
|
AuthService --> OAuth
|
||||||
|
ContentService --> AI_API
|
||||||
|
```
|
||||||
|
* **客户端层**: 负责用户交互和数据展示。
|
||||||
|
* **服务端层**: 核心业务逻辑处理中心。通过API网关统一入口,内部按业务垂直划分为多个服务模块。
|
||||||
|
* **数据与存储层**: 持久化存储数据,提供缓存和搜索能力。
|
||||||
|
* **第三方服务**: 集成外部服务以完成特定功能。
|
||||||
|
|
||||||
|
### 3.2. 模块划分
|
||||||
|
系统功能将按以下模块进行开发,每个模块对应`src/controllers`, `src/services`下的独立子目录。
|
||||||
|
1. **`core`**: 核心模块,包括用户、角色、权限、组织、字典等。
|
||||||
|
2. **`content`**: 内容模块,包括笔记、博客、评论、分类、标签等。
|
||||||
|
3. **`space`**: 个人空间模块,包括生活日志、社交互动。
|
||||||
|
4. **`reader`**: 阅读模块,包括电子书管理、批注。
|
||||||
|
5. **`tools`**: 工具模块,包括密码、书签、文件、同步等。
|
||||||
|
6. **`system`**: 系统模块,包括健康检查、监控、配置管理。
|
||||||
|
|
||||||
|
### 3.3. 详细设计规划
|
||||||
|
本概要设计完成后,将对每个模块进行详细设计,产出物包括:
|
||||||
|
- **数据库设计文档**: E-R图、表结构定义(字段、类型、约束、索引)、数据字典。
|
||||||
|
- **API接口设计文档**: 使用Swagger/OpenAPI规范,定义每个端点的URL、HTTP方法、请求参数、响应体结构及错误码。
|
||||||
|
- **UI/UX设计稿**: 针对核心页面和流程,制作线框图或高保真原型。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 实现与编码
|
||||||
|
|
||||||
|
### 4.1. 开发环境与工具
|
||||||
|
- **IDE**: Visual Studio Code
|
||||||
|
- **语言**: TypeScript
|
||||||
|
- **运行时**: Bun.js
|
||||||
|
- **包管理器**: Bun
|
||||||
|
- **版本控制**: Git / GitHub
|
||||||
|
- **代码检查与格式化**: ESLint / Prettier
|
||||||
|
|
||||||
|
### 4.2. 编码规范
|
||||||
|
- 严格遵守项目已定义的注释、命名、代码风格规范。
|
||||||
|
- 所有业务逻辑必须在 `services` 层实现,`controllers` 层只负责路由和数据校验。
|
||||||
|
- 禁止在代码中硬编码配置项(如密钥、端口),所有配置通过环境变量或配置文件注入。
|
||||||
|
|
||||||
|
### 4.3. 版本控制策略
|
||||||
|
采用 **Gitflow工作流** 的简化版:
|
||||||
|
- `main`: 主分支,存放稳定、可发布的代码。每个里程碑完成后合并。
|
||||||
|
- `develop`: 开发分支,集成了所有已完成的功能。
|
||||||
|
- `feat/feature-name`: 功能分支,每个新功能或任务都在此分支开发,完成后合并到 `develop`。
|
||||||
|
- `fix/bug-name`: Bug修复分支。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 测试策略
|
||||||
|
|
||||||
|
### 5.1. 测试层次
|
||||||
|
- **单元测试**: 使用 `Vitest` 对 `services` 和 `utils` 中的核心函数进行测试,目标覆盖率 > 90%。
|
||||||
|
- **接口测试 (集成测试)**: 使用 `supertest` 或Elysia的内置测试工具,对每个API端点进行测试,验证其与数据库、缓存的交互是否正确。
|
||||||
|
- **端到端测试 (系统测试)**: 使用 `Playwright` 或 `Cypress` 对关键用户流程(如注册登录、发布博客)进行自动化测试。
|
||||||
|
- **性能测试**: 使用 `autocannon` 对核心API进行压力测试,确保其满足技术指标。
|
||||||
|
|
||||||
|
### 5.2. 测试执行
|
||||||
|
- 所有代码提交前,必须在本地通过相关单元测试和接口测试。
|
||||||
|
- CI/CD流水线将在每次向 `develop` 或 `main` 分支合并代码时,自动运行全量测试用例。测试不通过则禁止合并。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 部署与运维
|
||||||
|
|
||||||
|
### 6.1. 部署流程 (CI/CD)
|
||||||
|
使用 **GitHub Actions** 自动化构建、测试和部署流程。
|
||||||
|
1. **Push to `feat/*`**: 触发ESLint检查和单元测试。
|
||||||
|
2. **Merge to `develop`**: 触发全量测试,构建Docker镜像并推送到镜像仓库,然后部署到 **Staging (预发布)** 环境。
|
||||||
|
3. **Merge to `main`**: 触发全量测试,构建生产Docker镜像,并部署到 **Production (生产)** 环境。
|
||||||
|
|
||||||
|
### 6.2. 基础设施
|
||||||
|
- **运行环境**: Docker容器。
|
||||||
|
- **容器编排**: Docker Compose (初期) / Kubernetes (未来扩展)。
|
||||||
|
- **数据库/缓存**: 使用云服务商提供的托管服务或在Docker中自建。
|
||||||
|
|
||||||
|
### 6.3. 运维监控
|
||||||
|
- **日志**: 使用 `pino` 记录结构化日志,并聚合到统一的日志管理平台(如ELK Stack或Loki)。
|
||||||
|
- **监控与告警**: 使用 `Prometheus` 收集应用指标,`Grafana` 进行可视化展示,并针对关键指标(如API错误率、延迟)设置告警。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 维护与演进
|
||||||
|
|
||||||
|
- **问题跟踪**: 使用GitHub Issues跟踪Bug和功能请求。
|
||||||
|
- **文档同步**: 所有代码变更,若涉及架构、API或数据库设计,必须同步更新相关设计文档。
|
||||||
|
- **定期审查**: 每个里程碑结束后,进行项目复盘,评估开发流程、代码质量和系统架构,并进行优化。
|
||||||
|
- **依赖更新**: 定期(如每季度)审查并更新项目依赖,以修复潜在的安全漏洞和利用新特性。
|
@ -1,34 +1,34 @@
|
|||||||
/**
|
/**
|
||||||
* @file 健康检查控制器
|
* @file 健康检查控制器
|
||||||
* @author hotok
|
* @author hotok
|
||||||
* @date 2025-06-28
|
* @date 2025-06-28
|
||||||
* @lastEditor hotok
|
* @lastEditor hotok
|
||||||
* @lastEditTime 2025-06-28
|
* @lastEditTime 2025-06-28
|
||||||
* @description 提供服务健康状态检查,包括数据库、Redis等依赖检查
|
* @description 提供服务健康状态检查,包括数据库、Redis等依赖检查
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Elysia } from 'elysia';
|
import { Elysia } from 'elysia';
|
||||||
import { healthService } from '@/services/health.service';
|
import { healthService } from '@/services/health.service';
|
||||||
import { healthResponse } from '@/validators/health.response';
|
import { healthResponse } from '@/validators/health.response';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 健康检查控制器
|
* 健康检查控制器
|
||||||
* 提供系统健康状态检查接口
|
* 提供系统健康状态检查接口
|
||||||
*/
|
*/
|
||||||
export const healthController = new Elysia({ prefix: '/api' })
|
export const healthController = new Elysia({ prefix: '/api' })
|
||||||
.get('/health', async (ctx) => await healthService.getHealthStatus(ctx), {
|
.get('/health', async (ctx) => await healthService.getHealthStatus(ctx), {
|
||||||
detail: {
|
detail: {
|
||||||
tags: ['健康检查'],
|
tags: ['健康检查'],
|
||||||
summary: '获取系统健康状态',
|
summary: '获取系统健康状态',
|
||||||
description: '检查系统及各依赖服务的健康状态,包括数据库、Redis等',
|
description: '检查系统及各依赖服务的健康状态,包括数据库、Redis等',
|
||||||
},
|
},
|
||||||
response: healthResponse,
|
response: healthResponse,
|
||||||
})
|
})
|
||||||
.get('/health/detailed', async (ctx) => await healthService.getDetailedHealthStatus(ctx), {
|
.get('/health/detailed', async (ctx) => await healthService.getDetailedHealthStatus(ctx), {
|
||||||
detail: {
|
detail: {
|
||||||
tags: ['健康检查'],
|
tags: ['健康检查'],
|
||||||
summary: '获取详细健康状态',
|
summary: '获取详细健康状态',
|
||||||
description: '获取系统详细健康状态,包括性能指标、资源使用情况等',
|
description: '获取系统详细健康状态,包括性能指标、资源使用情况等',
|
||||||
},
|
},
|
||||||
response: healthResponse,
|
response: healthResponse,
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user