本项目是一个基于Spring Boot + JPA的中小学学习搭子APP后端API,为中小学生提供寻找学习伙伴的平台功能。
服务地址: http://localhost:8080/api
API文档: http://localhost:8080/api/docs
数据存储方式: H2文件数据库(持久化存储)
./data/testdb.mv.db
jdbc:h2:file:./data/testdb
sa
接口地址: POST /api/users/register
功能描述: 创建新的学习搭子用户账户
请求参数:
{
"username": "xiaoming",
"password": "123456",
"grade": "初三"
}
参数说明:
username
(必填): 用户名,2-50个字符password
(必填): 密码,6个字符以上grade
(可选): 年级(如:小一、小二、小三、小四、小五、小六、初一、初二、初三、高一、高二、高三等)成功响应:
{
"code": 200,
"message": "中小学学习搭子用户注册成功",
"data": {
"userId": 1,
"username": "xiaoming",
"grade": "初三",
"avatarUrl": null,
"createTime": "2024-01-01T10:00:00",
"updateTime": "2024-01-01T10:00:00"
},
"timestamp": "2024-01-01T10:00:00"
}
错误响应:
{
"code": 400,
"message": "用户名已存在",
"data": null,
"timestamp": "2024-01-01T10:00:00"
}
接口地址: POST /api/users/login
功能描述: 验证学习搭子用户凭据并返回用户信息
请求参数:
{
"username": "xiaoming",
"password": "123456"
}
参数说明:
username
(必填): 用户名password
(必填): 密码成功响应:
{
"code": 200,
"message": "登录成功",
"data": {
"userId": 1,
"username": "xiaoming",
"grade": "初三",
"avatarUrl": "https://example.com/avatar/xiaoming.jpg",
"createTime": "2024-01-01T10:00:00",
"updateTime": "2024-01-01T10:00:00"
},
"timestamp": "2024-01-01T10:00:00"
}
错误响应:
{
"code": 401,
"message": "用户名或密码错误",
"data": null,
"timestamp": "2024-01-01T10:00:00"
}
所有接口都使用统一的响应格式:
{
"code": 200,
"message": "操作结果描述",
"data": "具体数据或null",
"timestamp": "响应时间戳"
}
200
: 操作成功400
: 请求参数错误401
: 未授权(用户名或密码错误)404
: 资源不存在500
: 服务器内部错误系统启动时会自动创建以下测试中小学学习搭子:
管理员账户
admin
123456
高三
https://example.com/avatar/admin.jpg
测试用户1
xiaoming
123456
初三
https://example.com/avatar/xiaoming.jpg
测试用户2
xiaohong
123456
高二
https://example.com/avatar/xiaohong.jpg
测试用户3
xiaogang
123456
初二
https://example.com/avatar/xiaogang.jpg
接口地址: GET /api/users/{id}
功能描述: 根据用户ID获取用户的头像、用户名和昵称等基本信息
请求参数:
id
(路径参数,必填): 用户ID成功响应:
{
"code": 200,
"message": "获取用户信息成功",
"data": {
"userId": 1,
"avatarUrl": "https://example.com/avatar/xiaoming.jpg",
"username": "xiaoming",
"grade": "初三",
"createTime": "2024-01-01T10:00:00",
"updateTime": "2024-01-01T10:00:00"
},
"timestamp": 1704067200000
}
错误响应:
{
"code": 404,
"message": "用户不存在",
"data": null,
"timestamp": 1704067200000
}
接口地址: GET /api/users
功能描述: 获取所有用户的基本信息列表
成功响应:
{
"code": 200,
"message": "获取用户列表成功",
"data": [
{
"userId": 1,
"avatarUrl": "https://example.com/avatar/admin.jpg",
"username": "admin",
"grade": "高三",
"createTime": "2024-01-01T10:00:00",
"updateTime": "2024-01-01T10:00:00"
},
{
"userId": 2,
"avatarUrl": "https://example.com/avatar/xiaoming.jpg",
"username": "xiaoming",
"grade": "初三",
"createTime": "2024-01-01T10:00:00",
"updateTime": "2024-01-01T10:00:00"
}
],
"timestamp": 1704067200000
}
curl -X POST http://localhost:8080/api/users/register \
-H "Content-Type: application/json" \
-d '{
"username": "newuser",
"password": "123456",
"grade": "初一"
}'
curl -X POST http://localhost:8080/api/users/login \
-H "Content-Type: application/json" \
-d '{
"username": "xiaoming",
"password": "123456"
}'
curl -X GET http://localhost:8080/api/users/1
curl -X GET http://localhost:8080/api/users
curl -X PUT http://localhost:8080/api/users/1 \
-F "username=newusername" \
-F "grade=高一"
curl -X PUT http://localhost:8080/api/users/1 \
-F "username=newusername" \
-F "grade=高一" \
-F "avatar=@/path/to/avatar.jpg"
接口地址: PUT /api/users/{id}
功能描述: 更新用户的昵称、年级和头像等信息,支持头像文件上传
请求参数:
id
(路径参数,必填): 用户ID请求格式: multipart/form-data
请求参数:
username
(可选): 新的用户名,2-50个字符grade
(可选): 新的年级,最多20个字符avatar
(可选): 头像文件,支持jpg、jpeg、png格式,最大5MB参数说明:
avatar
文件,系统会自动保存文件并更新用户的头像URLuploads/avatars/
目录http://localhost:8080/uploads/avatars/{filename}
成功响应:
{
"code": 200,
"message": "用户信息更新成功",
"data": {
"userId": 1,
"avatarUrl": "https://example.com/avatar/new.jpg",
"username": "newusername",
"grade": "高一",
"createTime": "2024-01-01T10:00:00",
"updateTime": "2024-01-01T12:00:00"
},
"timestamp": 1704074400000
}
错误响应:
{
"code": 404,
"message": "用户不存在",
"data": null,
"timestamp": 1704074400000
}
{
"code": 400,
"message": "用户名已存在",
"data": null,
"timestamp": 1704074400000
}
接口地址: POST /api/goals
功能描述: 创建新的学习目标
请求格式: application/json
请求参数:
{
"userId": 1,
"subject": "数学",
"goalType": "DAILY",
"content": "完成代数练习题",
"difficulty": "MEDIUM",
"quantity": 10,
"estimatedTime": 60,
"startTime": "2025-01-29T10:00:00"
}
参数说明:
userId
(必填): 用户IDsubject
(必填): 学科名称,如"数学"、"语文"、"英语"等goalType
(必填): 目标类型,可选值:DAILY(每日)、WEEKLY(每周)、MONTHLY(每月)content
(必填): 目标内容描述difficulty
(必填): 难度等级,可选值:EASY(简单)、MEDIUM(中等)、HARD(困难)quantity
(必填): 目标数量estimatedTime
(必填): 预估完成时间(分钟)startTime
(可选): 开始时间,格式:yyyy-MM-ddTHH:mm:ss成功响应:
{
"code": 200,
"message": "目标创建成功",
"data": {
"goalId": 1,
"userId": 1,
"subject": "数学",
"goalType": "DAILY",
"content": "完成代数练习题",
"difficulty": "MEDIUM",
"quantity": 10,
"estimatedTime": 60,
"status": "PENDING",
"createTime": "2025-01-29T10:00:00",
"startTime": null,
"endTime": null
}
}
示例请求:
curl -X POST http://192.168.124.7:8080/api/goals \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"subject": "数学",
"goalType": "DAILY",
"content": "完成代数练习题",
"difficulty": "MEDIUM",
"quantity": 10,
"estimatedTime": 60
}'
接口地址: POST /api/goals/{id}/start
功能描述: 开始执行指定的学习目标
请求参数:
id
(路径参数,必填): 目标ID成功响应:
{
"code": 200,
"message": "目标已开始执行",
"data": {
"goalId": 1,
"userId": 1,
"subject": "数学",
"goalType": "DAILY",
"content": "完成代数练习题",
"difficulty": "MEDIUM",
"quantity": 10,
"estimatedTime": 60,
"status": "IN_PROGRESS",
"createTime": "2025-01-29T10:00:00",
"startTime": "2025-01-29T10:30:00",
"endTime": null
}
}
示例请求:
curl -X POST http://localhost:8080/api/goals/1/start
接口地址: GET /api/goals/user/{userId}
功能描述: 获取指定用户的所有学习目标
请求参数:
userId
(路径参数,必填): 用户IDstatus
(查询参数,可选): 目标状态筛选,可选值:PENDING、IN_PROGRESS、COMPLETED、CANCELLEDsubject
(查询参数,可选): 学科筛选goalType
(查询参数,可选): 目标类型筛选成功响应:
{
"code": 200,
"message": "获取用户目标列表成功",
"data": [
{
"goalId": 1,
"userId": 1,
"subject": "数学",
"goalType": "DAILY",
"content": "完成代数练习题",
"difficulty": "MEDIUM",
"quantity": 10,
"estimatedTime": 60,
"status": "IN_PROGRESS",
"createTime": "2025-01-29T10:00:00",
"startTime": "2025-01-29T10:30:00",
"endTime": null
}
]
}
示例请求:
# 获取所有目标
curl -X GET http://localhost:8080/api/goals/user/1
# 获取进行中的目标
curl -X GET "http://localhost:8080/api/goals/user/1?status=IN_PROGRESS"
# 获取数学学科的目标
curl -X GET "http://localhost:8080/api/goals/user/1?subject=数学"
接口地址: GET /api/goals/user/{userId}/today
功能描述: 获取用户今日的学习目标
请求参数:
userId
(路径参数,必填): 用户ID成功响应:
{
"code": 200,
"message": "获取今日目标成功",
"data": [
{
"goalId": 1,
"userId": 1,
"subject": "数学",
"goalType": "DAILY",
"content": "完成代数练习题",
"difficulty": "MEDIUM",
"quantity": 10,
"estimatedTime": 60,
"status": "IN_PROGRESS",
"createTime": "2025-01-29T10:00:00",
"startTime": "2025-01-29T10:30:00",
"endTime": null
}
]
}
示例请求:
curl -X GET http://localhost:8080/api/goals/user/1/today
接口地址: GET /api/goals/user/{userId}/week
功能描述: 获取用户本周的学习目标
请求参数:
userId
(路径参数,必填): 用户ID成功响应:
{
"code": 200,
"message": "获取本周目标成功",
"data": [
{
"goalId": 1,
"userId": 1,
"subject": "数学",
"goalType": "WEEKLY",
"content": "完成本周数学作业",
"difficulty": "MEDIUM",
"quantity": 5,
"estimatedTime": 300,
"status": "IN_PROGRESS",
"createTime": "2025-01-27T09:00:00",
"startTime": "2025-01-27T09:30:00",
"endTime": null
}
]
}
示例请求:
curl -X GET http://localhost:8080/api/goals/user/1/week
接口地址: GET /api/goals/user/{userId}/stats
功能描述: 获取用户的学习目标统计信息
请求参数:
userId
(路径参数,必填): 用户ID成功响应:
{
"code": 200,
"message": "获取目标统计成功",
"data": {
"totalGoals": 10,
"completedGoals": 7,
"inProgressGoals": 2,
"pendingGoals": 1,
"completionRate": 70.0
}
}
示例请求:
curl -X GET http://localhost:8080/api/goals/user/1/stats
接口: GET /api/goals/user/{userId}/daterange
描述: 根据日期范围获取用户的学习目标,支持按天查看目标功能
请求参数:
userId
(路径参数,必填): 用户IDstartDate
(查询参数,必填): 开始日期,格式:yyyy-MM-ddendDate
(查询参数,必填): 结束日期,格式:yyyy-MM-dd成功响应:
{
"code": 200,
"message": "获取目标成功",
"data": [
{
"goalId": 1,
"goalContent": "完成数学作业",
"subject": "数学",
"deadline": "2024-01-15T18:00:00",
"status": "IN_PROGRESS",
"progress": 60,
"createdAt": "2024-01-15T08:00:00",
"updatedAt": "2024-01-15T10:30:00"
}
]
}
示例请求:
# 获取某一天的目标
curl -X GET "http://localhost:8080/api/goals/user/1/daterange?startDate=2024-01-15&endDate=2024-01-15"
# 获取一周的目标
curl -X GET "http://localhost:8080/api/goals/user/1/daterange?startDate=2024-01-15&endDate=2024-01-21"
接口: POST /api/ai/generate-questions
描述: 根据目标信息生成相应的题目(当前使用模拟数据生成)
请求参数:
{
"goalId": 1,
"subject": "数学",
"contentType": 1,
"difficulty": "简单",
"questionCount": 5,
"knowledgePoint": "加减法",
"goalContent": "练习基础数学运算"
}
参数说明:
goalId
(必填): 目标IDsubject
(必填): 学科名称contentType
(必填): 题目类型,1-选择题,2-填空题,3-单词difficulty
(必填): 难度等级questionCount
(必填): 生成题目数量,必须大于0knowledgePoint
(可选): 知识点goalContent
(可选): 目标内容描述响应示例:
{
"code": 200,
"message": "题目生成成功",
"data": [
{
"detailId": 1,
"content": "计算:3 + 5 = ?",
"options": ["A. 6", "B. 7", "C. 8", "D. 9"],
"answer": "C. 8",
"difficulty": "简单",
"knowledgePoint": "加减法",
"contentType": 1
}
]
}
接口: GET /api/ai/questions/{goalId}
描述: 获取指定目标的所有题目
路径参数:
goalId
: 目标ID响应示例:
{
"code": 200,
"message": "获取题目成功",
"data": [
{
"detailId": 1,
"content": "计算:3 + 5 = ?",
"options": ["A. 6", "B. 7", "C. 8", "D. 9"],
"answer": "C. 8",
"difficulty": "简单",
"knowledgePoint": "加减法",
"contentType": 1
}
]
}
接口: POST /api/ai/auto-generate
描述: 保存目标后自动生成题目(内部调用)
请求参数:
{
"goalId": 1,
"subject": "数学",
"goalType": "选择",
"totalQuantity": 10,
"difficulty": "简单"
}
示例请求:
# 生成题目
curl -X POST "http://localhost:8080/api/ai/generate-questions" \
-H "Content-Type: application/json" \
-d '{
"goalId": 1,
"subject": "数学",
"contentType": 1,
"difficulty": "简单",
"questionCount": 5,
"knowledgePoint": "加减法"
}'
# 获取题目
curl -X GET "http://localhost:8080/api/ai/questions/1"
接口: POST /api/ai/chat
描述: 发送消息给AI并获取回复
请求参数:
{
"userId": 1,
"content": "你好,我想学习数学"
}
响应示例:
{
"code": 200,
"message": "消息发送成功",
"data": {
"chatId": 1,
"userId": 1,
"content": "你好!我很乐意帮助你学习数学。你想从哪个方面开始呢?",
"type": 1,
"timestamp": "2025-01-30T10:30:00"
}
}
接口: GET /api/ai/chat/history/{userId}
描述: 获取用户的完整聊天历史记录
响应示例:
{
"code": 200,
"message": "获取聊天记录成功",
"data": [
{
"chatId": 2,
"userId": 1,
"content": "你好!我很乐意帮助你学习数学。你想从哪个方面开始呢?",
"type": 1,
"timestamp": "2025-01-30T10:30:00"
},
{
"chatId": 1,
"userId": 1,
"content": "你好,我想学习数学",
"type": 0,
"timestamp": "2025-01-30T10:29:30"
}
]
}
接口: GET /api/ai/chat/recent/{userId}?limit=20
描述: 获取用户最近的聊天记录(默认20条)
接口: DELETE /api/ai/chat/history/{userId}
描述: 清空用户的所有聊天记录
响应示例:
{
"code": 200,
"message": "清空聊天记录成功",
"data": null
}
type: 0
- 用户消息type: 1
- AI回复curl -X POST http://localhost:8080/api/ai/chat \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"content": "请帮我解释一下二次函数"
}'
curl -X GET http://localhost:8080/api/ai/chat/history/1
接口: GET /api/reports/user/{userId}
描述: 获取指定用户的所有学习报告
路径参数:
userId
: 用户ID响应示例:
{
"code": 200,
"message": "获取学习报告成功",
"data": [
{
"reportId": 1,
"goalId": 1,
"userId": 1,
"generateTime": "2025-01-30T15:30:00",
"accuracy": 85.5,
"goalContent": "完成数学练习题",
"subject": "数学",
"shareUrl": "http://localhost:8080/api/reports/1/share"
}
]
}
接口: GET /api/reports/{reportId}
描述: 获取指定学习报告的详细信息
路径参数:
reportId
: 报告ID响应示例:
{
"code": 200,
"message": "获取报告详情成功",
"data": {
"reportId": 1,
"goalId": 1,
"userId": 1,
"generateTime": "2025-01-30T15:30:00",
"accuracy": 85.5,
"knowledgeAnalysis": {
"基础运算": 8,
"代数方程": 5,
"几何图形": 7
},
"difficultyAnalysis": {
"简单": 12,
"中等": 6,
"困难": 2
},
"recentAnswers": [
{
"answerId": 1,
"contentId": 1,
"userAnswer": "C",
"isCorrect": 1,
"spendTime": 30,
"answerTime": "2025-01-30T15:25:00"
}
],
"shareUrl": "http://localhost:8080/api/reports/1/share"
}
}
接口: POST /api/reports/generate
描述: 为指定目标生成学习报告
请求参数:
{
"goalId": 1,
"userId": 1
}
响应示例:
{
"code": 200,
"message": "学习报告生成成功",
"data": {
"reportId": 1,
"goalId": 1,
"userId": 1,
"generateTime": "2025-01-30T15:30:00",
"accuracy": 85.5,
"shareUrl": "http://localhost:8080/api/reports/1/share"
}
}
接口: GET /api/reports/{reportId}/share
描述: 获取学习报告的分享页面
路径参数:
reportId
: 报告ID响应: 返回HTML页面,展示学习报告的分享内容
curl -X GET http://localhost:8080/api/reports/user/1
curl -X GET http://localhost:8080/api/reports/1
curl -X POST http://localhost:8080/api/reports/generate \
-H "Content-Type: application/json" \
-d '{
"goalId": 1,
"userId": 1
}'
接口: POST /api/answers/submit
描述: 提交用户答案并记录答题情况
请求参数:
{
"userId": 1,
"goalId": 1,
"contentId": 1,
"userAnswer": "C",
"spendTime": 30
}
参数说明:
userId
: 用户IDgoalId
: 目标IDcontentId
: 题目IDuserAnswer
: 用户提交的答案spendTime
: 答题用时(秒)响应示例:
{
"code": 200,
"message": "答案提交成功",
"data": {
"answerId": 1,
"isCorrect": true,
"correctAnswer": "C",
"explanation": "正确答案是C,因为3+5=8"
}
}
接口: GET /api/answers/goal/{goalId}
描述: 获取指定目标的所有答题记录
路径参数:
goalId
: 目标ID响应示例:
{
"code": 200,
"message": "获取答题记录成功",
"data": [
{
"answerId": 1,
"userId": 1,
"goalId": 1,
"contentId": 1,
"userAnswer": "C",
"isCorrect": 1,
"spendTime": 30,
"answerTime": "2025-01-30T15:25:00"
}
]
}
如有问题,请联系开发团队:dev@example.com