mirror of
https://github.com/KingHWJ/WeReadBoard.git
synced 2026-11-03 18:24:58 +08:00
2.2 KiB
2.2 KiB
阅读目标数据库持久化实施计划
目标: 将正式看板的阅读目标迁移到现有 MySQL,保留当前业务规则与浏览器旧数据导入入口。
方案: Flask 当前接口读写 reading_goals、reading_goal_books,前端仅在服务端确认后更新目标。沿用当前个人看板范围,不增加账户体系。书籍成员独立于书架缓存,完成率根据当前已知阅读状态计算。
技术栈: 现有 Flask、PyMySQL、原生 JavaScript,无新增依赖。
步骤与验收
- 后端:在
reading_api.py增加 GET/POST/api/reading/goals、PUT/DELETE/api/reading/goals/<id>、POST/api/reading/goals/import。JSON 字段沿用id/name/start/end/ids/sources;列表返回{goals: [...]},写入返回{goal: ...},导入返回{imported: N}。先补接口失败用例,再实现校验、原子事务、重复导入跳过已有 ID。 - 表结构:新增
migrations/001_reading_goals.sql,只创建目标与成员两表;成员联合主键去重,仅对目标做级联删除。通过显式迁移应用,不在每次请求时建表。 - 前端:在
static/js/weapi.js复用请求封装支持 JSON 写入,在static/js/app.js接入加载、保存、追加、删除、导入和错误提示。保存中阻止重复提交,失败保留表单;旧 localStorage 不再作为运行时目标来源,也不删除旧备份。 - 边界:缺失书籍仍保留 ID 和目标分母,显示“状态待同步”,允许在编辑器移除;书单来源仅保存名称和加入时书目;日期含起止当天,全部读完优先显示已完成。
- 文档:同步
docs/technical-guide.md、docs/code-design.md、docs/API.md及正式页面提示,保留静态 Demo 的独立说明。 - 验证:使用标准库测试验证非法输入、重复 ID、事务回滚与数据库异常;真实 MySQL 验证新建、重读、编辑、导入和删除,仅操作唯一测试 ID。检查 JavaScript 语法并通过浏览器完成新建、刷新、编辑和清理闭环。
不创建分支、提交或合并。本次工作在已检查的非主分支工作区进行,保留既有未提交改动。