2991692032 2 weeks ago
parent 5f8719721c
commit 78ef254a0c

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AugmentWebviewStateStore">
<option name="stateMap">
<map>
<entry key="CHAT_STATE" value="eyJjdXJyZW50Q29udmVyc2F0aW9uSWQiOiJjZmRkMmFjMy02YjgyLTQ5MWUtODc0YS1iOTU2MTM4NTJjODAiLCJjb252ZXJzYXRpb25zIjp7IjcxNjQ2OWJkLTU0MWUtNDZkYi1hODhlLTk2MDE1NDk4NDczYiI6eyJpZCI6IjcxNjQ2OWJkLTU0MWUtNDZkYi1hODhlLTk2MDE1NDk4NDczYiIsImNyZWF0ZWRBdElzbyI6IjIwMjUtMDUtMDVUMDQ6NTk6MTguNjg2WiIsImxhc3RJbnRlcmFjdGVkQXRJc28iOiIyMDI1LTA1LTA1VDA0OjU5OjE4LjY4NloiLCJjaGF0SGlzdG9yeSI6W10sImZlZWRiYWNrU3RhdGVzIjp7fSwidG9vbFVzZVN0YXRlcyI6e30sImRyYWZ0RXhjaGFuZ2UiOnsicmVxdWVzdF9tZXNzYWdlIjoiIiwicmljaF90ZXh0X2pzb25fcmVwciI6eyJ0eXBlIjoiZG9jIiwiY29udGVudCI6W3sidHlwZSI6InBhcmFncmFwaCJ9XX0sInN0YXR1cyI6ImRyYWZ0In0sInJlcXVlc3RJZHMiOltdLCJpc1Bpbm5lZCI6ZmFsc2UsImlzU2hhcmVhYmxlIjpmYWxzZSwiZXh0cmFEYXRhIjp7Imhhc0RpcnR5RWRpdHMiOmZhbHNlfSwicGVyc29uYVR5cGUiOjB9LCJjZmRkMmFjMy02YjgyLTQ5MWUtODc0YS1iOTU2MTM4NTJjODAiOnsiaWQiOiJjZmRkMmFjMy02YjgyLTQ5MWUtODc0YS1iOTU2MTM4NTJjODAiLCJjcmVhdGVkQXRJc28iOiIyMDI1LTA1LTA1VDA0OjU5OjE4Ljg0NloiLCJsYXN0SW50ZXJhY3RlZEF0SXNvIjoiMjAyNS0wNS0wNVQwNDo1OToxOC44NDZaIiwiY2hhdEhpc3RvcnkiOltdLCJmZWVkYmFja1N0YXRlcyI6e30sInRvb2xVc2VTdGF0ZXMiOnt9LCJkcmFmdEV4Y2hhbmdlIjp7InJlcXVlc3RfbWVzc2FnZSI6IiIsInJpY2hfdGV4dF9qc29uX3JlcHIiOnsidHlwZSI6ImRvYyIsImNvbnRlbnQiOlt7InR5cGUiOiJwYXJhZ3JhcGgifV19LCJzdGF0dXMiOiJkcmFmdCJ9LCJyZXF1ZXN0SWRzIjpbXSwiaXNQaW5uZWQiOmZhbHNlLCJpc1NoYXJlYWJsZSI6ZmFsc2UsImV4dHJhRGF0YSI6eyJoYXNEaXJ0eUVkaXRzIjpmYWxzZX0sInBlcnNvbmFUeXBlIjowfX0sImFnZW50RXhlY3V0aW9uTW9kZSI6Im1hbnVhbCIsImlzQWdlbnRFZGl0c0NvbGxhcHNlZCI6dHJ1ZSwic29ydENvbnZlcnNhdGlvbnNCeSI6Imxhc3RNZXNzYWdlVGltZXN0YW1wIn0=" />
</map>
</option>
</component>
</project>

@ -8,6 +8,7 @@
"name": "vue-unilife", "name": "vue-unilife",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@vue/shared": "^3.5.13", "@vue/shared": "^3.5.13",
"axios": "^1.8.3", "axios": "^1.8.3",
"element-plus": "^2.9.7", "element-plus": "^2.9.7",

@ -1,776 +0,0 @@
# UniLife开发文档更新版
[TOC]
## 一、项目概述
### 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
- 页面原型设计
#### 后端
- 基础环境搭建Spring Boot 3
- 数据库设计(用户表)
- 用户认证模块
- 用户注册
- 用户登录
- 邮箱验证码获取
- 邮箱验证码登录
- IP地址定位服务
### 2.2 待实现功能
#### 前端
- 所有页面的具体实现
- 状态管理
- 路由配置
- 表单验证
- 用户认证与授权
- 响应式设计
#### 后端
- 用户信息管理模块
- 获取用户信息
- 更新用户信息
- 修改密码
- 上传头像
- 论坛功能模块
- 帖子发布/编辑/删除
- 评论/回复
- 点赞/收藏
- 学习资源共享模块
- 资源上传/下载
- 资源分类/搜索
- 课程表与日程管理模块
- 课程导入/编辑
- 日程安排/提醒
- AI辅助学习模块
- 学习计划制定
- 智能提醒
- 搜索功能模块
- 全文搜索
- 分类搜索
- 积分系统模块
- 积分获取/消费
- 积分规则管理
## 三、API规范
### 3.1 基础信息
- **基础URL**: `http://localhost:8087`(本地测试)
- **接口格式**: RESTful API
- **数据格式**: JSON
- **字符编码**: UTF-8
- **认证方式**: JWT (JSON Web Token)
#### HTTP方法
- **GET**: 获取资源
- **POST**: 创建资源
- **PUT**: 更新资源(全量更新)
- **PATCH**: 部分更新资源
- **DELETE**: 删除资源
### 3.2 响应规范
#### 响应状态码
- **200**: 成功
- **400**: 请求参数错误
- **401**: 未授权
- **403**: 禁止访问
- **404**: 资源不存在
- **500**: 服务器内部错误
#### 响应格式
成功响应:
```json
{
"code": 200,
"message": "success",
"data": {
"key": "value"
}
}
```
注:
- code: 200表示成功
- data: 包含实际返回数据
错误响应:
```json
{
"code": 400,
"message": "参数错误",
"data": null
}
```
message字段包含错误信息
## 四、数据库设计
### 4.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 | 更新时间 |
### 4.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 | 更新时间 |
### 4.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 | 更新时间 |
### 4.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 | 更新时间 |
### 4.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 | 更新时间 |
### 4.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 | 更新时间 |
### 4.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 | 更新时间 |
## 五、API功能实现
### 5.1 用户认证模块
#### 5.1.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": "学生昵称"
}
}
```
#### 5.1.2 用户密码登录
- **URL**: `/users/login`
- **方法**: POST
- **描述**: 用户登录
请求参数:
```json
{
"username": "student123",
"password": "Secure@Password123"
}
```
username字段可以是用户名或邮箱
响应结果:
```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
}
}
}
```
#### 5.1.3 获取邮箱验证码
- **URL**: `/users/code`
- **方法**: POST
- **描述**: 向指定邮箱发送登录验证码
请求参数:
```json
{
"email": "student@school.edu"
}
```
响应结果:
```json
{
"code": 200,
"message": "验证码已发送",
"data": null
}
```
#### 5.1.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
}
}
}
```
### 5.2 用户信息管理模块(待实现)
#### 5.2.1 获取用户个人信息
- **URL**: `/users/profile`
- **方法**: 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
}
}
```
#### 5.2.2 更新用户个人信息
- **URL**: `/users/profile`
- **方法**: PUT
- **描述**: 更新当前登录用户的个人资料
请求参数:
```json
{
"nickname": "新昵称",
"bio": "这是更新后的个人简介",
"gender": 2
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
#### 5.2.3 修改用户密码
- **URL**: `/users/password`
- **方法**: PUT
- **描述**: 修改当前登录用户的密码
请求参数:
```json
{
"code": "验证码",
"newPassword": "新密码"
}
```
响应结果:
```json
{
"code": 200,
"message": "密码修改成功",
"data": null
}
```
#### 5.2.4 上传用户头像
- **URL**: `/users/avatar`
- **方法**: POST
- **描述**: 上传或更新用户头像
请求参数:
```
file: [图片文件]
```
响应结果:
```json
{
"code": 200,
"message": "头像上传成功",
"data": {
"avatar": "https://example.com/avatars/user_123456.jpg"
}
}
```
#### 5.2.5 更新用户邮箱
- **URL**: `/users/email`
- **方法**: PUT
- **描述**: 更新用户邮箱地址
请求参数:
```json
{
"email": "new_email@school.edu",
"code": "123456"
}
```
code字段为邮箱验证码
响应结果:
```json
{
"code": 200,
"message": "邮箱更新成功",
"data": null
}
```
### 5.3 论坛功能模块(待实现)
#### 5.3.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"
}
]
}
}
```
#### 5.3.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"
}
}
```
#### 5.3.3 发布帖子
- **URL**: `/posts`
- **方法**: POST
- **描述**: 发布新帖子
请求参数:
```json
{
"title": "帖子标题",
"content": "帖子内容...",
"categoryId": 1
}
```
响应结果:
```json
{
"code": 200,
"message": "发布成功",
"data": {
"postId": 1
}
}
```
#### 5.3.4 更新帖子
- **URL**: `/posts/{id}`
- **方法**: PUT
- **描述**: 更新帖子
请求参数:
```json
{
"title": "更新后的标题",
"content": "更新后的内容...",
"categoryId": 2
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
#### 5.3.5 删除帖子
- **URL**: `/posts/{id}`
- **方法**: DELETE
- **描述**: 删除帖子
响应结果:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
#### 5.3.6 获取评论列表
- **URL**: `/posts/{postId}/comments`
- **方法**: GET
- **描述**: 获取帖子的评论列表
请求参数:
```
page: 1
size: 20
```
响应结果:
```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"
}
]
}
]
}
}
```
#### 5.3.7 发表评论
- **URL**: `/comments`
- **方法**: POST
- **描述**: 发表评论或回复
请求参数:
```json
{
"postId": 1,
"content": "评论内容...",
"parentId": null
}
```
parentId字段用于回复某条评论回复时设置为父评论ID发表新评论时设为null
响应结果:
```json
{
"code": 200,
"message": "评论成功",
"data": {
"commentId": 3
}
}
```
#### 5.3.8 点赞/取消点赞
- **URL**: `/posts/{id}/like`
- **方法**: POST
- **描述**: 点赞

@ -1,408 +0,0 @@
[TOC]
## 一、API规范
### 1.1 基础信息
- **基础URL**: `http://localhost:8080`(本地测试)
- **接口格式**: RESTful API
- **数据格式**: JSON
- **字符编码**: UTF-8
- **认证方式**: JWT (JSON Web Token)
- **GET**: 获取资源
- **POST**: 创建资源
- **PUT**: 更新资源(全量更新)
- **PATCH**: 部分更新资源
- **DELETE**: 删除资源
### 1.2 响应规范
#### 响应状态码
- **200**: 成功
- **400**: 请求参数错误
- **401**: 未授权
- **403**: 禁止访问
- **404**: 资源不存在
- **500**: 服务器内部错误
#### 后端相应格式
成功响应:
```json
{
"code": 200, // 200表示成功
"message": "success",
"data": { // 实际返回数据
// ...
}
}
```
错误相应:
```json
{
"code": 400,
"message": "参数错误", // 错误信息
"data": null
}
```
## 二、 数据库设计
### 2.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 | 密码(加密存储 |
| | | | |
| 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 | 更新时间 |
#### 建表语句
```sql
CREATE TABLE `users` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
`username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
`email` VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱地址(学校邮箱)',
`password` VARCHAR(255) NOT NULL COMMENT '密码(加密存储)',
`nickname` VARCHAR(50) NOT NULL COMMENT '昵称',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
`bio` TEXT DEFAULT NULL COMMENT '个人简介',
`gender` TINYINT DEFAULT 0 COMMENT '性别0-未知, 1-男, 2-女)',
`student_id` VARCHAR(20) UNIQUE DEFAULT NULL COMMENT '学号',
`department` VARCHAR(100) DEFAULT NULL COMMENT '院系',
`major` VARCHAR(100) DEFAULT NULL COMMENT '专业',
`grade` VARCHAR(20) DEFAULT NULL COMMENT '年级',
`points` INT DEFAULT 0 COMMENT '积分',
`role` TINYINT DEFAULT 0 COMMENT '角色0-普通用户, 1-版主, 2-管理员)',
`status` TINYINT DEFAULT 1 COMMENT '状态0-禁用, 1-启用)',
`is_verified` TINYINT DEFAULT 0 COMMENT '是否验证0-未验证, 1-已验证)',
`login_ip` VARCHAR(50) DEFAULT NULL COMMENT '最近登录IP',
`login_time` DATETIME DEFAULT NULL COMMENT '最近登录时间',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX `idx_email` (`email`),
INDEX `idx_username` (`username`),
INDEX `idx_student_id` (`student_id`),
INDEX `idx_role` (`role`),
INDEX `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
```
## 三、Api功能实现
### 3.1用户认证模块
#### 3.1.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": "学生昵称"
}
}
```
#### 3.1.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
}
}
}
```
#### 3.1.3 获取邮箱验证码
- **URL**: `/users/code`
- **方法**: POST
- **描述**: 向指定邮箱发送登录验证码
请求参数
```json
{
"email": "student@school.edu"
}
```
响应结果:
```json
{
"code": 200,
"message": "验证码已发送",
"data": null
}
```
#### 3.1.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.2用户信息管理模块
#### 3.2.1获取用户个人信息
#### 请求信息
- **URL**: `/users/profile`
- **方法**: `GET`
- **描述**: 获取当前登录用户的个人资料信息
#### 响应结果
```json
Copy{
"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.2 更新用户个人信息
#### 请求信息
- **URL**: `/users/profile`
- **方法**: `PUT`
- **描述**: 更新当前登录用户的个人资料
#### 请求参数
```json
Copy{
"nickname": "新昵称",
"bio": "这是更新后的个人简介",
"gender": 2,
}
```
#### 响应结果
```json
Copy{
"code": 200,
"message": "更新成功",
"data": null
}
```
#### 3.2.3 修改用户密码
#### 请求信息
- **URL**: `/users/password`
- **方法**: `PUT`
- **描述**: 修改当前登录用户的密码
#### 请求参数
```json
Copy{
"code": "验证码",
"newPassword": "新密码",
}
```
#### 响应结果
```json
Copy{
"code": 200,
"message": "密码修改成功",
"data": null
}
```
#### 3.2.4 上传用户头像
#### 请求信息
- **URL**: `/users/avatar`
- **方法**: `POST`
- **描述**: 上传或更新用户头像
#### 请求参数
```
Copy
file: [图片文件]
```
#### 响应结果
```json
Copy{
"code": 200,
"message": "头像上传成功",
"data": {
"avatar": "https://example.com/avatars/user_123456.jpg"
}
}
```
### 2.5 更新用户邮箱
#### 请求信息
- **URL**: `/users/email`
- **方法**: `PUT`
- **描述**: 更新用户邮箱地址
#### 请求参数
```json
Copy{
"email": "new_email@school.edu",
"code": "123456" // 邮箱验证码
}
```
#### 响应结果
```json
Copy{
"code": 200,
"message": "邮箱更新成功",
"data": null
}
```

@ -1,200 +0,0 @@
# UniLife开发计划
## 一、项目概述
UniLife是一款面向学生的在线论坛致力于提升校园生活体验。项目采用前后端分离架构前端使用Vue 3 + TypeScript后端使用Spring Boot 3。
## 二、当前进度
### 已完成功能
- 基础环境搭建(前后端)
- 用户认证模块(注册、登录、验证码)
- 数据库设计(用户表)
- 页面原型设计
### 待开发功能
- 用户信息管理模块
- 论坛功能模块
- 学习资源共享模块
- 课程表与日程管理模块
- AI辅助学习模块
- 搜索功能模块
- 积分系统模块
## 三、开发计划
### 阶段一基础功能完善2周
#### 1. 用户信息管理模块
- **优先级**:高
- **负责人**:待定
- **任务**
- 完成用户个人信息获取API
- 完成用户个人信息更新API
- 完成用户密码修改API
- 完成用户头像上传API
- 完成用户邮箱更新API
- 实现前端个人主页页面
- 实现前端个人设置页面
#### 2. 论坛功能模块(基础部分)
- **优先级**:高
- **负责人**:待定
- **任务**
- 完成帖子表、评论表、分类表的数据库设计
- 完成帖子发布、获取、更新、删除API
- 完成评论发布、获取API
- 实现前端帖子列表页面
- 实现前端帖子详情页面
- 实现前端帖子发布/编辑页面
### 阶段二核心功能开发3周
#### 3. 论坛功能模块(高级部分)
- **优先级**:中
- **负责人**:待定
- **任务**
- 完成点赞、收藏功能API
- 完成帖子分类管理API
- 完成帖子热门排序算法
- 实现前端点赞、收藏功能
- 实现前端分类筛选功能
#### 4. 学习资源共享模块
- **优先级**:中
- **负责人**:待定
- **任务**
- 完成资源表的数据库设计
- 完成资源上传、下载、分类API
- 完成资源权限管理API
- 实现前端资源列表页面
- 实现前端资源详情页面
- 实现前端资源上传页面
#### 5. 课程表与日程管理模块
- **优先级**:中
- **负责人**:待定
- **任务**
- 完成课程表、日程表的数据库设计
- 完成课程导入、编辑API
- 完成日程安排、提醒API
- 实现前端课程表页面
- 实现前端日程管理页面
### 阶段三高级功能开发3周
#### 6. 搜索功能模块
- **优先级**:中
- **负责人**:待定
- **任务**
- 完成全文搜索功能API
- 完成分类搜索功能API
- 实现前端搜索结果页面
- 实现前端搜索建议功能
#### 7. 积分系统模块
- **优先级**:低
- **负责人**:待定
- **任务**
- 完成积分规则设计
- 完成积分获取、消费API
- 完成积分排行榜API
- 实现前端积分展示功能
- 实现前端积分排行榜页面
#### 8. AI辅助学习模块
- **优先级**:低
- **负责人**:待定
- **任务**
- 调研并选择合适的AI服务
- 完成学习计划制定API
- 完成智能提醒API
- 实现前端AI助手页面
### 阶段四优化与测试2周
#### 9. 性能优化
- **优先级**:中
- **负责人**:待定
- **任务**
- 前端性能优化(代码分割、懒加载等)
- 后端性能优化(缓存、索引等)
- 数据库性能优化
#### 10. 测试与修复
- **优先级**:高
- **负责人**:全体成员
- **任务**
- 单元测试
- 集成测试
- 用户界面测试
- Bug修复
## 四、模块分工建议
### 前端开发
1. **用户界面组件**:负责通用组件、布局、样式等
2. **用户认证与信息管理**:负责登录、注册、个人信息等页面
3. **论坛功能**:负责帖子列表、详情、发布等页面
4. **学习资源与课程表**:负责资源共享、课程表等页面
5. **AI与搜索功能**负责AI助手、搜索等页面
### 后端开发
1. **用户服务**负责用户认证、信息管理等API
2. **内容服务**负责帖子、评论、资源等API
3. **课程与日程服务**负责课程表、日程管理等API
4. **AI与搜索服务**负责AI助手、搜索等API
5. **系统服务**负责积分系统、通知等API
## 五、技术难点与解决方案
### 1. 用户认证与安全
- **难点**:确保用户数据安全,防止未授权访问
- **解决方案**使用JWT进行认证实现权限控制加密敏感数据
### 2. 文件上传与存储
- **难点**:处理大文件上传,确保存储安全
- **解决方案**:实现分片上传,使用对象存储服务,设置文件类型和大小限制
### 3. 实时通知
- **难点**:实现实时消息推送
- **解决方案**使用WebSocket或服务器发送事件(SSE)
### 4. 搜索功能
- **难点**:实现高效的全文搜索
- **解决方案**考虑使用Elasticsearch或MySQL全文索引
### 5. AI功能集成
- **难点**选择合适的AI服务并集成
- **解决方案**调研开源AI模型或使用第三方AI服务API
## 六、开发规范
### 代码规范
- 前端遵循ESLint配置使用Prettier格式化
- 后端遵循阿里巴巴Java开发手册
### 提交规范
- 使用语义化的提交信息
- 每个功能或修复在单独的分支上开发
- 提交前进行代码审查
### 文档规范
- API文档使用Swagger/Knife4j生成
- 重要功能编写设计文档
- 定期更新开发文档
## 七、项目管理
### 进度跟踪
- 每周进行一次进度汇报
- 使用GitHub Projects或Trello跟踪任务
### 会议安排
- 每周一次全体会议
- 需要时进行临时技术讨论
### 风险管理
- 定期评估项目风险
- 制定应急预案
- 保持良好的团队沟通
Loading…
Cancel
Save