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

2174 lines
48 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接口文档
## 更新日志
### v1.4.0 (2025-05-30)
- **重构AI助手流式响应**: 完全重构AI聊天功能实现真正的流式显示
- **优化接口参数格式**: AI聊天接口改用`application/x-www-form-urlencoded`格式,简化参数传递
- **改进前端实现**: 使用原生fetch API替代axios确保流式响应的稳定性
- **参考成功案例**: 基于已验证的流式响应实现模式进行重构
- **UI体验提升**: 保持美观界面的同时,实现真正的实时流式文字显示
- **响应格式优化**: 从Server-Sent Events改为直接文本流提高兼容性
### v1.3.0 (2025-01-27)
- **新增AI辅助学习模块**: 实现了完整的AI聊天助手功能
- **AI会话管理**: 支持创建、查询、更新、删除聊天会话
- **AI消息系统**: 支持发送消息、获取回复、查看历史记录
- **上下文感知**: AI可以根据会话历史提供连贯的对话体验
- **Markdown支持**: AI回复支持丰富的格式化内容
- **会话标题编辑**: 支持双击编辑或点击编辑按钮修改会话标题
- **数据库设计**: 新增ai_chat_sessions和ai_chat_messages表
- **多会话支持**: 用户可以同时进行多个独立的AI对话会话
### v1.2.0 (2025-01-27)
- **修复资源点赞功能**: 实现了完整的资源点赞表 (`resource_likes`),防止重复点赞
- **优化响应数据结构**: 统一时间格式为ISO 8601格式 (`yyyy-MM-ddTHH:mm:ss`)
- **完善isLiked字段**: 资源列表和详情接口中的 `isLiked` 字段现在基于当前用户的真实点赞状态
- **增强文件存储**: 文件存储从本地上传改为阿里云OSS支持临时访问链接
- **添加数据库设计说明**: 详细说明了资源表和点赞表的设计
- **修正API参数说明**: 更新了资源列表接口中 `user` 参数的含义,改为 `uploaderUserId`
- **优化课程表时间安排**: 学期格式统一为"2024-2025第一学期"格式课程时间安排调整为13个标准时间段
### v1.1.0 (2025-01-26)
- 完成论坛功能模块的前后端集成
- 实现帖子、评论、点赞等核心功能
- 添加用户认证和权限管理
### v1.0.0 (2025-01-25)
- 初始版本发布
- 实现基础的用户认证功能
- 定义核心数据结构和API接口
## 目录
- [1. 基础信息](#1-基础信息)
- [2. 用户认证模块](#2-用户认证模块)
- [3. 用户信息管理模块](#3-用户信息管理模块)
- [4. 论坛功能模块](#4-论坛功能模块)
- [4.1 帖子管理](#41-帖子管理)
- [4.2 评论管理](#42-评论管理)
- [4.3 分类管理](#43-分类管理)
- [5. 学习资源共享模块](#5-学习资源共享模块)
- [6. 课程表与日程管理模块](#6-课程表与日程管理模块)
- [7. AI辅助学习模块](#7-AI辅助学习模块)
- [8. 管理员权限管理模块](#8-管理员权限管理模块)
- [9. 待实现模块](#9-待实现模块)
## 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级",
"code": "123456"
}
```
响应结果:
```json
{
"code": 200,
"message": "注册成功",
"data": {
"userId": 12345,
"username": "student123",
"nickname": "学生昵称"
}
}
```
### 2.2 用户密码登录
- **URL**: `/users/login`
- **方法**: POST
- **描述**: 用户登录
请求参数:
```json
{
"email": "student@school.edu",
"password": "Secure@Password123"
}
```
响应结果:
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"id": 12345,
"username": "student123",
"nickname": "学生昵称",
"avatar": "https://example.com/avatar.jpg",
"role": 0
}
}
```
### 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...",
"id": 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
- **描述**: 更新当前登录用户的个人资料信息
- **认证**: 需要JWT Token
请求参数:
```json
{
"username": "newusername",
"bio": "这是一个更新的个人简介",
"gender": 1,
"department": "计算机学院",
"major": "软件工程",
"grade": "2023级"
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
### 3.3 修改用户密码
- **URL**: `/users/password`
- **方法**: PUT
- **描述**: 修改当前登录用户的密码
- **认证**: 需要JWT Token
请求参数:
```json
{
"code": "123456",
"newPassword": "NewSecure@Password123"
}
```
响应结果:
```json
{
"code": 200,
"message": "密码修改成功",
"data": null
}
```
### 3.4 上传用户头像
- **URL**: `/users/avatar`
- **方法**: POST
- **描述**: 上传用户头像
- **认证**: 需要JWT Token
请求参数:
- **Content-Type**: `multipart/form-data`
- **file**: 头像文件(图片格式)
响应结果:
```json
{
"code": 200,
"message": "头像上传成功",
"data": {
"avatarUrl": "https://example.com/avatars/user_12345.jpg"
}
}
```
### 3.5 更新用户邮箱
- **URL**: `/users/email`
- **方法**: PUT
- **描述**: 更新当前登录用户的邮箱
- **认证**: 需要JWT Token
请求参数:
```json
{
"email": "newemail@school.edu",
"code": "123456"
}
```
响应结果:
```json
{
"code": 200,
"message": "邮箱更新成功",
"data": null
}
```
### 3.6 获取用户统计数据
- **URL**: `/users/stats`
- **方法**: GET
- **描述**: 获取当前用户的统计数据
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"postsCount": 25,
"commentsCount": 150,
"resourcesCount": 10,
"likesReceived": 300,
"coursesCount": 8,
"schedulesCount": 15
}
}
```
### 3.7 获取用户最近帖子
- **URL**: `/users/recent-posts`
- **方法**: GET
- **描述**: 获取当前用户最近发布的帖子
- **认证**: 需要JWT Token
请求参数:
- **limit** (query, 可选): 返回的帖子数量默认为5
响应结果:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 123,
"title": "最新帖子标题",
"content": "帖子内容摘要...",
"categoryId": 1,
"createdAt": "2023-05-01T12:00:00",
"viewsCount": 50,
"likesCount": 10,
"commentsCount": 5
}
]
}
```
## 4. 论坛功能模块
### 4.1 帖子管理
#### 4.1.1 获取帖子列表
- **URL**: `/posts`
- **方法**: GET
- **描述**: 获取帖子列表,支持分页和筛选
请求参数:
- **categoryId** (query, 可选): 分类ID
- **keyword** (query, 可选): 搜索关键词
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
- **sort** (query, 可选): 排序方式默认为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-01T12: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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
}
```
#### 4.1.3 发布帖子
- **URL**: `/posts`
- **方法**: POST
- **描述**: 发布新帖子
- **认证**: 需要JWT Token
请求参数:
```json
{
"title": "帖子标题",
"content": "帖子内容...",
"categoryId": 1
}
```
响应结果:
```json
{
"code": 200,
"message": "发布成功",
"data": {
"postId": 1
}
}
```
#### 4.1.4 更新帖子
- **URL**: `/posts/{id}`
- **方法**: PUT
- **描述**: 更新帖子
- **认证**: 需要JWT Token
请求参数:
```json
{
"title": "更新后的标题",
"content": "更新后的内容...",
"categoryId": 2
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
#### 4.1.5 删除帖子
- **URL**: `/posts/{id}`
- **方法**: DELETE
- **描述**: 删除帖子
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
#### 4.1.6 点赞/取消点赞帖子
- **URL**: `/posts/{id}/like`
- **方法**: POST
- **描述**: 点赞或取消点赞帖子
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "点赞成功",
"data": null
}
```
#### 4.1.7 获取用户的帖子列表
- **URL**: `/posts/user/{userId}`
- **方法**: GET
- **描述**: 获取指定用户发布的帖子列表
请求参数:
- **userId** (path): 用户ID
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
- **sort** (query, 可选): 排序方式默认为latest
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"total": 25,
"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-01T12:00:00"
}
],
"pages": 3
}
}
```
### 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-01T12:30:00",
"replies": [
{
"id": 2,
"content": "回复内容...",
"userId": 54321,
"nickname": "回复者昵称",
"avatar": "https://example.com/avatar2.jpg",
"likeCount": 2,
"isLiked": true,
"createdAt": "2023-05-01T12:35:00"
}
]
}
]
}
}
```
#### 4.2.2 发表评论
- **URL**: `/comments`
- **方法**: POST
- **描述**: 发表评论或回复
- **认证**: 需要JWT Token
请求参数:
```json
{
"postId": 1,
"content": "评论内容...",
"parentId": null
}
```
响应结果:
```json
{
"code": 200,
"message": "评论成功",
"data": {
"commentId": 3
}
}
```
#### 4.2.3 删除评论
- **URL**: `/comments/{id}`
- **方法**: DELETE
- **描述**: 删除评论
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
#### 4.2.4 点赞/取消点赞评论
- **URL**: `/comments/{id}/like`
- **方法**: POST
- **描述**: 点赞或取消点赞评论
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "点赞成功",
"data": null
}
```
### 4.3 分类管理
#### 4.3.1 获取分类列表
- **URL**: `/categories`
- **方法**: GET
- **描述**: 获取分类列表
请求参数:
- **status** (query, 可选): 分类状态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-01T12:00:00",
"updatedAt": "2023-05-01T12: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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
}
```
#### 4.3.3 创建分类
- **URL**: `/categories`
- **方法**: POST
- **描述**: 创建新分类(需要管理员权限)
- **认证**: 需要JWT Token
请求参数:
```json
{
"name": "新分类",
"description": "新分类描述",
"icon": "icon-new",
"sort": 6,
"status": 1
}
```
响应结果:
```json
{
"code": 200,
"message": "创建成功",
"data": {
"categoryId": 6
}
}
```
#### 4.3.4 更新分类
- **URL**: `/categories/{id}`
- **方法**: PUT
- **描述**: 更新分类(需要管理员权限)
- **认证**: 需要JWT Token
请求参数:
```json
{
"name": "更新后的分类",
"description": "更新后的描述",
"icon": "icon-updated",
"sort": 7,
"status": 1
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
#### 4.3.5 删除分类
- **URL**: `/categories/{id}`
- **方法**: DELETE
- **描述**: 删除分类(需要管理员权限)
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
## 5. 学习资源共享模块
### 5.1 上传资源
- **URL**: `/resources`
- **方法**: POST
- **描述**: 上传新资源
- **认证**: 需要JWT Token
请求参数:
- **Content-Type**: `multipart/form-data`
- **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": "https://oss-example.aliyuncs.com/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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
}
```
**说明**:
- `isLiked` 字段表示当前登录用户是否已点赞该资源未登录用户该字段为false
- `fileUrl` 为阿里云OSS存储的文件访问URL
### 5.3 获取资源列表
- **URL**: `/resources`
- **方法**: GET
- **描述**: 获取资源列表,支持分页和筛选
请求参数:
- **category** (query, 可选): 分类ID
- **user** (query, 可选): 上传者用户ID用于筛选特定用户上传的资源
- **keyword** (query, 可选): 搜索关键词
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"total": 100,
"list": [
{
"id": 1,
"title": "资源标题",
"description": "资源描述",
"fileUrl": "https://oss-example.aliyuncs.com/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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
],
"pages": 10
}
}
```
**说明**:
- `isLiked` 字段基于当前登录用户的点赞状态,通过查询`resource_likes`表获得
- 未登录用户获取列表时,所有资源的`isLiked`字段均为false
### 5.4 更新资源
- **URL**: `/resources/{id}`
- **方法**: PUT
- **描述**: 更新资源信息
- **认证**: 需要JWT Token
请求参数:
```json
{
"title": "更新后的标题",
"description": "更新后的描述",
"categoryId": 2
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
### 5.5 删除资源
- **URL**: `/resources/{id}`
- **方法**: DELETE
- **描述**: 删除资源
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
**说明**: 删除资源时会同时删除阿里云OSS中的文件和数据库中的相关记录包括点赞记录
### 5.6 下载资源
- **URL**: `/resources/{id}/download`
- **方法**: GET
- **描述**: 下载资源
响应结果:
```json
{
"code": 200,
"message": "获取下载链接成功",
"data": {
"fileUrl": "https://oss-example.aliyuncs.com/resources/file.pdf?Expires=1684737600&OSSAccessKeyId=xxx&Signature=xxx",
"fileName": "资源标题.pdf",
"fileType": "application/pdf"
}
}
```
**说明**:
- `fileUrl` 为生成的临时访问URL有效期为1小时
- 每次下载会增加资源的下载计数
### 5.7 点赞/取消点赞资源
- **URL**: `/resources/{id}/like`
- **方法**: POST
- **描述**: 点赞或取消点赞资源
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "点赞成功",
"data": null
}
```
```json
{
"code": 200,
"message": "取消点赞成功",
"data": null
}
```
**实现说明**:
- 使用`resource_likes`表记录用户点赞状态,确保一个用户对同一资源只能点赞一次
- 点赞时会增加资源的`like_count`字段,取消点赞时会减少
- 通过唯一键约束防止重复点赞:`UNIQUE KEY uk_user_resource (user_id, resource_id)`
### 5.8 获取用户上传的资源列表
- **URL**: `/resources/user/{userId}`
- **方法**: GET
- **描述**: 获取指定用户上传的资源列表
请求参数:
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"total": 20,
"list": [
{
"id": 1,
"title": "资源标题",
"description": "资源描述",
"fileUrl": "https://oss-example.aliyuncs.com/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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
],
"pages": 2
}
}
```
### 5.9 获取当前用户上传的资源列表
- **URL**: `/resources/my`
- **方法**: GET
- **描述**: 获取当前登录用户上传的资源列表
- **认证**: 需要JWT Token
请求参数:
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"total": 20,
"list": [
{
"id": 1,
"title": "资源标题",
"description": "资源描述",
"fileUrl": "https://oss-example.aliyuncs.com/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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
],
"pages": 2
}
}
```
### 5.10 数据库设计说明
#### 资源表 (resources)
```sql
CREATE TABLE `resources` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '资源ID',
`user_id` BIGINT NOT NULL COMMENT '上传用户ID',
`title` VARCHAR(100) NOT NULL COMMENT '资源标题',
`description` TEXT DEFAULT NULL COMMENT '资源描述',
`file_url` VARCHAR(255) NOT NULL COMMENT '文件URL(OSS)',
`file_size` BIGINT NOT NULL COMMENT '文件大小(字节)',
`file_type` VARCHAR(50) NOT NULL COMMENT '文件类型',
`category_id` BIGINT NOT NULL COMMENT '分类ID',
`download_count` INT DEFAULT 0 COMMENT '下载次数',
`like_count` INT DEFAULT 0 COMMENT '点赞次数',
`status` TINYINT DEFAULT 1 COMMENT '状态0-删除, 1-正常)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
```
#### 资源点赞表 (resource_likes)
```sql
CREATE TABLE `resource_likes` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '点赞ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`resource_id` BIGINT NOT NULL COMMENT '资源ID',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY `uk_user_resource` (`user_id`, `resource_id`),
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`resource_id`) REFERENCES `resources` (`id`) ON DELETE CASCADE
);
```
**特性**:
- 通过唯一键约束确保用户不能重复点赞同一资源
- 级联删除保证数据一致性
## 6. 课程表与日程管理模块
### 6.1 课程管理
#### 6.1.1 创建课程
- **URL**: `/courses`
- **方法**: POST
- **描述**: 创建新课程
- **认证**: 需要JWT Token
请求参数:
```json
{
"name": "数据结构",
"teacher": "张教授",
"location": "教学楼A-101",
"dayOfWeek": 1,
"startTime": "08:00:00",
"endTime": "08:50:00",
"startWeek": 1,
"endWeek": 16,
"semester": "2024-2025-1",
"color": "#4CAF50"
}
```
**参数说明**:
- `dayOfWeek`: 星期几1-71表示周一7表示周日
- `startTime`/`endTime`: 课程时间支持13个标准时间段
- 第1节课: 08:00-08:50
- 第2节课: 08:50-09:40
- 第3节课: 09:50-10:40
- 第4节课: 10:40-11:30
- 第5节课: 11:30-12:20
- 第6节课: 14:05-14:55
- 第7节课: 14:55-15:45
- 第8节课: 15:45-16:35
- 第9节课: 16:40-17:30
- 第10节课: 17:30-18:20
- 第11节课: 18:30-19:20
- 第12节课: 19:20-20:10
- 第13节课: 20:10-21:00
- `semester`: 学期格式为"YYYY-YYYY-X"(如:"2024-2025-1"表示2024-2025学年第一学期
响应结果:
```json
{
"code": 200,
"message": "创建课程成功",
"data": {
"courseId": 1
}
}
```
#### 6.1.2 获取课程详情
- **URL**: `/courses/{id}`
- **方法**: GET
- **描述**: 获取课程详情
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"id": 1,
"userId": 12345,
"name": "数据结构",
"teacher": "张教授",
"location": "教学楼A-101",
"dayOfWeek": 1,
"startTime": "08:00:00",
"endTime": "08:50:00",
"startWeek": 1,
"endWeek": 16,
"semester": "2024-2025-1",
"color": "#4CAF50",
"status": 1,
"createdAt": "2023-05-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
}
```
#### 6.1.3 获取用户的所有课程
- **URL**: `/courses`
- **方法**: GET
- **描述**: 获取当前用户的所有课程
- **认证**: 需要JWT Token
响应结果:
```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": "08:50:00",
"startWeek": 1,
"endWeek": 16,
"semester": "2024-2025-1",
"color": "#4CAF50",
"status": 1,
"createdAt": "2023-05-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
]
}
}
```
#### 6.1.4 获取用户在指定星期几的课程
- **URL**: `/courses/day/{dayOfWeek}`
- **方法**: GET
- **描述**: 获取当前用户在指定星期几的课程
- **认证**: 需要JWT Token
响应结果:
```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": "08:50:00",
"startWeek": 1,
"endWeek": 16,
"semester": "2024-2025-1",
"color": "#4CAF50",
"status": 1,
"createdAt": "2023-05-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
]
}
}
```
#### 6.1.5 获取用户在指定学期的课程
- **URL**: `/courses/semester/{semester}`
- **方法**: GET
- **描述**: 获取当前用户在指定学期的课程
- **认证**: 需要JWT Token
**参数说明**: `semester`路径参数示例:"2024-2025-1"
响应结果:
```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": "08:50:00",
"startWeek": 1,
"endWeek": 16,
"semester": "2024-2025-1",
"color": "#4CAF50",
"status": 1,
"createdAt": "2023-05-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
]
}
}
```
#### 6.1.6 更新课程
- **URL**: `/courses/{id}`
- **方法**: PUT
- **描述**: 更新课程
- **认证**: 需要JWT Token
请求参数:
```json
{
"name": "高级数据结构",
"teacher": "李教授",
"location": "教学楼B-202",
"dayOfWeek": 2,
"startTime": "09:50:00",
"endTime": "10:40:00",
"startWeek": 1,
"endWeek": 16,
"semester": "2024-2025-1",
"color": "#2196F3"
}
```
响应结果:
```json
{
"code": 200,
"message": "更新课程成功",
"data": null
}
```
#### 6.1.7 删除课程
- **URL**: `/courses/{id}`
- **方法**: DELETE
- **描述**: 删除课程
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除课程成功",
"data": null
}
```
#### 6.1.8 检查课程时间冲突
- **URL**: `/courses/check-conflict`
- **方法**: GET
- **描述**: 检查课程时间是否冲突
- **认证**: 需要JWT Token
请求参数:
- **dayOfWeek** (query): 星期几1-7
- **startTime** (query): 开始时间,格式:"HH:mm:ss"
- **endTime** (query): 结束时间,格式:"HH:mm:ss"
- **excludeCourseId** (query, 可选): 排除的课程ID
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"hasConflict": false,
"conflictCount": 0
}
}
```
### 6.2 日程管理
#### 6.2.1 创建日程
- **URL**: `/schedules`
- **方法**: POST
- **描述**: 创建新日程
- **认证**: 需要JWT Token
请求参数:
```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
- **描述**: 获取日程详情
- **认证**: 需要JWT Token
响应结果:
```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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
}
```
#### 6.2.3 获取用户的所有日程
- **URL**: `/schedules`
- **方法**: GET
- **描述**: 获取当前用户的所有日程
- **认证**: 需要JWT Token
响应结果:
```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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
]
}
}
```
#### 6.2.4 获取用户在指定时间范围内的日程
- **URL**: `/schedules/range`
- **方法**: GET
- **描述**: 获取当前用户在指定时间范围内的日程
- **认证**: 需要JWT Token
请求参数:
- **startTime** (query): 开始时间,格式:"yyyy-MM-ddTHH:mm:ss"
- **endTime** (query): 结束时间,格式:"yyyy-MM-ddTHH:mm:ss"
响应结果:
```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-01T12:00:00",
"updatedAt": "2023-05-01T12:00:00"
}
]
}
}
```
#### 6.2.5 更新日程
- **URL**: `/schedules/{id}`
- **方法**: PUT
- **描述**: 更新日程
- **认证**: 需要JWT Token
请求参数:
```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
- **描述**: 删除日程
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除日程成功",
"data": null
}
```
#### 6.2.7 检查日程时间冲突
- **URL**: `/schedules/check-conflict`
- **方法**: GET
- **描述**: 检查日程时间是否冲突
- **认证**: 需要JWT Token
请求参数:
- **startTime** (query): 开始时间,格式:"yyyy-MM-ddTHH:mm:ss"
- **endTime** (query): 结束时间,格式:"yyyy-MM-ddTHH:mm:ss"
- **excludeScheduleId** (query, 可选): 排除的日程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
}
}
```
### 6.3 数据库设计说明
#### 课程表 (courses)
```sql
CREATE TABLE `courses` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '课程ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`name` VARCHAR(100) NOT NULL COMMENT '课程名称',
`teacher` VARCHAR(50) DEFAULT NULL COMMENT '教师姓名',
`location` VARCHAR(100) DEFAULT NULL COMMENT '上课地点',
`day_of_week` TINYINT NOT NULL COMMENT '星期几1-7',
`start_time` TIME NOT NULL COMMENT '开始时间',
`end_time` TIME NOT NULL COMMENT '结束时间',
`start_week` TINYINT NOT NULL COMMENT '开始周次',
`end_week` TINYINT NOT NULL COMMENT '结束周次',
`semester` VARCHAR(20) DEFAULT NULL COMMENT '学期2024-2025-1',
`color` VARCHAR(20) DEFAULT NULL COMMENT '显示颜色',
`status` TINYINT DEFAULT 1 COMMENT '状态0-删除, 1-正常)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
```
#### 日程表 (schedules)
```sql
CREATE TABLE `schedules` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '日程ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`title` VARCHAR(100) NOT NULL COMMENT '日程标题',
`description` TEXT DEFAULT NULL COMMENT '日程描述',
`start_time` DATETIME NOT NULL COMMENT '开始时间',
`end_time` DATETIME NOT NULL COMMENT '结束时间',
`location` VARCHAR(100) DEFAULT NULL COMMENT '地点',
`is_all_day` TINYINT DEFAULT 0 COMMENT '是否全天0-否, 1-是)',
`reminder` TINYINT DEFAULT NULL COMMENT '提醒时间(分钟)',
`color` VARCHAR(20) DEFAULT NULL COMMENT '显示颜色',
`status` TINYINT DEFAULT 1 COMMENT '状态0-删除, 1-正常)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
```
**特性**:
- 支持学期管理和多学期课程数据
- 支持13个标准课程时间段的时间安排
- 支持时间冲突检测
- 支持课程和日程的颜色标记
- 支持日程提醒功能
- 学期格式统一为"YYYY-YYYY-X"格式
**课程时间安排说明**:
系统支持13个标准课程时间段
- 第1节课: 08:00-08:50
- 第2节课: 08:50-09:40
- 第3节课: 09:50-10:40
- 第4节课: 10:40-11:30
- 第5节课: 11:30-12:20
- 第6节课: 14:05-14:55
- 第7节课: 14:55-15:45
- 第8节课: 15:45-16:35
- 第9节课: 16:40-17:30
- 第10节课: 17:30-18:20
- 第11节课: 18:30-19:20
- 第12节课: 19:20-20:10
- 第13节课: 20:10-21:00
## 7. AI辅助学习模块
### 7.1 核心接口
#### 7.1.1 发送消息给AI流式响应
- **URL**: `/ai/chat`
- **方法**: POST
- **描述**: 向AI发送消息并获取流式回复
- **认证**: 需要JWT Token
- **Content-Type**: `application/x-www-form-urlencoded`
- **响应类型**: `text/html;charset=UTF-8`(流式文本响应)
请求参数Form Data格式
```
prompt=如何学好Python编程
sessionId=session_1234567890
```
**参数说明**:
- `prompt`: 用户发送的消息内容(必填)
- `sessionId`: 会话ID如果不提供则由后端创建新会话可选
**流式响应**:
接口返回原始文本流AI的回复内容会逐字符或逐词流式返回
```
学好Python编程需要循序渐进地学习首先掌握基础语法然后通过实际项目练习...
```
#### 7.1.2 获取聊天会话列表
- **URL**: `/ai/sessions`
- **方法**: GET
- **描述**: 获取当前用户的聊天会话列表
- **认证**: 需要JWT Token
请求参数:
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为20
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"sessions": [
{
"id": "session_1234567890",
"title": "Python学习咨询",
"createdAt": "2025-01-27T10:00:00",
"updatedAt": "2025-01-27T15:30:00",
"lastMessageTime": "2025-01-27T15:30:00",
"messageCount": 8
}
],
"total": 5
}
}
```
#### 7.1.3 获取会话消息历史
- **URL**: `/ai/sessions/{sessionId}/messages`
- **方法**: GET
- **描述**: 获取指定会话的消息历史
- **认证**: 需要JWT Token
请求参数:
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为50
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"messages": [
{
"id": "msg_001",
"role": "user",
"content": "如何学好Python编程",
"timestamp": "2025-01-27T10:00:00"
},
{
"id": "msg_002",
"role": "assistant",
"content": "学好Python编程需要循序渐进...",
"timestamp": "2025-01-27T10:00:30"
}
],
"total": 8,
"sessionInfo": {
"id": "session_1234567890",
"title": "Python学习咨询",
"createdAt": "2025-01-27T10:00:00",
"updatedAt": "2025-01-27T15:30:00",
"lastMessageTime": "2025-01-27T15:30:00",
"messageCount": 8
}
}
}
```
#### 7.1.4 创建聊天会话
- **URL**: `/ai/sessions`
- **方法**: POST
- **描述**: 创建新的AI聊天会话sessionId由前端生成
- **认证**: 需要JWT Token
请求参数:
```json
{
"sessionId": "session_1706177600_abc123",
"title": "新对话"
}
```
**参数说明**:
- `sessionId`: 会话ID由前端生成格式session_<timestamp>_<random>
- `title` (可选): 会话标题,默认为"新对话"
响应结果:
```json
{
"code": 200,
"message": "创建会话成功",
"data": {
"sessionId": "session_1706177600_abc123",
"title": "新对话"
}
}
```
#### 7.1.5 更新会话标题
- **URL**: `/ai/sessions/{sessionId}`
- **方法**: PUT
- **描述**: 更新会话标题
- **认证**: 需要JWT Token
请求参数:
```json
{
"title": "更新后的标题"
}
```
响应结果:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
#### 7.1.6 清空会话消息
- **URL**: `/ai/sessions/{sessionId}/messages`
- **方法**: DELETE
- **描述**: 清空指定会话的所有消息(保留会话)
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "清空成功",
"data": null
}
```
#### 7.1.7 删除会话
- **URL**: `/ai/sessions/{sessionId}`
- **方法**: DELETE
- **描述**: 删除指定会话及其所有消息
- **认证**: 需要JWT Token
响应结果:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
### 7.2 数据库设计说明
#### AI聊天会话表 (ai_chat_sessions)
```sql
CREATE TABLE `ai_chat_sessions` (
`id` VARCHAR(64) PRIMARY KEY COMMENT '会话ID前端生成',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`title` VARCHAR(100) NOT NULL DEFAULT '新对话' COMMENT '会话标题',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX `idx_user_id` (`user_id`),
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
);
```
#### AI聊天消息表 (ai_chat_messages)
```sql
CREATE TABLE `ai_chat_messages` (
`id` VARCHAR(64) PRIMARY KEY COMMENT '消息ID前端生成',
`session_id` VARCHAR(64) NOT NULL COMMENT '会话ID',
`role` ENUM('user', 'assistant', 'system') NOT NULL COMMENT '角色',
`content` TEXT NOT NULL COMMENT '消息内容',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX `idx_session_id` (`session_id`),
FOREIGN KEY (`session_id`) REFERENCES `ai_chat_sessions` (`id`) ON DELETE CASCADE
);
```
### 7.3 流式响应特性说明
**核心特性**:
- 支持多会话管理,每个用户可以有多个独立的对话会话
- 消息按时间顺序存储,支持完整的对话历史记录
- 级联删除保证数据一致性
- 支持用户、助手和系统三种角色的消息
- 会话ID和消息ID由前端生成确保前端能够立即使用
- ID格式session_<timestamp>_<random> 和 msg_<timestamp>_<random>
- **流式响应**: 使用Server-Sent Events实现实时的AI回复流式传输
**前端流式处理示例**:
```typescript
import { sendMessage } from '@/api/ai'
// 使用流式API
await sendMessage({
message: '你好',
sessionId: 'session_123',
conversationHistory: []
}, (chunk: string) => {
// 处理每个数据块
currentMessage.content += chunk
// 实时更新UI
updateMessageDisplay()
})
```
**后端流式实现**:
```java
@RestController
@RequestMapping("/ai")
public class AiController {
private final AiService aiService;
@Operation(summary = "发送消息给AI")
@RequestMapping(value = "/chat", produces = "text/html;charset=UTF-8")
public Flux<String> sendMessage(
@RequestParam("prompt") String prompt,
@RequestParam(value = "sessionId", required = false) String sessionId) {
log.info("发送消息给AI: {}", prompt);
AiSendMessageDTO sendMessageDTO = new AiSendMessageDTO();
sendMessageDTO.setMessage(prompt);
sendMessageDTO.setSessionId(sessionId);
return aiService.sendMessage(sendMessageDTO);
}
}
```
**Service层实现**:
```java
@Service
public class AiServiceImpl implements AiService {
@Autowired
private ChatClient chatClient;
@Override
public Flux<String> sendMessage(AiSendMessageDTO sendMessageDTO) {
log.info("发送消息给AI: {}", sendMessageDTO.getMessage());
// 使用Spring AI ChatClient的流式响应
return chatClient.prompt(sendMessageDTO.getMessage())
.stream()
.content();
}
}
```
## 8. 管理员权限管理模块
### 8.1 权限说明
系统采用基于角色的权限控制RBAC用户角色分为
- **0**: 普通用户
- **1**: 版主
- **2**: 管理员
管理员拥有系统的最高权限,可以访问后台管理界面,对所有数据进行管理。
### 8.2 权限验证
所有管理员接口都需要通过以下验证:
1. **JWT Token验证**:确保用户已登录
2. **角色权限验证**确保用户角色为管理员role = 2
3. **账号状态验证**:确保账号未被禁用
### 8.3 管理员登录
管理员使用普通登录接口,系统会根据用户角色自动跳转:
- 管理员登录后跳转到 `/admin` 后台管理页面
- 普通用户登录后跳转到 `/forum` 论坛页面
**默认管理员账号**
- 用户名:`admin` 密码:`123456`
- 用户名:`superadmin` 密码:`admin123`
### 8.4 系统统计
#### 8.4.1 获取系统统计数据
- **URL**: `/admin/stats`
- **方法**: GET
- **描述**: 获取系统整体数据统计
- **认证**: 需要管理员权限
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"totalUsers": 1250,
"activeUsers": 856,
"newUsersToday": 23,
"totalPosts": 3420,
"newPostsToday": 45,
"totalComments": 8760,
"newCommentsToday": 128,
"totalResources": 567,
"newResourcesToday": 8,
"totalCategories": 8
}
}
```
### 8.5 用户管理
#### 8.5.1 获取用户列表
- **URL**: `/admin/users`
- **方法**: GET
- **描述**: 获取用户列表,支持搜索和筛选
- **认证**: 需要管理员权限
请求参数:
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
- **keyword** (query, 可选): 搜索关键词(用户名、昵称、邮箱)
- **role** (query, 可选): 角色筛选0-普通用户, 1-版主, 2-管理员)
- **status** (query, 可选): 状态筛选0-禁用, 1-启用)
响应结果:
```json
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 12345,
"username": "student123",
"nickname": "学生昵称",
"email": "student@school.edu",
"role": 0,
"status": 1,
"isVerified": 1,
"studentId": "20220101001",
"department": "计算机学院",
"major": "软件工程",
"grade": "2023级",
"points": 150,
"loginIp": "北京市",
"loginTime": "2023-05-01T12:00:00",
"createdAt": "2023-01-01T10:00:00"
}
],
"total": 1250,
"pages": 125
}
}
```
#### 8.5.2 更新用户状态
- **URL**: `/admin/users/{userId}/status`
- **方法**: PUT
- **描述**: 启用或禁用用户账号
- **认证**: 需要管理员权限
请求参数:
```json
{
"status": 0
}
```
#### 8.5.3 更新用户角色
- **URL**: `/admin/users/{userId}/role`
- **方法**: PUT
- **描述**: 修改用户角色权限
- **认证**: 需要管理员权限
请求参数:
```json
{
"role": 1
}
```
#### 8.5.4 删除用户
- **URL**: `/admin/users/{userId}`
- **方法**: DELETE
- **描述**: 删除用户及其相关数据(不能删除管理员)
- **认证**: 需要管理员权限
### 8.6 内容管理
#### 8.6.1 获取帖子列表
- **URL**: `/admin/posts`
- **方法**: GET
- **描述**: 获取帖子列表,支持搜索和筛选
- **认证**: 需要管理员权限
请求参数:
- **page** (query, 可选): 页码默认为1
- **size** (query, 可选): 每页大小默认为10
- **keyword** (query, 可选): 搜索关键词(标题、内容)
- **categoryId** (query, 可选): 分类筛选
- **status** (query, 可选): 状态筛选0-删除, 1-正常, 2-置顶)
#### 8.6.2 更新帖子状态
- **URL**: `/admin/posts/{postId}/status`
- **方法**: PUT
- **描述**: 修改帖子状态(置顶、隐藏等)
- **认证**: 需要管理员权限
#### 8.6.3 删除帖子
- **URL**: `/admin/posts/{postId}`
- **方法**: DELETE
- **描述**: 删除帖子及其相关数据
- **认证**: 需要管理员权限
### 8.7 分类管理
#### 8.7.1 获取分类列表
- **URL**: `/admin/categories`
- **方法**: GET
- **描述**: 获取所有分类列表
- **认证**: 需要管理员权限
#### 8.7.2 创建分类
- **URL**: `/admin/categories`
- **方法**: POST
- **描述**: 创建新分类
- **认证**: 需要管理员权限
请求参数:
```json
{
"name": "新分类",
"description": "分类描述",
"icon": "📚",
"sort": 10,
"status": 1
}
```
#### 8.7.3 更新分类
- **URL**: `/admin/categories/{categoryId}`
- **方法**: PUT
- **描述**: 更新分类信息
- **认证**: 需要管理员权限
#### 8.7.4 删除分类
- **URL**: `/admin/categories/{categoryId}`
- **方法**: DELETE
- **描述**: 删除分类(需确保分类下无内容)
- **认证**: 需要管理员权限
### 8.8 前端管理界面
管理员登录后可访问 `/admin` 路径的后台管理界面,包含:
1. **数据概览**:系统整体数据统计和图表
2. **用户管理**:用户列表、状态管理、角色分配
3. **帖子管理**:帖子审核、状态管理、批量操作
4. **评论管理**:评论审核、删除管理
5. **分类管理**:分类的增删改查
6. **资源管理**:资源文件的管理和审核
### 8.9 安全特性
1. **权限隔离**:管理员接口与普通接口完全隔离
2. **操作日志**:所有管理操作都会记录日志
3. **防护机制**:防止删除管理员账号等危险操作
4. **会话管理**:管理员会话有独立的安全策略
## 9. 待实现模块
以下模块尚未实现,将在后续开发中完成:
- 搜索功能模块
- 积分系统模块