user_bookshelf)id: 主键IDuser_id: 用户ID(外键关联users表)book_id: 书籍ID(外键关联books表)read_progress: 阅读进度(百分比)last_read_time: 最后阅读时间added_at: 加入书架时间updated_at: 更新时间user_id + book_id 组合唯一,防止重复添加POST /api/bookshelf/add请求参数:
{
"userId": 1,
"bookId": 1
}
响应: 返回书架记录信息
DELETE /api/bookshelf/remove请求参数:
{
"userId": 1,
"bookId": 1
}
响应: 返回成功/失败信息
GET /api/bookshelf/list?userId=1GET /api/bookshelf/check?userId=1&bookId=1PUT /api/bookshelf/progress请求参数:
{
"userId": 1,
"bookId": 1,
"readProgress": 50
}
响应: 返回更新后的书架记录
用户登录
浏览书籍详情
加入书架
查看书架
执行 book/src/main/resources/db/schema.sql 文件中的 user_bookshelf 表创建语句。
-- 为用户1添加书籍1到书架
INSERT INTO user_bookshelf (user_id, book_id, read_progress, added_at)
VALUES (1, 1, 0, NOW());
-- 为用户1添加书籍2到书架
INSERT INTO user_bookshelf (user_id, book_id, read_progress, added_at)
VALUES (1, 2, 25, NOW());
cd book
mvn spring-boot:run
在微信开发者工具中打开 books 项目
登录用户
打开书籍详情页
加入书架
查看书架
再次加入同一本书
退出登录
尝试加入书架
查看书架
请求:
POST /api/bookshelf/add
Content-Type: application/json
{
"userId": 1,
"bookId": 1
}
响应:
{
"code": 200,
"message": "加入书架成功",
"data": {
"id": 1,
"userId": 1,
"bookId": 1,
"readProgress": 0,
"lastReadTime": null,
"addedAt": "2024-01-01 12:00:00"
}
}
错误响应:
{
"code": 500,
"message": "书籍已在书架中",
"data": null
}
请求:
GET /api/bookshelf/list?userId=1
响应:
{
"code": 200,
"message": null,
"data": [
{
"id": 1,
"userId": 1,
"bookId": 1,
"readProgress": 0,
"lastReadTime": null,
"addedAt": "2024-01-01 12:00:00",
"book": {
"id": 1,
"title": "西游记",
"author": "(明) 吴承恩",
"image": "https://example.com/image.jpg",
...
}
}
]
}
用户身份验证: 目前通过前端传递userId,生产环境建议使用JWT Token进行身份验证
数据完整性:
外键约束:
阅读进度:
最近阅读:
身份验证: 使用JWT Token替代前端传递userId
批量操作: 支持批量添加/移除书籍
书架分类: 支持创建自定义书架分类
阅读记录: 记录详细的阅读历史(章节、时间等)
同步功能: 支持多设备同步书架数据
推荐功能: 根据用户书架推荐相关书籍
创建时间:2024年 最后更新:2024年