You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
unilife/UniLife项目文档.md

510 lines
24 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# UniLife项目文档
## 目录
- [一、项目概述](#一项目概述)
- [1.1 项目简介](#11-项目简介)
- [1.2 技术栈](#12-技术栈)
- [1.3 项目结构](#13-项目结构)
- [二、开发状态](#二开发状态)
- [2.1 已完成功能](#21-已完成功能)
- [2.2 待实现功能](#22-待实现功能)
- [三、开发计划](#三开发计划)
- [3.1 课程表与日程管理模块](#31-课程表与日程管理模块)
- [3.2 搜索功能模块](#32-搜索功能模块)
- [3.3 前端页面实现](#33-前端页面实现)
- [3.4 AI辅助学习模块](#34-ai辅助学习模块)
- [3.5 积分系统模块](#35-积分系统模块)
- [四、技术难点与解决方案](#四技术难点与解决方案)
- [4.1 文件上传与存储](#41-文件上传与存储)
- [4.2 课程表与日程管理](#42-课程表与日程管理)
- [4.3 搜索功能实现](#43-搜索功能实现)
- [4.4 用户认证与安全](#44-用户认证与安全)
- [4.5 实时通知](#45-实时通知)
- [五、数据库设计](#五数据库设计)
- [5.1 用户表 (users)](#51-用户表-users)
- [5.2 帖子表 (posts)](#52-帖子表-posts)
- [5.3 评论表 (comments)](#53-评论表-comments)
- [5.4 分类表 (categories)](#54-分类表-categories)
- [5.5 资源表 (resources)](#55-资源表-resources)
- [5.6 课程表 (courses)](#56-课程表-courses)
- [5.7 日程表 (schedules)](#57-日程表-schedules)
- [六、开发规范](#六开发规范)
- [6.1 代码规范](#61-代码规范)
- [6.2 提交规范](#62-提交规范)
- [6.3 文档规范](#63-文档规范)
- [七、后续优化建议](#七后续优化建议)
- [7.1 性能优化](#71-性能优化)
- [7.2 安全性优化](#72-安全性优化)
- [7.3 用户体验优化](#73-用户体验优化)
- [7.4 代码质量优化](#74-代码质量优化)
## 一、项目概述
### 1.1 项目简介
UniLife 是一款面向学生的在线论坛,致力于提升校园生活体验。其口号为 "有你生活,优你生活"核心功能包括论坛交流、学习资源共享、课程管理、AI 学习辅助等。项目初期以网站形式开发,后续可能扩展为移动端应用。
### 1.2 技术栈
#### 前端技术栈
- 框架Vue 3 + TypeScript
- 构建工具Vite
- UI组件库Element Plus
- HTTP客户端Axios
- 路由Vue Router
- 表单验证VeeValidate + Yup
#### 后端技术栈
- 框架Spring Boot 3
- 数据库MySQL
- ORM框架MyBatis
- 缓存Redis
- 认证JWT
- 邮件服务Spring Mail
- 工具库Hutool
- API文档Knife4j
### 1.3 项目结构
#### 前端结构
```
Front/vue-unilife/
├── public/ # 静态资源
├── src/
│ ├── assets/ # 资源文件
│ ├── components/ # 组件
│ ├── utils/ # 工具类
│ ├── views/ # 页面
│ ├── router/ # 路由
│ ├── store/ # 状态管理
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
└── package.json # 项目配置
```
#### 后端结构
```
unilife-server/
├── src/main/java/com/unilife/
│ ├── common/ # 通用类
│ ├── config/ # 配置类
│ ├── controller/ # 控制器
│ ├── interceptor/ # 拦截器
│ ├── mapper/ # 数据访问层
│ ├── model/ # 数据模型
│ │ ├── dto/ # 数据传输对象
│ │ ├── entity/ # 实体类
│ │ └── vo/ # 视图对象
│ ├── service/ # 服务层
│ │ └── impl/ # 服务实现
│ └── utils/ # 工具类
└── src/main/resources/
├── mappers/ # MyBatis映射文件
└── application.yml # 应用配置
```
## 二、开发状态
### 2.1 已完成功能
#### 前端
- ✅ 基础环境搭建Vue 3 + TypeScript + Vite
- ✅ 基础组件库集成Element Plus
- ✅ HTTP请求封装Axios
- ✅ 页面原型设计
#### 后端
- ✅ 用户认证模块(注册、登录、验证码)
- ✅ 用户信息管理模块(个人信息、密码修改、头像上传)
- ✅ 论坛功能模块(帖子、评论、点赞、分类)
- ✅ 学习资源共享模块(资源上传、下载、点赞、分类)- ✅ 课程表与日程管理模块(课程管理、日程管理、冲突检测、提醒功能)- ✅ 搜索功能模块(综合搜索、分类搜索、搜索建议、热门关键词)- ✅ 项目文档(接口文档、开发进度、开发计划)
### 2.2 待实现功能- ✅ 课程表与日程管理模块(已完成)- ✅ 搜索功能模块(已完成)- ✅ 前端页面实现(已完成)- ❌ AI辅助学习模块- ❌ 积分系统模块- ❌ 实时通知系统
## 三、开发计划
### 3.1 课程表与日程管理模块
**优先级**:高
**任务**
1. 设计并实现课程和日程相关的实体类、DTO和VO
- Course实体类
- Schedule实体类
- 相关的DTO和VO
2. 设计并实现CourseMapper和ScheduleMapper接口及XML映射文件
- 课程的CRUD操作
- 日程的CRUD操作
- 按时间和用户查询
3. 设计并实现CourseService和ScheduleService接口及实现类
- 课程导入逻辑
- 日程管理逻辑
- 日程提醒逻辑
4. 设计并实现CourseController和ScheduleController
- 课程管理API
- 日程管理API
- 日程提醒API
5. 实现课程导入功能
- 手动添加课程
- 批量导入课程
- 课程冲突检测
6. 实现日程提醒功能
- 定时提醒
- 邮件通知
- 提醒设置
### 3.2 搜索功能模块
**优先级**:中
**任务**
1. 设计并实现搜索相关的DTO和VO
- SearchDTO
- SearchResultVO
2. 设计并实现SearchService接口和实现类
- 全文搜索逻辑
- 分类搜索逻辑
- 搜索结果排序
3. 设计并实现SearchController
- 全局搜索API
- 分类搜索API
- 搜索建议API
4. 实现全文搜索功能
- 帖子内容搜索
- 资源内容搜索
- 用户信息搜索
5. 实现分类搜索功能
- 按分类筛选
- 按标签筛选
- 高级筛选条件
### 3.3 前端页面实现
**优先级**:高
**任务**
1. 实现用户认证相关页面
- 登录页面
- 注册页面
- 找回密码页面
2. 实现用户信息管理相关页面
- 个人主页
- 个人设置页面
- 头像上传组件
3. 实现论坛功能相关页面
- 帖子列表页面
- 帖子详情页面
- 帖子发布/编辑页面
- 评论组件
4. 实现资源共享相关页面
- 资源列表页面
- 资源详情页面
- 资源上传页面
5. 实现课程表与日程相关页面
- 课程表页面
- 日程管理页面
- 日程添加/编辑页面
### 3.4 AI辅助学习模块
**优先级**:低
**任务**
1. 调研并选择合适的AI服务
2. 完成学习计划制定API
3. 完成智能提醒API
4. 实现前端AI助手页面
### 3.5 积分系统模块
**优先级**:低
**任务**
1. 完成积分规则设计
2. 完成积分获取、消费API
3. 完成积分排行榜API
4. 实现前端积分展示功能
5. 实现前端积分排行榜页面
## 四、技术难点与解决方案
### 4.1 文件上传与存储
**难点**:处理大文件上传,确保存储安全,提供高效的下载体验。
**解决方案**
1. 实现分片上传,将大文件分成多个小块上传,减轻服务器压力
2. 使用对象存储服务如阿里云OSS、七牛云等存储文件提高可靠性和访问速度
3. 设置文件类型和大小限制,防止恶意文件上传
4. 实现文件MD5校验避免重复上传相同文件
5. 使用CDN加速文件下载
### 4.2 课程表与日程管理
**难点**:课程表数据结构设计,日程冲突检测,提醒功能实现。
**解决方案**
1. 设计灵活的课程表数据结构,支持周期性课程和特殊课程
2. 使用算法检测日程冲突,提供冲突解决建议
3. 使用定时任务实现日程提醒功能
4. 提供多种提醒方式(站内通知、邮件等)
5. 实现日程导入/导出功能,支持与其他日历系统同步
### 4.3 搜索功能实现
**难点**:实现高效的全文搜索,处理大量数据的搜索性能问题。
**解决方案**
1. 使用Elasticsearch或MySQL全文索引实现搜索功能
2. 对搜索结果进行缓存,减少重复搜索的开销
3. 实现搜索结果分页和懒加载,提高用户体验
4. 使用分词技术提高中文搜索的准确性
5. 实现搜索结果排序和过滤功能
### 4.4 用户认证与安全
**难点**:确保用户数据安全,防止未授权访问。
**解决方案**
1. 使用JWT进行认证实现权限控制
2. 加密敏感数据,如密码
3. 实现角色和权限管理
4. 防范常见安全威胁如XSS和CSRF攻击
5. 实现登录异常检测和防护
### 4.5 实时通知
**难点**:实现实时消息推送。
**解决方案**
1. 使用WebSocket或服务器发送事件(SSE)
2. 实现消息队列处理大量通知
3. 设计通知优先级和分类
4. 提供通知设置和管理功能
5. 实现离线通知存储和同步
## 五、数据库设计
### 5.1 用户表 (users)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ------------------------------------ |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 用户ID |
| username | VARCHAR(50) | NOT NULL, UNIQUE | 用户名 |
| email | VARCHAR(100) | NOT NULL, UNIQUE | 邮箱地址(学校邮箱) |
| password | VARCHAR(255) | NOT NULL | 密码(加密存储) |
| nickname | VARCHAR(50) | NOT NULL | 昵称 |
| avatar | VARCHAR(255) | | 头像URL |
| bio | TEXT | | 个人简介 |
| gender | TINYINT | | 性别0-未知, 1-男, 2-女) |
| student_id | VARCHAR(20) | UNIQUE | 学号 |
| department | VARCHAR(100) | | 院系 |
| major | VARCHAR(100) | | 专业 |
| grade | VARCHAR(20) | | 年级 |
| points | INT | DEFAULT 0 | 积分 |
| role | TINYINT | DEFAULT 0 | 角色0-普通用户, 1-版主, 2-管理员) |
| status | TINYINT | DEFAULT 1 | 状态0-禁用, 1-启用) |
| is_verified | TINYINT | DEFAULT 0 | 是否验证0-未验证, 1-已验证) |
| login_ip | VARCHAR(50) | | 最近登录IP |
| login_time | DATETIME | | 最近登录时间 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 5.2 帖子表 (posts)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ------------------------------ |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 帖子ID |
| user_id | BIGINT | NOT NULL, FOREIGN KEY | 发布用户ID |
| title | VARCHAR(100) | NOT NULL | 帖子标题 |
| content | TEXT | NOT NULL | 帖子内容 |
| category_id | BIGINT | NOT NULL, FOREIGN KEY | 分类ID |
| view_count | INT | DEFAULT 0 | 浏览次数 |
| like_count | INT | DEFAULT 0 | 点赞次数 |
| comment_count | INT | DEFAULT 0 | 评论次数 |
| status | TINYINT | DEFAULT 1 | 状态0-删除, 1-正常, 2-置顶) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 5.3 评论表 (comments)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ------------------------ |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 评论ID |
| post_id | BIGINT | NOT NULL, FOREIGN KEY | 帖子ID |
| user_id | BIGINT | NOT NULL, FOREIGN KEY | 评论用户ID |
| content | TEXT | NOT NULL | 评论内容 |
| parent_id | BIGINT | | 父评论ID回复某条评论 |
| like_count | INT | DEFAULT 0 | 点赞次数 |
| status | TINYINT | DEFAULT 1 | 状态0-删除, 1-正常) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 5.4 分类表 (categories)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ---------------------- |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 分类ID |
| name | VARCHAR(50) | NOT NULL, UNIQUE | 分类名称 |
| description | VARCHAR(255) | | 分类描述 |
| icon | VARCHAR(255) | | 分类图标 |
| sort | INT | DEFAULT 0 | 排序 |
| status | TINYINT | DEFAULT 1 | 状态0-禁用, 1-启用) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 5.5 资源表 (resources)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ---------------------- |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 资源ID |
| user_id | BIGINT | NOT NULL, FOREIGN KEY | 上传用户ID |
| title | VARCHAR(100) | NOT NULL | 资源标题 |
| description | TEXT | | 资源描述 |
| file_url | VARCHAR(255) | NOT NULL | 文件URL |
| file_size | BIGINT | NOT NULL | 文件大小(字节) |
| file_type | VARCHAR(50) | NOT NULL | 文件类型 |
| category_id | BIGINT | NOT NULL, FOREIGN KEY | 分类ID |
| download_count | INT | DEFAULT 0 | 下载次数 |
| like_count | INT | DEFAULT 0 | 点赞次数 |
| status | TINYINT | DEFAULT 1 | 状态0-删除, 1-正常) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 5.6 课程表 (courses)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ---------------------- |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 课程ID |
| user_id | BIGINT | NOT NULL, FOREIGN KEY | 用户ID |
| name | VARCHAR(100) | NOT NULL | 课程名称 |
| teacher | VARCHAR(50) | | 教师姓名 |
| location | VARCHAR(100) | | 上课地点 |
| day_of_week | TINYINT | NOT NULL | 星期几1-7 |
| start_time | TIME | NOT NULL | 开始时间 |
| end_time | TIME | NOT NULL | 结束时间 |
| start_week | TINYINT | NOT NULL | 开始周次 |
| end_week | TINYINT | NOT NULL | 结束周次 |
| color | VARCHAR(20) | | 显示颜色 |
| status | TINYINT | DEFAULT 1 | 状态0-删除, 1-正常) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 5.7 日程表 (schedules)
| 字段名 | 类型 | 约束 | 说明 |
| ----------- | ------------ | ----------------------------------------------------- | ---------------------- |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 日程ID |
| user_id | BIGINT | NOT NULL, FOREIGN KEY | 用户ID |
| title | VARCHAR(100) | NOT NULL | 日程标题 |
| description | TEXT | | 日程描述 |
| start_time | DATETIME | NOT NULL | 开始时间 |
| end_time | DATETIME | NOT NULL | 结束时间 |
| location | VARCHAR(100) | | 地点 |
| is_all_day | TINYINT | DEFAULT 0 | 是否全天0-否, 1-是) |
| reminder | TINYINT | | 提醒时间(分钟) |
| color | VARCHAR(20) | | 显示颜色 |
| status | TINYINT | DEFAULT 1 | 状态0-删除, 1-正常) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
## 六、开发规范
### 6.1 代码规范
- **前端**
- 遵循ESLint配置使用Prettier格式化
- 组件命名采用PascalCase
- 变量命名采用camelCase
- 使用TypeScript类型定义
- 组件按功能模块组织
- **后端**
- 遵循阿里巴巴Java开发手册
- 类名采用PascalCase
- 方法名和变量名采用camelCase
- 常量名采用全大写下划线分隔
- 包名全小写
- 接口和实现类命名规范
### 6.2 提交规范
- 使用语义化的提交信息
- feat: 新功能
- fix: 修复bug
- docs: 文档更新
- style: 代码格式调整
- refactor: 代码重构
- test: 测试相关
- chore: 构建过程或辅助工具的变动
- 每个功能或修复在单独的分支上开发
- 提交前进行代码审查
- 定期合并主分支到开发分支
### 6.3 文档规范
- API文档使用Swagger/Knife4j生成
- 重要功能编写设计文档
- 定期更新开发文档
- 代码中添加必要的注释
- 复杂算法和业务逻辑需要详细注释
## 七、后续优化建议
### 7.1 性能优化
1. 添加缓存机制,减少数据库查询
- 使用Redis缓存热门数据
- 实现本地缓存减轻数据库压力
2. 优化SQL查询添加必要的索引
- 分析慢查询日志
- 优化复杂查询
3. 实现分页查询,减少数据传输量
4. 使用异步处理耗时操作
- 文件处理
- 邮件发送
- 数据统计
### 7.2 安全性优化
1. 完善权限控制系统
- 基于角色的访问控制
- 资源级别的权限控制
2. 加强输入验证和过滤
- 防止SQL注入
- 防止XSS攻击
3. 实现敏感操作的二次验证
4. 加强密码安全性
- 密码强度检测
- 定期修改密码提醒
### 7.3 用户体验优化
1. 实现实时通知功能
- WebSocket实现即时消息
- 消息推送机制
2. 优化页面加载速度
- 资源懒加载
- 组件按需加载
3. 添加更多交互反馈
- 操作成功/失败提示
- 加载状态指示
4. 实现个性化推荐
- 基于用户行为的内容推荐
- 热门内容推荐
### 7.4 代码质量优化
1. 增加单元测试和集成测试
- 提高测试覆盖率
- 自动化测试流程
2. 规范代码风格
- 使用代码格式化工具
- 制定统一的命名规范
3. 完善异常处理机制
- 全局异常处理
- 详细的错误日志
4. 重构复杂代码
- 提取公共方法
- 优化代码结构