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

48 KiB

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. 基础信息

  • 基础URL: http://localhost:8087(本地测试)
  • 接口格式: RESTful API
  • 数据格式: JSON
  • 字符编码: UTF-8
  • 认证方式: JWT (JSON Web Token)

HTTP方法

  • GET: 获取资源
  • POST: 创建资源
  • PUT: 更新资源(全量更新)
  • DELETE: 删除资源

响应格式

成功响应:

{
  "code": 200,
  "message": "success",
  "data": {
    "key": "value"
  }
}

错误响应:

{
  "code": 400,  
  "message": "参数错误",
  "data": null  
}

2. 用户认证模块

2.1 用户注册

  • URL: /users/register
  • 方法: POST
  • 描述: 创建新用户账号

请求参数:

{
  "username": "student123",
  "email": "student@school.edu",
  "password": "Secure@Password123",
  "nickname": "学生昵称",
  "studentId": "20220101001",
  "department": "计算机学院",
  "major": "软件工程",
  "grade": "2023级",
  "code": "123456"
}

响应结果:

{
  "code": 200,
  "message": "注册成功",
  "data": {
    "userId": 12345,
    "username": "student123",
    "nickname": "学生昵称"
  }
}

2.2 用户密码登录

  • URL: /users/login
  • 方法: POST
  • 描述: 用户登录

请求参数:

{
  "email": "student@school.edu",
  "password": "Secure@Password123"
}

响应结果:

{
  "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
  • 描述: 向指定邮箱发送登录验证码

请求参数:

{
  "email": "student@school.edu"
}

响应结果:

{
  "code": 200,
  "message": "验证码已发送",
  "data": null
}

2.4 邮箱验证码登录

  • URL: /users/login/code
  • 方法: POST
  • 描述: 使用邮箱和验证码进行登录

请求参数:

{
  "email": "student@school.edu",
  "code": "123456"
}

响应结果:

{
  "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
  • 描述: 获取当前登录用户的个人资料信息

响应结果:

{
  "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

请求参数:

{
  "username": "newusername",
  "bio": "这是一个更新的个人简介",
  "gender": 1,
  "department": "计算机学院",
  "major": "软件工程",
  "grade": "2023级"
}

响应结果:

{
  "code": 200,
  "message": "更新成功",
  "data": null
}

3.3 修改用户密码

  • URL: /users/password
  • 方法: PUT
  • 描述: 修改当前登录用户的密码
  • 认证: 需要JWT Token

请求参数:

{
  "code": "123456",
  "newPassword": "NewSecure@Password123"
}

响应结果:

{
  "code": 200,
  "message": "密码修改成功",
  "data": null
}

3.4 上传用户头像

  • URL: /users/avatar
  • 方法: POST
  • 描述: 上传用户头像
  • 认证: 需要JWT Token

请求参数:

  • Content-Type: multipart/form-data
  • file: 头像文件(图片格式)

响应结果:

{
  "code": 200,
  "message": "头像上传成功",
  "data": {
    "avatarUrl": "https://example.com/avatars/user_12345.jpg"
  }
}

3.5 更新用户邮箱

  • URL: /users/email
  • 方法: PUT
  • 描述: 更新当前登录用户的邮箱
  • 认证: 需要JWT Token

请求参数:

{
  "email": "newemail@school.edu",
  "code": "123456"
}

响应结果:

{
  "code": 200,
  "message": "邮箱更新成功",
  "data": null
}

3.6 获取用户统计数据

  • URL: /users/stats
  • 方法: GET
  • 描述: 获取当前用户的统计数据
  • 认证: 需要JWT Token

响应结果:

{
  "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

响应结果:

{
  "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

响应结果:

{
  "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
  • 描述: 获取帖子详情

响应结果:

{
  "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

请求参数:

{
  "title": "帖子标题",
  "content": "帖子内容...",
  "categoryId": 1
}

响应结果:

{
  "code": 200,
  "message": "发布成功",
  "data": {
    "postId": 1
  }
}

4.1.4 更新帖子

  • URL: /posts/{id}
  • 方法: PUT
  • 描述: 更新帖子
  • 认证: 需要JWT Token

请求参数:

{
  "title": "更新后的标题",
  "content": "更新后的内容...",
  "categoryId": 2
}

响应结果:

{
  "code": 200,
  "message": "更新成功",
  "data": null
}

4.1.5 删除帖子

  • URL: /posts/{id}
  • 方法: DELETE
  • 描述: 删除帖子
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "删除成功",
  "data": null
}

4.1.6 点赞/取消点赞帖子

  • URL: /posts/{id}/like
  • 方法: POST
  • 描述: 点赞或取消点赞帖子
  • 认证: 需要JWT Token

响应结果:

{
  "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

响应结果:

{
  "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
  • 描述: 获取帖子的评论列表

响应结果:

{
  "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

请求参数:

{
  "postId": 1,
  "content": "评论内容...",
  "parentId": null
}

响应结果:

{
  "code": 200,
  "message": "评论成功",
  "data": {
    "commentId": 3
  }
}

4.2.3 删除评论

  • URL: /comments/{id}
  • 方法: DELETE
  • 描述: 删除评论
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "删除成功",
  "data": null
}

4.2.4 点赞/取消点赞评论

  • URL: /comments/{id}/like
  • 方法: POST
  • 描述: 点赞或取消点赞评论
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "点赞成功",
  "data": null
}

4.3 分类管理

4.3.1 获取分类列表

  • URL: /categories
  • 方法: GET
  • 描述: 获取分类列表

请求参数:

  • status (query, 可选): 分类状态1-启用0-禁用

响应结果:

{
  "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
  • 描述: 获取分类详情

响应结果:

{
  "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

请求参数:

{
  "name": "新分类",
  "description": "新分类描述",
  "icon": "icon-new",
  "sort": 6,
  "status": 1
}

响应结果:

{
  "code": 200,
  "message": "创建成功",
  "data": {
    "categoryId": 6
  }
}

4.3.4 更新分类

  • URL: /categories/{id}
  • 方法: PUT
  • 描述: 更新分类(需要管理员权限)
  • 认证: 需要JWT Token

请求参数:

{
  "name": "更新后的分类",
  "description": "更新后的描述",
  "icon": "icon-updated",
  "sort": 7,
  "status": 1
}

响应结果:

{
  "code": 200,
  "message": "更新成功",
  "data": null
}

4.3.5 删除分类

  • URL: /categories/{id}
  • 方法: DELETE
  • 描述: 删除分类(需要管理员权限)
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "删除成功",
  "data": null
}

5. 学习资源共享模块

5.1 上传资源

  • URL: /resources
  • 方法: POST
  • 描述: 上传新资源
  • 认证: 需要JWT Token

请求参数:

  • Content-Type: multipart/form-data
  • file: 资源文件
  • title: 资源标题
  • description: 资源描述
  • categoryId: 分类ID

响应结果:

{
  "code": 200,
  "message": "资源上传成功",
  "data": {
    "resourceId": 1
  }
}

5.2 获取资源详情

  • URL: /resources/{id}
  • 方法: GET
  • 描述: 获取资源详情

响应结果:

{
  "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

响应结果:

{
  "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

请求参数:

{
  "title": "更新后的标题",
  "description": "更新后的描述",
  "categoryId": 2
}

响应结果:

{
  "code": 200,
  "message": "更新成功",
  "data": null
}

5.5 删除资源

  • URL: /resources/{id}
  • 方法: DELETE
  • 描述: 删除资源
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "删除成功",
  "data": null
}

说明: 删除资源时会同时删除阿里云OSS中的文件和数据库中的相关记录包括点赞记录

5.6 下载资源

  • URL: /resources/{id}/download
  • 方法: GET
  • 描述: 下载资源

响应结果:

{
  "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

响应结果:

{
  "code": 200,
  "message": "点赞成功",
  "data": null
}

{
  "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

响应结果:

{
  "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

响应结果:

{
  "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)

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)

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

请求参数:

{
  "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学年第一学期

响应结果:

{
  "code": 200,
  "message": "创建课程成功",
  "data": {
    "courseId": 1
  }
}

6.1.2 获取课程详情

  • URL: /courses/{id}
  • 方法: GET
  • 描述: 获取课程详情
  • 认证: 需要JWT Token

响应结果:

{
  "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

响应结果:

{
  "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

响应结果:

{
  "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"

响应结果:

{
  "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

请求参数:

{
  "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"
}

响应结果:

{
  "code": 200,
  "message": "更新课程成功",
  "data": null
}

6.1.7 删除课程

  • URL: /courses/{id}
  • 方法: DELETE
  • 描述: 删除课程
  • 认证: 需要JWT Token

响应结果:

{
  "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

响应结果:

{
  "code": 200,
  "message": "success",
  "data": {
    "hasConflict": false,
    "conflictCount": 0
  }
}

6.2 日程管理

6.2.1 创建日程

  • URL: /schedules
  • 方法: POST
  • 描述: 创建新日程
  • 认证: 需要JWT Token

请求参数:

{
  "title": "小组会议",
  "description": "讨论项目进展",
  "startTime": "2023-05-10T14:00:00",
  "endTime": "2023-05-10T16:00:00",
  "location": "图书馆讨论室",
  "isAllDay": 0,
  "reminder": 30,
  "color": "#FF5722"
}

响应结果:

{
  "code": 200,
  "message": "创建日程成功",
  "data": {
    "scheduleId": 1
  }
}

6.2.2 获取日程详情

  • URL: /schedules/{id}
  • 方法: GET
  • 描述: 获取日程详情
  • 认证: 需要JWT Token

响应结果:

{
  "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

响应结果:

{
  "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"

响应结果:

{
  "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

请求参数:

{
  "title": "项目讨论会",
  "description": "讨论项目下一阶段计划",
  "startTime": "2023-05-10T15:00:00",
  "endTime": "2023-05-10T17:00:00",
  "location": "线上会议",
  "isAllDay": 0,
  "reminder": 15,
  "color": "#9C27B0"
}

响应结果:

{
  "code": 200,
  "message": "更新日程成功",
  "data": null
}

6.2.6 删除日程

  • URL: /schedules/{id}
  • 方法: DELETE
  • 描述: 删除日程
  • 认证: 需要JWT Token

响应结果:

{
  "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

响应结果:

{
  "code": 200,
  "message": "success",
  "data": {
    "hasConflict": false,
    "conflictCount": 0
  }
}

6.2.8 处理日程提醒

  • URL: /schedules/process-reminders
  • 方法: POST
  • 描述: 处理日程提醒(通常由系统定时任务调用)

响应结果:

{
  "code": 200,
  "message": "处理日程提醒完成",
  "data": {
    "total": 5,
    "success": 5
  }
}

6.3 数据库设计说明

课程表 (courses)

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)

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

响应结果:

{
  "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

响应结果:

{
  "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

请求参数:

{
  "sessionId": "session_1706177600_abc123",
  "title": "新对话"
}

参数说明:

  • sessionId: 会话ID由前端生成格式session__
  • title (可选): 会话标题,默认为"新对话"

响应结果:

{
  "code": 200,
  "message": "创建会话成功",
  "data": {
    "sessionId": "session_1706177600_abc123",
    "title": "新对话"
  }
}

7.1.5 更新会话标题

  • URL: /ai/sessions/{sessionId}
  • 方法: PUT
  • 描述: 更新会话标题
  • 认证: 需要JWT Token

请求参数:

{
  "title": "更新后的标题"
}

响应结果:

{
  "code": 200,
  "message": "更新成功",
  "data": null
}

7.1.6 清空会话消息

  • URL: /ai/sessions/{sessionId}/messages
  • 方法: DELETE
  • 描述: 清空指定会话的所有消息(保留会话)
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "清空成功",
  "data": null
}

7.1.7 删除会话

  • URL: /ai/sessions/{sessionId}
  • 方法: DELETE
  • 描述: 删除指定会话及其所有消息
  • 认证: 需要JWT Token

响应结果:

{
  "code": 200,
  "message": "删除成功",
  "data": null
}

7.2 数据库设计说明

AI聊天会话表 (ai_chat_sessions)

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)

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_ 和 msg_
  • 流式响应: 使用Server-Sent Events实现实时的AI回复流式传输

前端流式处理示例:

import { sendMessage } from '@/api/ai'

// 使用流式API
await sendMessage({
  message: '你好',
  sessionId: 'session_123',
  conversationHistory: []
}, (chunk: string) => {
  // 处理每个数据块
  currentMessage.content += chunk
  // 实时更新UI
  updateMessageDisplay()
})

后端流式实现:

@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层实现:

@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
  • 描述: 获取系统整体数据统计
  • 认证: 需要管理员权限

响应结果:

{
  "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-启用)

响应结果:

{
  "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
  • 描述: 启用或禁用用户账号
  • 认证: 需要管理员权限

请求参数:

{
  "status": 0
}

8.5.3 更新用户角色

  • URL: /admin/users/{userId}/role
  • 方法: PUT
  • 描述: 修改用户角色权限
  • 认证: 需要管理员权限

请求参数:

{
  "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
  • 描述: 创建新分类
  • 认证: 需要管理员权限

请求参数:

{
  "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. 待实现模块

以下模块尚未实现,将在后续开发中完成:

  • 搜索功能模块
  • 积分系统模块