diff --git a/.gitignore b/.gitignore index 8e6e1e7..62c8935 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1 @@ -UniLife开发进度与计划.md -UniLife接口文档.md -UniLife项目文档.md -文档说明.md .idea/ \ No newline at end of file diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml index 81f5ca6..4dc0afd 100644 --- a/.idea/AugmentWebviewStateStore.xml +++ b/.idea/AugmentWebviewStateStore.xml @@ -3,7 +3,7 @@ diff --git a/UniLife开发进度与计划.md b/UniLife开发进度与计划.md new file mode 100644 index 0000000..dec5320 --- /dev/null +++ b/UniLife开发进度与计划.md @@ -0,0 +1,386 @@ +# UniLife开发进度与计划 + +## 目录 +- [一、当前开发进度](#一当前开发进度) + - [1.1 已完成功能](#11-已完成功能) + - [1.2 本次开发内容](#12-本次开发内容) +- [二、下一步开发计划](#二下一步开发计划) + - [2.1 课程表与日程管理模块](#21-课程表与日程管理模块) + - [2.2 搜索功能模块](#22-搜索功能模块) + - [2.3 前端页面实现](#23-前端页面实现) + - [2.4 AI辅助学习模块](#24-ai辅助学习模块) + - [2.5 积分系统模块](#25-积分系统模块) +- [三、开发阶段规划](#三开发阶段规划) + - [3.1 阶段一:基础功能完善](#31-阶段一基础功能完善) + - [3.2 阶段二:核心功能开发](#32-阶段二核心功能开发) + - [3.3 阶段三:高级功能开发](#33-阶段三高级功能开发) + - [3.4 阶段四:优化与测试](#34-阶段四优化与测试) +- [四、技术难点与解决方案](#四技术难点与解决方案) + - [4.1 评论嵌套结构](#41-评论嵌套结构) + - [4.2 点赞功能实现](#42-点赞功能实现) + - [4.3 文件上传与存储](#43-文件上传与存储) + - [4.4 课程表与日程管理](#44-课程表与日程管理) + - [4.5 搜索功能实现](#45-搜索功能实现) +- [五、后续优化建议](#五后续优化建议) + - [5.1 性能优化](#51-性能优化) + - [5.2 安全性优化](#52-安全性优化) + - [5.3 用户体验优化](#53-用户体验优化) + - [5.4 代码质量优化](#54-代码质量优化) + +## 一、当前开发进度 + +### 1.1 已完成功能 + +#### 前端 +- ✅ 基础环境搭建(Vue 3 + TypeScript + Vite) +- ✅ 基础组件库集成(Element Plus) +- ✅ HTTP请求封装(Axios) +- ✅ 页面原型设计 + +#### 后端 +- ✅ 用户认证模块 + - 用户注册 + - 用户登录(密码登录) + - 邮箱验证码获取 + - 邮箱验证码登录 + - JWT认证与拦截器 +- ✅ 用户信息管理模块 + - 获取用户个人信息 + - 更新用户个人信息 + - 修改用户密码 + - 上传用户头像 + - 更新用户邮箱 +- ✅ 论坛功能模块 + - 帖子发布、获取、更新、删除API + - 帖子点赞功能 + - 评论发布、获取、删除API + - 评论点赞功能 + - 分类管理API +- ✅ 学习资源共享模块 + - 资源上传、获取、更新、删除API + - 资源下载功能 + - 资源点赞功能 + - 资源分类查询 + - 用户资源管理 +- ✅ 项目文档 + - 接口文档 + - 开发进度文档 + - 开发计划文档 +- ✅ 课程表与日程管理模块 + - 课程创建、获取、更新、删除API + - 日程创建、获取、更新、删除API + - 课程冲突检测功能 + - 日程提醒功能(邮件通知) + +### 1.2 本次开发内容 + +在本次开发中,我们完成了以下工作: + +#### 1.2.1 学习资源共享模块实现 +1. 设计并实现了资源相关的实体类、DTO和VO + - Resource实体类:定义资源的基本属性和关系 + - CreateResourceDTO:用于创建和更新资源的数据传输对象 + - ResourceVO:用于返回给前端的资源视图对象,包含额外信息 +2. 设计并实现了ResourceMapper接口和XML映射文件 + - 实现了资源的CRUD操作 + - 支持按分类、用户和关键词查询 + - 实现了资源点赞和下载计数功能 +3. 设计并实现了ResourceService接口和实现类 + - 实现了资源上传逻辑,包括文件存储 + - 实现了资源下载逻辑 + - 实现了资源分类和搜索逻辑 + - 实现了权限控制和安全检查 +4. 设计并实现了ResourceController,提供资源相关的RESTful API + - 资源上传API + - 资源下载API + - 资源列表和详情API + - 资源搜索API + - 用户资源管理API + +#### 1.2.2 文档完善与更新 +1. 创建了完整的API接口文档 + - 详细记录了所有已实现API的请求参数和响应格式 + - 按模块分类组织,便于查阅 + - 包含了认证、用户信息、论坛功能和资源共享等模块 +2. 更新了开发进度文档 + - 记录了已完成的功能模块 + - 规划了下一步的开发计划 + - 分析了技术难点和解决方案 + - 提出了后续优化建议 + +#### 1.2.3 课程表与日程管理模块实现 +1. 设计并实现了课程和日程相关的实体类、DTO和VO + - Course实体类:定义课程的基本属性和关系 + - Schedule实体类:定义日程的基本属性和关系 + - CreateCourseDTO和CourseVO:用于课程的创建、更新和展示 + - CreateScheduleDTO和ScheduleVO:用于日程的创建、更新和展示 +2. 设计并实现了CourseMapper和ScheduleMapper接口及XML映射文件 + - 实现了课程和日程的CRUD操作 + - 支持按用户、时间和日期查询 + - 实现了课程和日程的冲突检测功能 +3. 设计并实现了CourseService和ScheduleService接口及实现类 + - 实现了课程管理逻辑,包括创建、查询、更新和删除 + - 实现了日程管理逻辑,包括创建、查询、更新和删除 + - 实现了课程冲突检测逻辑 + - 实现了日程提醒功能,包括邮件通知 +4. 设计并实现了CourseController和ScheduleController + - 课程管理API,包括创建、获取、更新和删除课程 + - 日程管理API,包括创建、获取、更新和删除日程 + - 课程冲突检测API + - 日程提醒处理API + +## 二、下一步开发计划 + +### 2.1 搜索功能模块 + +**优先级**:中 + +**任务**: +1. 设计并实现搜索相关的DTO和VO + - SearchDTO + - SearchResultVO +2. 设计并实现SearchService接口和实现类 + - 全文搜索逻辑 + - 分类搜索逻辑 + - 搜索结果排序 +3. 设计并实现SearchController + - 全局搜索API + - 分类搜索API + - 搜索建议API +4. 实现全文搜索功能 + - 帖子内容搜索 + - 资源内容搜索 + - 用户信息搜索 +5. 实现分类搜索功能 + - 按分类筛选 + - 按标签筛选 + - 高级筛选条件 + +### 2.3 前端页面实现 + +**优先级**:高 + +**任务**: +1. 实现用户认证相关页面 + - 登录页面 + - 注册页面 + - 找回密码页面 +2. 实现用户信息管理相关页面 + - 个人主页 + - 个人设置页面 + - 头像上传组件 +3. 实现论坛功能相关页面 + - 帖子列表页面 + - 帖子详情页面 + - 帖子发布/编辑页面 + - 评论组件 +4. 实现资源共享相关页面 + - 资源列表页面 + - 资源详情页面 + - 资源上传页面 +5. 实现课程表与日程相关页面 + - 课程表页面 + - 日程管理页面 + - 日程添加/编辑页面 + +### 2.4 AI辅助学习模块 + +**优先级**:低 + +**任务**: +1. 调研并选择合适的AI服务 +2. 完成学习计划制定API +3. 完成智能提醒API +4. 实现前端AI助手页面 + +### 2.5 积分系统模块 + +**优先级**:低 + +**任务**: +1. 完成积分规则设计 +2. 完成积分获取、消费API +3. 完成积分排行榜API +4. 实现前端积分展示功能 +5. 实现前端积分排行榜页面 + +## 三、开发阶段规划 + +### 3.1 阶段一:基础功能完善(2周) + +#### 用户信息管理模块(已完成) +- 完成用户个人信息获取API +- 完成用户个人信息更新API +- 完成用户密码修改API +- 完成用户头像上传API +- 完成用户邮箱更新API + +#### 论坛功能模块(基础部分)(已完成) +- 完成帖子表、评论表、分类表的数据库设计 +- 完成帖子发布、获取、更新、删除API +- 完成评论发布、获取API + +### 3.2 阶段二:核心功能开发(3周) + +#### 论坛功能模块(高级部分)(已完成) +- 完成点赞、收藏功能API +- 完成帖子分类管理API +- 完成帖子热门排序算法 + +#### 学习资源共享模块(已完成) +- 完成资源表的数据库设计 +- 完成资源上传、下载、分类API +- 完成资源权限管理API + +#### 课程表与日程管理模块(已完成) +- 完成课程表、日程表的数据库设计 +- 完成课程创建、获取、更新、删除API +- 完成日程创建、获取、更新、删除API +- 完成课程冲突检测功能 +- 完成日程提醒功能(邮件通知) + +### 3.3 阶段三:高级功能开发(3周) + +#### 搜索功能模块(待开发) +- 完成全文搜索功能API +- 完成分类搜索功能API +- 实现前端搜索结果页面 +- 实现前端搜索建议功能 + +#### 积分系统模块(待开发) +- 完成积分规则设计 +- 完成积分获取、消费API +- 完成积分排行榜API +- 实现前端积分展示功能 +- 实现前端积分排行榜页面 + +#### AI辅助学习模块(待开发) +- 调研并选择合适的AI服务 +- 完成学习计划制定API +- 完成智能提醒API +- 实现前端AI助手页面 + +### 3.4 阶段四:优化与测试(2周) + +#### 性能优化(待开发) +- 前端性能优化(代码分割、懒加载等) +- 后端性能优化(缓存、索引等) +- 数据库性能优化 + +#### 测试与修复(待开发) +- 单元测试 +- 集成测试 +- 用户界面测试 +- Bug修复 + +## 四、技术难点与解决方案 + +### 4.1 评论嵌套结构 + +**难点**:评论可能有多级嵌套回复,需要合理设计数据结构和查询方式。 + +**解决方案**: +1. 在数据库中使用parent_id字段记录父评论ID +2. 查询时先获取一级评论,再获取每个一级评论的回复 +3. 使用递归方式构建评论树结构 + +### 4.2 点赞功能实现 + +**难点**:需要记录用户点赞状态,并保证点赞/取消点赞操作的原子性。 + +**解决方案**: +1. 创建专门的点赞表记录用户点赞关系 +2. 使用唯一索引确保一个用户只能点赞一次 +3. 使用事务确保点赞操作的原子性 + +### 4.3 文件上传与存储 + +**难点**:处理大文件上传,确保存储安全,提供高效的下载体验。 + +**解决方案**: +1. 实现分片上传,将大文件分成多个小块上传,减轻服务器压力 +2. 使用对象存储服务(如阿里云OSS、七牛云等)存储文件,提高可靠性和访问速度 +3. 设置文件类型和大小限制,防止恶意文件上传 +4. 实现文件MD5校验,避免重复上传相同文件 +5. 使用CDN加速文件下载 + +### 4.4 课程表与日程管理 + +**难点**:课程表数据结构设计,日程冲突检测,提醒功能实现。 + +**解决方案**: +1. 设计灵活的课程表数据结构,支持周期性课程和特殊课程 +2. 使用算法检测日程冲突,提供冲突解决建议 +3. 使用定时任务实现日程提醒功能 +4. 提供多种提醒方式(站内通知、邮件等) +5. 实现日程导入/导出功能,支持与其他日历系统同步 + +### 4.5 搜索功能实现 + +**难点**:实现高效的全文搜索,处理大量数据的搜索性能问题。 + +**解决方案**: +1. 使用Elasticsearch或MySQL全文索引实现搜索功能 +2. 对搜索结果进行缓存,减少重复搜索的开销 +3. 实现搜索结果分页和懒加载,提高用户体验 +4. 使用分词技术提高中文搜索的准确性 +5. 实现搜索结果排序和过滤功能 + +## 五、后续优化建议 + +### 5.1 性能优化 + +1. 添加缓存机制,减少数据库查询 + - 使用Redis缓存热门数据 + - 实现本地缓存减轻数据库压力 +2. 优化SQL查询,添加必要的索引 + - 分析慢查询日志 + - 优化复杂查询 +3. 实现分页查询,减少数据传输量 +4. 使用异步处理耗时操作 + - 文件处理 + - 邮件发送 + - 数据统计 + +### 5.2 安全性优化 + +1. 完善权限控制系统 + - 基于角色的访问控制 + - 资源级别的权限控制 +2. 加强输入验证和过滤 + - 防止SQL注入 + - 防止XSS攻击 +3. 实现敏感操作的二次验证 +4. 加强密码安全性 + - 密码强度检测 + - 定期修改密码提醒 + +### 5.3 用户体验优化 + +1. 实现实时通知功能 + - WebSocket实现即时消息 + - 消息推送机制 +2. 优化页面加载速度 + - 资源懒加载 + - 组件按需加载 +3. 添加更多交互反馈 + - 操作成功/失败提示 + - 加载状态指示 +4. 实现个性化推荐 + - 基于用户行为的内容推荐 + - 热门内容推荐 + +### 5.4 代码质量优化 + +1. 增加单元测试和集成测试 + - 提高测试覆盖率 + - 自动化测试流程 +2. 规范代码风格 + - 使用代码格式化工具 + - 制定统一的命名规范 +3. 完善异常处理机制 + - 全局异常处理 + - 详细的错误日志 +4. 重构复杂代码 + - 提取公共方法 + - 优化代码结构 diff --git a/UniLife接口文档.md b/UniLife接口文档.md new file mode 100644 index 0000000..f4d5f89 --- /dev/null +++ b/UniLife接口文档.md @@ -0,0 +1,1339 @@ +# UniLife接口文档 + +## 目录 +- [1. 基础信息](#1-基础信息) +- [2. 用户认证模块](#2-用户认证模块) +- [3. 用户信息管理模块](#3-用户信息管理模块) +- [4. 论坛功能模块](#4-论坛功能模块) + - [4.1 帖子管理](#41-帖子管理) + - [4.2 评论管理](#42-评论管理) + - [4.3 分类管理](#43-分类管理) +- [5. 学习资源共享模块](#5-学习资源共享模块) +- [6. 课程表与日程管理模块](#6-课程表与日程管理模块) +- [7. 待实现模块](#7-待实现模块) + +## 1. 基础信息 + +- **基础URL**: `http://localhost:8087`(本地测试) +- **接口格式**: RESTful API +- **数据格式**: JSON +- **字符编码**: UTF-8 +- **认证方式**: JWT (JSON Web Token) + +### HTTP方法 +- **GET**: 获取资源 +- **POST**: 创建资源 +- **PUT**: 更新资源(全量更新) +- **DELETE**: 删除资源 + +### 响应格式 +成功响应: +```json +{ + "code": 200, + "message": "success", + "data": { + "key": "value" + } +} +``` + +错误响应: +```json +{ + "code": 400, + "message": "参数错误", + "data": null +} +``` + +## 2. 用户认证模块 + +### 2.1 用户注册 +- **URL**: `/users/register` +- **方法**: POST +- **描述**: 创建新用户账号 + +请求参数: +```json +{ + "username": "student123", + "email": "student@school.edu", + "password": "Secure@Password123", + "nickname": "学生昵称", + "studentId": "20220101001", + "department": "计算机学院", + "major": "软件工程", + "grade": "2023级" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "注册成功", + "data": { + "userId": 12345, + "username": "student123", + "nickname": "学生昵称" + } +} +``` + +### 2.2 用户密码登录 +- **URL**: `/users/login` +- **方法**: POST +- **描述**: 用户登录 + +请求参数: +```json +{ + "username": "student123", + "password": "Secure@Password123" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "登录成功", + "data": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "userInfo": { + "userId": 12345, + "username": "student123", + "nickname": "学生昵称", + "avatar": "https://example.com/avatar.jpg", + "role": 0, + "isVerified": true, + "status": 1 + } + } +} +``` + +### 2.3 获取邮箱验证码 +- **URL**: `/users/code` +- **方法**: POST +- **描述**: 向指定邮箱发送登录验证码 + +请求参数: +```json +{ + "email": "student@school.edu" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "验证码已发送", + "data": null +} +``` + +### 2.4 邮箱验证码登录 +- **URL**: `/users/login/code` +- **方法**: POST +- **描述**: 使用邮箱和验证码进行登录 + +请求参数: +```json +{ + "email": "student@school.edu", + "code": "123456" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "登录成功", + "data": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "userInfo": { + "userId": 12345, + "username": "student123", + "nickname": "学生昵称", + "avatar": "https://example.com/avatar.jpg", + "role": 0 + } + } +} +``` + +## 3. 用户信息管理模块 + +### 3.1 获取用户个人信息 +- **URL**: `/users/info` +- **方法**: GET +- **描述**: 获取当前登录用户的个人资料信息 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 12345, + "username": "student123", + "email": "student@school.edu", + "nickname": "测试员", + "avatar": "https://example.com/avatars/default.png", + "bio": "这是一个个人简介", + "gender": 2, + "studentId": "20220101001", + "department": "计算机学院", + "major": "软件工程", + "grade": "2023级", + "points": 100, + "role": 0, + "isVerified": 1 + } +} +``` + +### 3.2 更新用户个人信息 +- **URL**: `/users/profile` +- **方法**: PUT +- **描述**: 更新当前登录用户的个人资料 + +请求参数: +```json +{ + "nickname": "新昵称", + "bio": "这是更新后的个人简介", + "gender": 2, + "department": "计算机学院", + "major": "软件工程", + "grade": "2023级" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "更新成功", + "data": null +} +``` + +### 3.3 修改用户密码 +- **URL**: `/users/password` +- **方法**: PUT +- **描述**: 修改当前登录用户的密码 + +请求参数: +```json +{ + "code": "验证码", + "newPassword": "新密码" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "密码修改成功", + "data": null +} +``` + +### 3.4 上传用户头像 +- **URL**: `/users/avatar` +- **方法**: POST +- **描述**: 上传或更新用户头像 + +请求参数: +``` +file: [图片文件] +``` + +响应结果: +```json +{ + "code": 200, + "message": "头像上传成功", + "data": { + "avatar": "https://example.com/avatars/user_123456.jpg" + } +} +``` + +### 3.5 更新用户邮箱 +- **URL**: `/users/email` +- **方法**: PUT +- **描述**: 更新用户邮箱地址 + +请求参数: +```json +{ + "email": "new_email@school.edu", + "code": "123456" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "邮箱更新成功", + "data": null +} +``` + +## 4. 论坛功能模块 + +### 4.1 帖子管理 + +#### 4.1.1 获取帖子列表 +- **URL**: `/posts` +- **方法**: GET +- **描述**: 获取帖子列表,支持分页和筛选 + +请求参数: +``` +page: 1 +size: 10 +category: 1 +sort: latest +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 100, + "list": [ + { + "id": 1, + "title": "帖子标题", + "summary": "帖子摘要...", + "userId": 12345, + "nickname": "发布者昵称", + "avatar": "https://example.com/avatar.jpg", + "categoryId": 1, + "categoryName": "学习交流", + "viewCount": 100, + "likeCount": 20, + "commentCount": 5, + "createdAt": "2023-05-01 12:00:00" + } + ], + "pages": 10 + } +} +``` + +#### 4.1.2 获取帖子详情 +- **URL**: `/posts/{id}` +- **方法**: GET +- **描述**: 获取帖子详情 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 1, + "title": "帖子标题", + "content": "帖子内容...", + "userId": 12345, + "nickname": "发布者昵称", + "avatar": "https://example.com/avatar.jpg", + "categoryId": 1, + "categoryName": "学习交流", + "viewCount": 100, + "likeCount": 20, + "commentCount": 5, + "isLiked": true, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } +} +``` + +#### 4.1.3 发布帖子 +- **URL**: `/posts` +- **方法**: POST +- **描述**: 发布新帖子 + +请求参数: +```json +{ + "title": "帖子标题", + "content": "帖子内容...", + "categoryId": 1 +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "发布成功", + "data": { + "postId": 1 + } +} +``` + +#### 4.1.4 更新帖子 +- **URL**: `/posts/{id}` +- **方法**: PUT +- **描述**: 更新帖子 + +请求参数: +```json +{ + "title": "更新后的标题", + "content": "更新后的内容...", + "categoryId": 2 +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "更新成功", + "data": null +} +``` + +#### 4.1.5 删除帖子 +- **URL**: `/posts/{id}` +- **方法**: DELETE +- **描述**: 删除帖子 + +响应结果: +```json +{ + "code": 200, + "message": "删除成功", + "data": null +} +``` + +#### 4.1.6 点赞/取消点赞帖子 +- **URL**: `/posts/{id}/like` +- **方法**: POST +- **描述**: 点赞或取消点赞帖子 + +响应结果: +```json +{ + "code": 200, + "message": "点赞成功", + "data": null +} +``` + +### 4.2 评论管理 + +#### 4.2.1 获取评论列表 +- **URL**: `/comments/post/{postId}` +- **方法**: GET +- **描述**: 获取帖子的评论列表 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 50, + "list": [ + { + "id": 1, + "content": "评论内容...", + "userId": 12345, + "nickname": "评论者昵称", + "avatar": "https://example.com/avatar.jpg", + "likeCount": 5, + "isLiked": false, + "createdAt": "2023-05-01 12:30:00", + "replies": [ + { + "id": 2, + "content": "回复内容...", + "userId": 54321, + "nickname": "回复者昵称", + "avatar": "https://example.com/avatar2.jpg", + "likeCount": 2, + "isLiked": true, + "createdAt": "2023-05-01 12:35:00" + } + ] + } + ] + } +} +``` + +#### 4.2.2 发表评论 +- **URL**: `/comments` +- **方法**: POST +- **描述**: 发表评论或回复 + +请求参数: +```json +{ + "postId": 1, + "content": "评论内容...", + "parentId": null +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "评论成功", + "data": { + "commentId": 3 + } +} +``` + +#### 4.2.3 删除评论 +- **URL**: `/comments/{id}` +- **方法**: DELETE +- **描述**: 删除评论 + +响应结果: +```json +{ + "code": 200, + "message": "删除成功", + "data": null +} +``` + +#### 4.2.4 点赞/取消点赞评论 +- **URL**: `/comments/{id}/like` +- **方法**: POST +- **描述**: 点赞或取消点赞评论 + +响应结果: +```json +{ + "code": 200, + "message": "点赞成功", + "data": null +} +``` + +### 4.3 分类管理 + +#### 4.3.1 获取分类列表 +- **URL**: `/categories` +- **方法**: GET +- **描述**: 获取分类列表 + +请求参数: +``` +status: 1 // 可选,1-启用,0-禁用 +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 5, + "list": [ + { + "id": 1, + "name": "学习交流", + "description": "讨论学习相关话题", + "icon": "icon-study", + "sort": 1, + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ] + } +} +``` + +#### 4.3.2 获取分类详情 +- **URL**: `/categories/{id}` +- **方法**: GET +- **描述**: 获取分类详情 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 1, + "name": "学习交流", + "description": "讨论学习相关话题", + "icon": "icon-study", + "sort": 1, + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } +} +``` + +#### 4.3.3 创建分类 +- **URL**: `/categories` +- **方法**: POST +- **描述**: 创建新分类(需要管理员权限) + +请求参数: +```json +{ + "name": "新分类", + "description": "新分类描述", + "icon": "icon-new", + "sort": 6, + "status": 1 +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "创建成功", + "data": { + "categoryId": 6 + } +} +``` + +#### 4.3.4 更新分类 +- **URL**: `/categories/{id}` +- **方法**: PUT +- **描述**: 更新分类(需要管理员权限) + +请求参数: +```json +{ + "name": "更新后的分类", + "description": "更新后的描述", + "icon": "icon-updated", + "sort": 7, + "status": 1 +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "更新成功", + "data": null +} +``` + +#### 4.3.5 删除分类 +- **URL**: `/categories/{id}` +- **方法**: DELETE +- **描述**: 删除分类(需要管理员权限) + +响应结果: +```json +{ + "code": 200, + "message": "删除成功", + "data": null +} +``` + +## 5. 学习资源共享模块 + +### 5.1 上传资源 +- **URL**: `/resources` +- **方法**: POST +- **描述**: 上传新资源 + +请求参数: +``` +file: [文件] +title: 资源标题 +description: 资源描述 +categoryId: 分类ID +``` + +响应结果: +```json +{ + "code": 200, + "message": "资源上传成功", + "data": { + "resourceId": 1 + } +} +``` + +### 5.2 获取资源详情 +- **URL**: `/resources/{id}` +- **方法**: GET +- **描述**: 获取资源详情 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 1, + "title": "资源标题", + "description": "资源描述", + "fileUrl": "uploads/resources/file.pdf", + "fileSize": 1024000, + "fileType": "application/pdf", + "userId": 12345, + "nickname": "上传者昵称", + "avatar": "https://example.com/avatar.jpg", + "categoryId": 1, + "categoryName": "学习资料", + "downloadCount": 10, + "likeCount": 5, + "isLiked": false, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } +} +``` + +### 5.3 获取资源列表 +- **URL**: `/resources` +- **方法**: GET +- **描述**: 获取资源列表,支持分页和筛选 + +请求参数: +``` +category: 1 // 可选,分类ID +user: 12345 // 可选,用户ID +keyword: "关键词" // 可选,搜索关键词 +page: 1 +size: 10 +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 100, + "list": [ + { + "id": 1, + "title": "资源标题", + "description": "资源描述", + "fileUrl": "uploads/resources/file.pdf", + "fileSize": 1024000, + "fileType": "application/pdf", + "userId": 12345, + "nickname": "上传者昵称", + "avatar": "https://example.com/avatar.jpg", + "categoryId": 1, + "categoryName": "学习资料", + "downloadCount": 10, + "likeCount": 5, + "isLiked": false, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ], + "pages": 10 + } +} +``` + +### 5.4 更新资源 +- **URL**: `/resources/{id}` +- **方法**: PUT +- **描述**: 更新资源信息 + +请求参数: +```json +{ + "title": "更新后的标题", + "description": "更新后的描述", + "categoryId": 2 +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "更新成功", + "data": null +} +``` + +### 5.5 删除资源 +- **URL**: `/resources/{id}` +- **方法**: DELETE +- **描述**: 删除资源 + +响应结果: +```json +{ + "code": 200, + "message": "删除成功", + "data": null +} +``` + +### 5.6 下载资源 +- **URL**: `/resources/{id}/download` +- **方法**: GET +- **描述**: 下载资源 + +响应结果: +```json +{ + "code": 200, + "message": "获取下载链接成功", + "data": { + "fileUrl": "uploads/resources/file.pdf", + "fileName": "资源标题", + "fileType": "application/pdf" + } +} +``` + +### 5.7 点赞/取消点赞资源 +- **URL**: `/resources/{id}/like` +- **方法**: POST +- **描述**: 点赞或取消点赞资源 + +响应结果: +```json +{ + "code": 200, + "message": "点赞成功", + "data": null +} +``` + +### 5.8 获取用户上传的资源列表 +- **URL**: `/resources/user/{userId}` +- **方法**: GET +- **描述**: 获取指定用户上传的资源列表 + +请求参数: +``` +page: 1 +size: 10 +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 20, + "list": [ + { + "id": 1, + "title": "资源标题", + "description": "资源描述", + "fileUrl": "uploads/resources/file.pdf", + "fileSize": 1024000, + "fileType": "application/pdf", + "userId": 12345, + "nickname": "上传者昵称", + "avatar": "https://example.com/avatar.jpg", + "categoryId": 1, + "categoryName": "学习资料", + "downloadCount": 10, + "likeCount": 5, + "isLiked": false, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ], + "pages": 2 + } +} +``` + +### 5.9 获取当前用户上传的资源列表 +- **URL**: `/resources/my` +- **方法**: GET +- **描述**: 获取当前登录用户上传的资源列表 + +请求参数: +``` +page: 1 +size: 10 +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 20, + "list": [ + { + "id": 1, + "title": "资源标题", + "description": "资源描述", + "fileUrl": "uploads/resources/file.pdf", + "fileSize": 1024000, + "fileType": "application/pdf", + "userId": 12345, + "nickname": "上传者昵称", + "avatar": "https://example.com/avatar.jpg", + "categoryId": 1, + "categoryName": "学习资料", + "downloadCount": 10, + "likeCount": 5, + "isLiked": false, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ], + "pages": 2 + } +} +``` + +## 6. 课程表与日程管理模块 + +### 6.1 课程管理 + +#### 6.1.1 创建课程 +- **URL**: `/courses` +- **方法**: POST +- **描述**: 创建新课程 + +请求参数: +```json +{ + "name": "数据结构", + "teacher": "张教授", + "location": "教学楼A-101", + "dayOfWeek": 1, + "startTime": "08:00:00", + "endTime": "09:40:00", + "startWeek": 1, + "endWeek": 16, + "color": "#4CAF50" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "创建课程成功", + "data": { + "courseId": 1 + } +} +``` + +#### 6.1.2 获取课程详情 +- **URL**: `/courses/{id}` +- **方法**: GET +- **描述**: 获取课程详情 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 1, + "userId": 12345, + "name": "数据结构", + "teacher": "张教授", + "location": "教学楼A-101", + "dayOfWeek": 1, + "startTime": "08:00:00", + "endTime": "09:40:00", + "startWeek": 1, + "endWeek": 16, + "color": "#4CAF50", + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } +} +``` + +#### 6.1.3 获取用户的所有课程 +- **URL**: `/courses` +- **方法**: GET +- **描述**: 获取当前用户的所有课程 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 5, + "list": [ + { + "id": 1, + "userId": 12345, + "name": "数据结构", + "teacher": "张教授", + "location": "教学楼A-101", + "dayOfWeek": 1, + "startTime": "08:00:00", + "endTime": "09:40:00", + "startWeek": 1, + "endWeek": 16, + "color": "#4CAF50", + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ] + } +} +``` + +#### 6.1.4 获取用户在指定星期几的课程 +- **URL**: `/courses/day/{dayOfWeek}` +- **方法**: GET +- **描述**: 获取当前用户在指定星期几的课程 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 3, + "list": [ + { + "id": 1, + "userId": 12345, + "name": "数据结构", + "teacher": "张教授", + "location": "教学楼A-101", + "dayOfWeek": 1, + "startTime": "08:00:00", + "endTime": "09:40:00", + "startWeek": 1, + "endWeek": 16, + "color": "#4CAF50", + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ] + } +} +``` + +#### 6.1.5 更新课程 +- **URL**: `/courses/{id}` +- **方法**: PUT +- **描述**: 更新课程 + +请求参数: +```json +{ + "name": "高级数据结构", + "teacher": "李教授", + "location": "教学楼B-202", + "dayOfWeek": 2, + "startTime": "10:00:00", + "endTime": "11:40:00", + "startWeek": 1, + "endWeek": 16, + "color": "#2196F3" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "更新课程成功", + "data": null +} +``` + +#### 6.1.6 删除课程 +- **URL**: `/courses/{id}` +- **方法**: DELETE +- **描述**: 删除课程 + +响应结果: +```json +{ + "code": 200, + "message": "删除课程成功", + "data": null +} +``` + +#### 6.1.7 检查课程时间冲突 +- **URL**: `/courses/check-conflict` +- **方法**: GET +- **描述**: 检查课程时间是否冲突 + +请求参数: +``` +dayOfWeek: 1 +startTime: "08:00:00" +endTime: "09:40:00" +excludeCourseId: 1 // 可选,排除的课程ID +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "hasConflict": false, + "conflictCount": 0 + } +} +``` + +### 6.2 日程管理 + +#### 6.2.1 创建日程 +- **URL**: `/schedules` +- **方法**: POST +- **描述**: 创建新日程 + +请求参数: +```json +{ + "title": "小组会议", + "description": "讨论项目进展", + "startTime": "2023-05-10T14:00:00", + "endTime": "2023-05-10T16:00:00", + "location": "图书馆讨论室", + "isAllDay": 0, + "reminder": 30, + "color": "#FF5722" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "创建日程成功", + "data": { + "scheduleId": 1 + } +} +``` + +#### 6.2.2 获取日程详情 +- **URL**: `/schedules/{id}` +- **方法**: GET +- **描述**: 获取日程详情 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 1, + "userId": 12345, + "title": "小组会议", + "description": "讨论项目进展", + "startTime": "2023-05-10T14:00:00", + "endTime": "2023-05-10T16:00:00", + "location": "图书馆讨论室", + "isAllDay": 0, + "reminder": 30, + "color": "#FF5722", + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } +} +``` + +#### 6.2.3 获取用户的所有日程 +- **URL**: `/schedules` +- **方法**: GET +- **描述**: 获取当前用户的所有日程 + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 5, + "list": [ + { + "id": 1, + "userId": 12345, + "title": "小组会议", + "description": "讨论项目进展", + "startTime": "2023-05-10T14:00:00", + "endTime": "2023-05-10T16:00:00", + "location": "图书馆讨论室", + "isAllDay": 0, + "reminder": 30, + "color": "#FF5722", + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ] + } +} +``` + +#### 6.2.4 获取用户在指定时间范围内的日程 +- **URL**: `/schedules/range` +- **方法**: GET +- **描述**: 获取当前用户在指定时间范围内的日程 + +请求参数: +``` +startTime: "2023-05-01T00:00:00" +endTime: "2023-05-31T23:59:59" +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "total": 3, + "list": [ + { + "id": 1, + "userId": 12345, + "title": "小组会议", + "description": "讨论项目进展", + "startTime": "2023-05-10T14:00:00", + "endTime": "2023-05-10T16:00:00", + "location": "图书馆讨论室", + "isAllDay": 0, + "reminder": 30, + "color": "#FF5722", + "status": 1, + "createdAt": "2023-05-01 12:00:00", + "updatedAt": "2023-05-01 12:00:00" + } + ] + } +} +``` + +#### 6.2.5 更新日程 +- **URL**: `/schedules/{id}` +- **方法**: PUT +- **描述**: 更新日程 + +请求参数: +```json +{ + "title": "项目讨论会", + "description": "讨论项目下一阶段计划", + "startTime": "2023-05-10T15:00:00", + "endTime": "2023-05-10T17:00:00", + "location": "线上会议", + "isAllDay": 0, + "reminder": 15, + "color": "#9C27B0" +} +``` + +响应结果: +```json +{ + "code": 200, + "message": "更新日程成功", + "data": null +} +``` + +#### 6.2.6 删除日程 +- **URL**: `/schedules/{id}` +- **方法**: DELETE +- **描述**: 删除日程 + +响应结果: +```json +{ + "code": 200, + "message": "删除日程成功", + "data": null +} +``` + +#### 6.2.7 检查日程时间冲突 +- **URL**: `/schedules/check-conflict` +- **方法**: GET +- **描述**: 检查日程时间是否冲突 + +请求参数: +``` +startTime: "2023-05-10T14:00:00" +endTime: "2023-05-10T16:00:00" +excludeScheduleId: 1 // 可选,排除的日程ID +``` + +响应结果: +```json +{ + "code": 200, + "message": "success", + "data": { + "hasConflict": false, + "conflictCount": 0 + } +} +``` + +#### 6.2.8 处理日程提醒 +- **URL**: `/schedules/process-reminders` +- **方法**: POST +- **描述**: 处理日程提醒(通常由系统定时任务调用) + +响应结果: +```json +{ + "code": 200, + "message": "处理日程提醒完成", + "data": { + "total": 5, + "success": 5 + } +} +``` + +## 7. 待实现模块 + +以下模块尚未实现,将在后续开发中完成: + +- 搜索功能模块 +- AI辅助学习模块 +- 积分系统模块 diff --git a/UniLife项目文档.md b/UniLife项目文档.md new file mode 100644 index 0000000..cafd7bd --- /dev/null +++ b/UniLife项目文档.md @@ -0,0 +1,516 @@ +# 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. 重构复杂代码 + - 提取公共方法 + - 优化代码结构 diff --git a/et --hard HEAD~1q b/et --hard HEAD~1q deleted file mode 100644 index e3159c6..0000000 --- a/et --hard HEAD~1q +++ /dev/null @@ -1,72 +0,0 @@ -3daacf2 (HEAD -> main) Revert -8b57c29 (origin/main, origin/HEAD, czq) Stop tracking -c79ff80 test -6a5cf75 更新 -78ef254 tmp -5f87197 分类管理,评论,资源,课程 -f4a8658 用户信息管理,帖子模块 -f632c54 用户信息管理,帖子模块 -ca6ab29 升级为springboot3,更新开发文档 -33c72dc 升级为springboot3,更新开发文档 -9863456 +logo -cec742a 软件体系结构 -9bbc131 原型图 -f208ba4 原型图 -b772fb5 添加Token -204dd28 原型图/个人设置 -5720af5 axios完成 -af73bbc 完成个人信息界面的表单验证 -a4e4fa5 pics -16cfbd5 Delete '图片素材/2a25599c42b1f75029ac3cf8ccf0d5d7.png' -e9d0c89 ADD file via upload -be57df6 Delete '图片素材/pics' -fd9c972 ADD file via upload -fff3563 Delete '图片素材/需求规格说明图' -91b33f3 Add 需求规格说明图 -91ac306 Delete '图片素材/3afd20c18a72d94f41e18259f2039100.png' -239eb5a ADD file via upload -2d43df1 ADD file via upload -c6fcbd2 Delete 'unilife软件需求规格说明书.docx' -5e1b17f ADD file via upload -3c2d331 文档 -a48e551 个人界面 -af1e136 Merge branch 'main' of https://bdgit.educoder.net/pizvue73f/unilife -8a61ff1 验收测试计划书 -9e7d617 开发文档更新 -d05eb50 用户信息管理接口 -1351060 个人信息展示界面布局完成 -561dbc6 Merge branch 'main' of https://bdgit.educoder.net/pizvue73f/unilife -a98ea9c 界面初步修改 -83f94ea 需求获取文档 -04509d7 完成侧边栏的切换功能,缺个人画原型图TAT -d6b42b2 添加了显示IP归属地的功能 -3adff4b 侧边栏初步实现 -3bde499 修改注册表单错误 -4908ad6 前端的/users/code改成post方法,传递json改成正确格式 -126c1e9 界面跳转 -f80b341 Merge branch 'main' of https://bdgit.educoder.net/pizvue73f/unilife -5e1494e 前端bug修改,表单可以正确显示 -4483fdf Merge remote-tracking branch 'origin/main' -155c336 jwt实现token -fb05160 错误信息提示完成 -f8cd2a1 发送邮箱验证码功能及邮箱密码登录功能 -98c9cd6 发送邮箱验证码功能初步实现 -5c148bb 后端加了一点成功的返回消息 -be45d15 axios连接完毕,但是没有相应的返回检查(即提示用户密码错误等等),错误信息提示依然有错,改不对了 -a106852 文档 -795c3dd 焦点访谈报告 -4b23ae9 任务项目书 -0b923dd Merge branch 'main' of https://bdgit.educoder.net/pizvue73f/unilife -f88eb51 完成axios交互,除了验证码注册和密码登录;错误信息显示依旧有bug -86da7d9 开发环境添加 -4ae6e4c 代码框架及用户注册接口 -283973c 后端init -68837be 完成登录和注册页面,其中登录界面可以选择密码和邮箱两种登录方式 -8fd6b41 图片素材 -94cb4de Merge branch 'main' of https://bdgit.educoder.net/pizvue73f/unilife -34df869 前端环境 -dc564e5 readme -e74e446 readme -8196f94 readme -c112817 README.md -d10ebd1 Initial commit diff --git a/文档说明.md b/文档说明.md new file mode 100644 index 0000000..3b3678d --- /dev/null +++ b/文档说明.md @@ -0,0 +1,73 @@ +# UniLife项目文档整理说明 + +## 文档整理目的 + +为了使项目文档更加清晰、精简和易于维护,我们对项目文档进行了整理和重组。整理的主要目的是: + +1. 消除文档之间的重复内容 +2. 提供更清晰的文档结构 +3. 使文档内容更加集中和专注 +4. 便于团队成员查找和使用文档 + +## 文档整理结果 + +### 保留的核心文档 + +以下是整理后保留在项目根目录的核心文档: + +1. **README.md** + - 项目简介 + - 功能特性概述 + - 团队成员信息 + +2. **UniLife项目文档.md** + - 项目概述(简介、技术栈、项目结构) + - 开发状态(已完成功能、待实现功能) + - 开发计划(各模块详细计划) + - 技术难点与解决方案 + - 数据库设计(各表结构) + - 开发规范(代码规范、提交规范、文档规范) + - 后续优化建议 + +3. **UniLife接口文档.md** + - API基础信息 + - 用户认证模块API + - 用户信息管理模块API + - 论坛功能模块API + - 学习资源共享模块API + - 待实现模块说明 + +4. **UniLife开发进度与计划.md** + - 当前开发进度(已完成功能、本次开发内容) + - 下一步开发计划(各模块详细任务) + - 开发阶段规划(四个阶段的任务和状态) + - 技术难点与解决方案 + - 后续优化建议 + +5. **前端开发计划.md** + - 项目概述 + - 当前开发状态 + - 前后端接口对接计划 + - 页面开发计划 + - 开发优先级 + + +## 文档使用建议 + +1. **新团队成员**:首先阅读README.md了解项目概况,然后阅读UniLife项目文档.md获取详细信息。 + +2. **前端开发人员**:重点关注UniLife接口文档.md和前端开发计划.md。 + +3. **后端开发人员**:重点关注UniLife项目文档.md中的数据库设计部分和UniLife接口文档-精简版.md。 + +4. **项目管理人员**:重点关注UniLife开发进度与计划.md,了解项目进度和计划。 + +## 文档维护规则 + +1. **文档更新**:当需要更新文档时,请直接修改对应的核心文档,而不是创建新的文档。 + +2. **版本控制**:所有文档更改应通过版本控制系统进行跟踪,并在更改时添加适当的注释。 + +3. **内容一致性**:确保不同文档之间的内容保持一致,避免信息冲突。 + +4. **定期审查**:每个迭代结束时,应对文档进行审查和更新,确保文档与当前项目状态一致。 \ No newline at end of file