v1.1.0
NPClassworksKV v1.1.0 · Ikuyo(喜多郁代)
版本概述
v1.1.0 是 NPClassworksKV 配套 NPClassworks v1.1.0 的功能与可靠性更新,版本代号为 Ikuyo(喜多郁代)。
本次更新提供一周作业查询、次要通知和版本化班级名单管理,重点完善通知认证、账号会话撤销、授课范围、发布分页与实时事件,并将真实前后端组合验证纳入后端部署流程。
新增功能
一周作业与无作业标记支持
- 公开及大屏 feed 接口支持
weekStart和weekView=board|due,按作业板日期或截止日期查询一周内的已发布作业。 - 截止日期按北京时间计算,支持查询在更早日期布置、但在所选周截止的作业。
- 校验并支持前端“今日无作业”标记的结构与内容,沿用现有发布、草稿、定时、修改、撤回和修订流程。
- 周查询继续执行班级范围、发布状态和学期/教学空间有效性检查,不把草稿、未到发布时间或已撤回内容混入结果。
次要通知与弹窗规则
- 通知优先级增加
MINOR(次要),为前端 Teams 默认提示音和可选弹窗提供等级信息。 - 次要通知支持保存弹窗选项;普通、重要、紧急通知执行必须弹窗的规则,并在服务端验证,避免仅依赖前端限制。
- 发布、编辑、复制与历史恢复中的优先级及通知元数据采用一致的校验,减少不同操作产生不一致通知状态。
行政班名单管理
- 新增学校管理员读取和保存行政班名单的接口,与大屏共用班级名单服务。
- 保存使用
expectedRevision核验名单版本,避免管理员和多台大屏互相覆盖更改。 - 校验学生身份、所属班级、重复学号、姓名及名单人数,移出学生采用停用,保留历史考勤。
- 名单写入和完整前后名单审计在同一事务提交;提交后通过
classroom.roster.updated通知相关大屏,事件不广播学生姓名。
体验与性能优化
- 发布 feed 游标分页:支持稳定游标及分页元数据,前端可读取完整列表,减少固定数量截断和并发翻页造成的问题。
- 运行指标对应实际请求:增加 HTTP 请求总数、失败数、请求耗时和当前 Socket.IO 连接数;使用固定路由模板作为标签,不为每次采样扫描业务表。
- 完整刷新投放范围:历史恢复后向受影响的工作区发送更新,覆盖目标变化涉及的旧范围与新范围。
- 名单一致性:管理员和大屏保存都在事务中锁定班级、比较版本、写入学生与审计,冲突时拒绝覆盖并返回明确状态。
Bug 修复
通知发布与生命周期
- 修复账号发布的通知被错误标为“待教师确认”的问题。通知不走学科作业的教师确认流程,发布后的认证信息与实际账号操作保持一致。
- 修复通知编辑、定时发布内容更新、复制和恢复路径中的认证归属处理,避免保留与当前操作不一致的认证信息。
- 增加针对现存错误通知状态的数据修复,依据当前账号修订恢复认证字段,不改写正文、修订号或较早的历史记录。
- 修复复制通知继承原通知过期时间的问题,新通知按自身发布时间开始新的有效期。
- 完善通知过期、撤回及版本变化时的可见性和回执校验,拒绝把旧版本状态当成当前版本确认。
作业范围与历史恢复
- 进一步区分账号对发布内容的编辑权限和教师确认权限,避免较宽的管理权限被误当作所有学科的确认资格。
- 对发布目标及授课范围进行一致验证,拒绝跨学校、越权目标或已停用教学空间的写入。
- 修复历史恢复后部分旧目标工作区未收到实时更新的问题,减少客户端继续显示已移出范围的内容。
- 完善日期窗口、发布状态、分页边界及游标参数校验,保持公开列表、大屏列表和实际发布规则一致。
学校结构与班级名单
- 加强学校内教学空间身份冲突和已停用走班教学班的处理,避免重复或失效空间继续成为有效操作目标。
- 防止名单保存引用其他班级的学生,或通过无版本请求覆盖新版名单。
- 并发保存名单时只接受匹配当前版本的请求;版本冲突不执行部分写入,保留已保存学生与考勤关系。
安全与权限修复
- 账号会话撤销即时核验:访问令牌校验结合持久化账号会话状态,关闭单次会话后,旧访问令牌不能继续借刷新或续签路径使用该会话。
- 大屏凭据边界:继续在实际写入事务中检查绑定、凭据和授权,完善账号会话撤销及学校角色变化后的拒绝路径。
- 确认范围校验:通知与作业使用各自的认证规则,教师确认作业时依据实际授课权限,不直接沿用宽泛的编辑授权。
- 名单管理授权:服务端核验学校管理身份、行政班归属和名单中每个学生的身份;校验与写入共同置于事务保护下。
测试与运维改进
- 后端生产部署除普通测试和真实 PostgreSQL 测试外,还要求真实前后端全链路检查成功。
- 全链路验证使用本次触发的后端提交,配合明确记录版本的前端,输出两仓提交信息,便于追踪被验证的组合。
- 增加持久化账号会话、通知认证、次要通知、周查询、feed 分页、名单权限与并发保存的回归测试。
- 扩充真实 HTTP、Socket.IO 和隔离 PostgreSQL 测试,减少仅靠源码匹配或内存 API 得出功能正确结论的情况。
- 修正开发入口路径,使用 Node 自带 watch 与 env-file 加载方式,移除对未声明 nodemon 及平台专用环境变量写法的依赖。
- 完善依赖安装、容器构建与部署验证流程;保留现有签名部署请求和服务器代理。
升级与兼容性说明
- 建议与 NPClassworks v1.1.0 · Ikuyo(喜多郁代) 配套升级,继续支持
newfires.top与api.newfires.top的分离部署方式。 - 相比 1.0.1 文档所描述的维护版本,本轮包含以下新增迁移:
20260908000000_minor_notice_priority:增加MINOR通知优先级。20260909000000_account_notice_certification:修复符合条件的现存账号通知及其当前修订认证字段。
- 使用仓库现有 Docker 自动部署流程时,启动命令先运行
prisma migrate deploy;已应用的迁移不会重复执行。此前已持续部署相关提交的服务器,可能已经应用这两项迁移,本次修改版本号不新增迁移。 - 无需手动修改
deploy/agent/server.js。 自定义非 Docker 启动方式仍需按原有流程先应用尚未执行的数据库迁移。 - 名单管理沿用现有学生数据表,不新增名单版本字段。旧版大屏可继续读取名单,但缺少
expectedRevision的保存返回 428;版本不一致返回 409。请更新前端并重新读取名单后再编辑。 - 次要通知需要新版前端正确显示和播放提示音。已有旧大屏页面不会因后端升级自动获得新等级处理逻辑,应在保存当前输入后更新应用。
- 本轮统一将后端 package.json 从此前遗留的
1.0.0更新为1.1.0;/check和/ready的版本及代号随同一配置返回。历史文档中的 1.0.1 仍代表上一轮维护更新,不因旧包版本号遗漏而失效。 - 新指标中的 Socket.IO 连接数不是独立设备数或已鉴权大屏数;失败计数包含业务冲突等 4xx 响应,使用时需结合路由与状态码判断。