ila
|
ab23ff60e5
|
feat: 书籍封面与音频附件、播放器与播放位置 (#21)
- schema v8:lexgo_book_attachments(按 book_id+kind 唯一,bytes MEDIUMBLOB)与
lexgo_playback_positions(owner_id+book_id 主键),只用可重放 DDL,外键级联删书
- 后端:按文件头 magic bytes 判定类型(MP3 / JPG / PNG / WebP,含 WebP 维度解析),
音频 ≤20 MiB、封面 ≤2 MiB 且 ≤4096²;上传/替换/移除;binaryResponse 交给
http.ServeContent 提供 Range 206、416、ETag 与 304;播放位置 upsert,替换音频时重置
- 学习端:带凭据的 fetch + 对象 URL(令牌不进 URL),书库封面、书籍页「音频与封面」
区块、阅读页常驻播放器(播放/暂停、进度、0.75–1.5 倍速、错误重试、位置上报)
- 测试:Go 86 项(新增附件单测/集成与 v7→v8 迁移)、学习端 157 单测与 26 项 E2E
- 顺带修掉 e2e/phrase.spec.ts 的偶发失败:重试条件改为断言期望词数、重读坐标、关面板后重试
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home /
Deployment-and-Operations(备份范围含附件与体积提示)
|
2026-09-15 18:39:56 +08:00 |
|
ila
|
38d8975325
|
feat: 自托管交付的安装、备份与恢复工具及部署文档 (#15)
- scripts/ops.py:install-check(依赖与资源版本、客户端不得低于服务端)、init-database(建空库
并提示最小权限)、backup(全库 dump + manifest,不含凭据)、restore(默认只写空库、
--confirm 必需、覆盖需 --force、拒绝系统库与带 CREATE DATABASE/USE 的 dump、比对源库校验和)、
verify(完整性 + 可选两账号接口闭环)、smoke(干净实例上建两个演练账号走通学习闭环)
- scripts/bench.py:写明规模的人造数据集性能测量,记录数据量、机器与 p50/p95
- tests/test_lexgo_ops.py:版本解析、库名白名单、dump 安全性、manifest 字段白名单等无库测试
- Wiki 新增 Deployment-and-Operations 页面与 wiki-docs.json 映射(含升级回滚与已知限制)
- 更新 Architecture、Business-Rules、Local-Development、Product-Requirements、Home 与
README/AGENTS;本单无 schema 与接口变化
|
2026-09-15 16:30:23 +08:00 |
|
ila
|
850c78e2aa
|
feat: 管理端登录日志与操作审计 (#18)
|
2026-09-10 20:37:46 +08:00 |
|
ila
|
2c8e9b3ca0
|
feat: 接入两端用户名登录和独立学习空间 (#2)
|
2026-09-10 17:39:57 +08:00 |
|
QiuSW
|
1c998673f3
|
refactor: 将 Harness 工具移至 dev_scripts (#3)
|
2026-08-08 09:18:09 +08:00 |
|
QiuSW
|
c8ccb62a98
|
test: 覆盖核心文档映射错误 (#2)
|
2026-08-08 09:02:48 +08:00 |
|
QiuSW
|
250b0555e4
|
feat: 建立初级维护者文档体系 (#2)
|
2026-08-08 09:00:44 +08:00 |
|
QiuSW
|
1e3915ba59
|
fix: 支持中文 Wiki 页面路径 (#1)
|
2026-08-08 00:00:57 +08:00 |
|
QiuSW
|
b08a919fd7
|
feat: 引入 Wiki 文档镜像流程 (#1)
|
2026-08-07 23:57:13 +08:00 |
|
QiuSW
|
d6706f7c69
|
chore: initialize DevHarness template
|
2026-08-07 23:11:53 +08:00 |
|