v1.1.5
NPClassworksKV v1.1.5 · Ikuyo(喜多郁代)
版本概述
v1.1.5 是 NPClassworksKV 配套 NPClassworks v1.1.5 的功能与可靠性更新。
本次更新提供账号同步的个人作业模板、跨日期需带物品查询、选做与提交说明,以及面向学生和大屏的作业更正回顾接口。同时完善教师确认的版本核验、模板并发与兼容校验,继续沿用现有发布权限、修订历史和实时同步机制。
新增功能
个人作业模板
- 新增个人作业模板的列表、创建、修改和删除接口,按已鉴权账号隔离;模板随账号保存,可跨设备使用。
- 模板支持名称、标题、正文、选做内容、需带物品及提交说明,支持
〔页码〕等纯文本填空项。 - 每个账号最多保存 50 个模板,每个模板最多 10 种填空项;服务端验证字段类型、长度和填空语法。
- 修改与删除要求携带
expectedRevision,缺少有效版本返回 428,版本冲突返回 409;匹配同一版本的并发修改只接受一次。 - 复用已有
AccountPreference存储,不新增模板表。创建时串行核验账号容量,修改、删除在数据库行锁事务内读取版本并写入。
需带物品与作业补充信息
- 作业元数据支持需带物品及独立携带日期,服务端验证内容长度和有效日期;无作业标记也可附带准备事项。
- 公开和大屏 feed 增加
includePreparations=true,在非周查询中纳入携带日期符合范围的跨日期作业,为前端集中清单提供数据,并保留现有分页与可见性条件。 - 支持最多 6000 字的选做内容和最多 500 字的提交说明;不允许通知或“今日无作业”记录携带非空的选做、上交要求。
- 修改已发布作业时支持最多 300 字的
correctionReason,写入本次修订快照。旧原因不会随复制、恢复或下一次编辑自动沿用。 - 选做内容参与教师待处理中心的版本差异摘要,便于识别正文之外的修改。
作业更正回顾
- 新增公开接口
/api/v2/publications/feed/:id/corrections,以及大屏接口/api/v2/classroom-screens/feed/:id/corrections。 - 按北京时间指定日期查询修订,比较连续且当时已经发布的版本,返回改前、改后、修订号和修改时间。
- 返回标题、正文、截止时间、选做、提交说明、需带物品及更正原因等允许展示的字段;不返回账号信息、任意元数据或完整原始快照。
- 使用
beforeRevision向前分页,每页最多扫描 20 条候选修订,并提供后续游标;没有可展示差异时仍可继续读取后面的页面。 - 首次创建、草稿转发布、定时发布前的修改、撤回记录、已清理正文及仅更正原因变化,不作为可展示的内容更正。
体验与性能优化
- 按需扩展查询:跨日期物品查询通过显式参数启用,未使用参数的旧客户端保留原作业板查询范围;周查询继续采用已有规则。
- 更正记录分页读取:按修订号分批扫描,批量读取对应前一版本,避免一次返回所有历史快照。
- 模板旧客户端兼容:编辑时省略需带物品、提交说明或选做字段,保留服务端已有值;明确发送空字符串时才清除。
- 复用现有发布流程:明日清单、假期汇总、历史作业复用和文字分享由前端组合现有接口实现,不引入另一套发布或权限体系。
Bug 修复
教师确认与模板保存
- 修复当前版本已经确认时,旧版本确认请求被直接当作成功的问题。即使走重复确认分支,也先核验请求版本;不同版本返回 409,同版本重复确认仍可成功。
- 修复模板兼容合并后绕过填空项总数校验的问题。事务内合并旧客户端省略的字段后,重新验证最终完整模板;拒绝无效修改时保留原内容和版本。
- 为模板修改、删除及容量限制增加事务保护,减少多设备同时操作造成的版本覆盖或超出上限。
作业元数据与日期
- 复制为新草稿及大屏整日复制作业时,默认移除来源的携带安排,避免新作业继承旧物品日期;历史恢复仍保留该版本原有携带信息供核对。
- 统一清理沿用的更正原因,仅接受符合条件的本次教师编辑原因,避免来源版本的说明被误认为本次修改理由。
- 严格区分无作业标记与选做、提交说明的适用条件,拒绝含义矛盾的作业元数据。
- 修复无效作业板日期转换时抛出异常的问题,先检查日期有效性,再交由既有参数校验返回错误。
安全与权限保障
- 模板归属隔离:服务端使用当前鉴权账号确定归属,不接受客户端指定其他账号;列表、修改和删除均限制在该账号范围内。
- 更正查询范围:公开查询核验教学空间及有效学期;大屏查询从绑定计算可访问范围,不接受客户端扩大范围。
- 历史内容可见性:当前作业必须已发布、到达发布时间且仍对查询范围可见;前后两个修订也必须共享可见教学空间,避免展示调入该班前的无关历史。
- 最小化返回内容:更正接口只返回允许公开的业务字段,并设置
Cache-Control: no-store。 - 原有发布、修改、恢复及大屏写入继续执行既有权限和版本检查;新增元数据不作为扩大写入权限的依据。
测试与运维改进
- 新增模板字段与填空校验、需带物品、提交说明、选做内容、更正差异及非法日期的后端单元测试。
- 配套真实 PostgreSQL 全链路回归覆盖模板账号隔离、并发容量与版本冲突、旧客户端字段保留及合并后校验。
- 增加延迟旧版本确认、跨日期物品分页、复制与历史恢复、更正可见性、草稿隔离和撤回后拒绝访问等真实接口与浏览器场景。
- 继续使用现有后端验证、数据库测试和前后端组合测试作为部署检查;本次没有修改服务器部署代理协议。
升级与兼容性说明
- 建议与 NPClassworks v1.1.5 配套升级,继续支持
newfires.top与api.newfires.top的分离部署方式。 - 相比 v1.1.0,本次复用已有
AccountPreference和Publication.contentJson,无新增数据库迁移。现有 Docker 启动前执行prisma migrate deploy的流程保持不变,无需手动修改deploy/agent/server.js。 - 建议先更新后端,再更新前端。旧前端不会展示选做、提交说明、需带物品等新增信息;模板与更正回顾需要本版后端接口支持。
- 前端“仅显示教师已确认”和“待处理中心仅展示今日”是显示规则调整。后端保留实际确认状态与完整待处理查询能力,不批量确认或删除旧作业。
- 携带日期到期后由前端从当前清单隐藏,数据及修订历史继续保留。本轮不改变既有历史正文清理策略。
- 更正回顾依赖仍可用的连续修订,已清理正文无法重新生成差异;未返回更正不等同于证明作业从未修改。