加入书架功能说明.md 6.5 KB

加入书架功能说明

✅ 已实现的功能

1. 数据库表结构

用户书架表 (user_bookshelf)

  • id: 主键ID
  • user_id: 用户ID(外键关联users表)
  • book_id: 书籍ID(外键关联books表)
  • read_progress: 阅读进度(百分比)
  • last_read_time: 最后阅读时间
  • added_at: 加入书架时间
  • updated_at: 更新时间
  • 唯一约束:user_id + book_id 组合唯一,防止重复添加

2. 后端接口

添加书籍到书架

  • 接口地址: POST /api/bookshelf/add
  • 请求参数:

    {
    "userId": 1,
    "bookId": 1
    }
    
  • 响应: 返回书架记录信息

从书架移除书籍

  • 接口地址: DELETE /api/bookshelf/remove
  • 请求参数:

    {
    "userId": 1,
    "bookId": 1
    }
    
  • 响应: 返回成功/失败信息

获取用户书架列表

  • 接口地址: GET /api/bookshelf/list?userId=1
  • 响应: 返回用户书架列表(包含书籍信息)

检查书籍是否在书架中

  • 接口地址: GET /api/bookshelf/check?userId=1&bookId=1
  • 响应: 返回布尔值(true/false)

更新阅读进度

  • 接口地址: PUT /api/bookshelf/progress
  • 请求参数:

    {
    "userId": 1,
    "bookId": 1,
    "readProgress": 50
    }
    
  • 响应: 返回更新后的书架记录

3. 前端功能

书籍详情页面

  • ✅ 点击"加入书架"按钮,调用后端接口
  • ✅ 检查用户是否登录(未登录提示跳转登录页)
  • ✅ 检查书籍是否已在书架中(显示不同状态)
  • ✅ 加入成功后更新按钮状态
  • ✅ 错误提示和成功提示

书架页面

  • ✅ 从后端获取用户书架列表
  • ✅ 显示书架中的书籍(封面、标题、进度)
  • ✅ 显示最近阅读的书籍(按最后阅读时间排序)
  • ✅ 未登录时显示提示和登录按钮
  • ✅ 书架为空时显示空状态提示
  • ✅ 点击书籍跳转到书籍详情页

🚀 使用流程

1. 加入书架流程

  1. 用户登录

    • 用户必须先登录才能使用书架功能
  2. 浏览书籍详情

    • 用户在书籍详情页面查看书籍信息
  3. 加入书架

    • 点击"加入书架"按钮
    • 系统检查用户是否登录
    • 系统检查书籍是否已在书架中
    • 调用后端接口添加书籍到书架
    • 显示成功提示,按钮状态更新为"已在书架"
  4. 查看书架

    • 用户可以在书架页面查看已添加的书籍
    • 显示阅读进度和最后阅读时间

2. 错误处理

  • 用户未登录: 提示用户先登录,并提供登录按钮
  • 书籍已在书架中: 显示"已在书架中"提示
  • 书籍不存在: 显示"书籍不存在"错误
  • 用户不存在: 显示"用户不存在"错误
  • 网络错误: 显示"网络请求失败"错误

📋 数据库操作

创建表

执行 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());

🔍 测试步骤

1. 启动后端服务

cd book
mvn spring-boot:run

2. 启动前端项目

在微信开发者工具中打开 books 项目

3. 测试加入书架功能

  1. 登录用户

    • 使用测试账号登录(如:zhangsan / 123456)
  2. 打开书籍详情页

    • 在首页或搜索页找到一本书
    • 点击进入书籍详情页
  3. 加入书架

    • 点击"加入书架"按钮
    • 应该显示"已加入书架"提示
    • 按钮状态应该变为"已在书架"
  4. 查看书架

    • 切换到书架页面
    • 应该能看到刚才添加的书籍
    • 显示书籍封面、标题和阅读进度
  5. 再次加入同一本书

    • 返回书籍详情页
    • 点击"加入书架"按钮
    • 应该显示"已在书架中"提示
    • 按钮应该显示"已在书架"状态

4. 测试未登录情况

  1. 退出登录

    • 清除本地存储的用户信息
  2. 尝试加入书架

    • 打开书籍详情页
    • 点击"加入书架"按钮
    • 应该显示登录提示框
    • 点击"去登录"应该跳转到登录页
  3. 查看书架

    • 切换到书架页面
    • 应该显示"请先登录查看书架"提示
    • 显示登录按钮

📝 API接口详情

添加书籍到书架

请求:

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",
        ...
      }
    }
  ]
}

📌 注意事项

  1. 用户身份验证: 目前通过前端传递userId,生产环境建议使用JWT Token进行身份验证

  2. 数据完整性:

    • 添加书籍到书架时,会检查用户和书籍是否存在
    • 使用唯一约束防止重复添加
  3. 外键约束:

    • 用户书架表有外键约束,删除用户或书籍时会自动删除相关的书架记录
  4. 阅读进度:

    • 阅读进度默认为0
    • 可以通过更新接口更新阅读进度
  5. 最近阅读:

    • 最近阅读列表根据最后阅读时间排序
    • 只显示有阅读记录的书籍(lastReadTime不为null)

🔄 后续优化建议

  1. 身份验证: 使用JWT Token替代前端传递userId

  2. 批量操作: 支持批量添加/移除书籍

  3. 书架分类: 支持创建自定义书架分类

  4. 阅读记录: 记录详细的阅读历史(章节、时间等)

  5. 同步功能: 支持多设备同步书架数据

  6. 推荐功能: 根据用户书架推荐相关书籍


创建时间:2024年 最后更新:2024年