Repository navigation
Conversation
|
I think this one can be closed rather than merged — the bug it fixes no longer exists on
So the "run-once replaces the existing cron job" behaviour this PR targets is gone, and the accompanying test target ( Happy to close it if you agree. |
72bafff to
66e48ff
Compare
sys_user 等表的 remark 列为 varchar(500),sys_notice 为 varchar(255),但对应的 pydantic 模型只用 Field 声明了类型,没有任何长度约束,而同一模型里 user_name、 nick_name、email、phonenumber 等都已有 @SiZe 装饰器。结果是超过列长的备注会一路 走到数据库层:严格模式下报错,非严格模式下被静默截断,前端拿不到任何提示。 为 9 个带 remark 的业务模型补上与列长一致的 @SiZe 校验,并加入各自的 validate_fields()(服务层调用的入口): - UserModel、RoleModel、PostModel、MenuModel、ConfigModel、JobModel 上限 500 - DictTypeModel、DictDataModel 上限 500 - NoticeModel 上限 255(sys_notice.remark 实际是 varchar(255)) 新增 tests/module_admin/entity/test_vo_remark_length.py:对每个模型断言 列长通过、列长 +1 被拒、None 通过,并覆盖 validate_fields() 入口。 验证: - 新测试在修复前 27 项失败、修复后 36 项通过(red -> green) - tests/module_admin 全量:修复前后失败/错误集合完全一致 (基线 8 failed / 199 passed / 1 skipped / 10 errors; 修复后 8 failed / 235 passed / 1 skipped / 10 errors,多出的 36 项即新测试) 这些失败与错误是仓库在本机环境下的既有问题(缺 Redis/PostgreSQL 等),与本次改动无关。
|
这个 PR 我重新定位了,说明一下原因和现在的内容。 为什么改内容原内容(修复 #31 的 run-once 调度问题)已经被 #127 的调度器重构取代了。核实结果:
所以继续推那份 diff 没有意义。我没有关掉这个 PR 重开一个,而是把分支换成了下面这个当前仍然存在的缺陷,复用原来的 PR 编号,免得给你的 PR 列表再添一条。 现在的内容
改动是给 9 个带 验证
如果你更希望这个 PR 保持原来的主题、或者直接关掉它,告诉我一声,我按你的意思处理。 |
问题
sys_user等业务表的remark列是varchar(500),sys_notice.remark是varchar(255),但对应的 pydantic 模型只用Field声明了类型,没有任何长度约束。同一个模型里user_name、nick_name、email、phonenumber都已用@Size装饰器限长,只有remark漏了。后果:超过列长的备注会一路走到数据库层——严格模式下直接报错,非严格模式(如默认的 MySQL)下被静默截断,前端拿不到任何提示。这正是 issue #50 反馈的问题。
改动
为 9 个带
remark的业务模型补上与列长一致的@Size校验,并加入各自的validate_fields()(服务层实际调用的校验入口):UserModel、RoleModel、PostModel、MenuModel、ConfigModel、JobModelvarchar(500)DictTypeModel、DictDataModelsys_dict_type/sys_dict_data均为varchar(500)NoticeModelsys_notice.remark实际是varchar(255)sys_user之外的表也一起补,是因为这是同一个缺陷模式,而 issue #50 标题里正是"字段缺少长度校验";只补用户表会留下同样的洞。各模型上限都取自已发布的建表 SQL,未凭猜测取值。验证
新增
tests/module_admin/entity/test_vo_remark_length.py,对 9 个模型逐一断言:列长通过、列长 +1 被拒、None通过,并覆盖validate_fields()入口。pytest tests/module_admin修复前后失败集合完全一致说明
本 PR 此前的内容是 "isolate run-once scheduler jobs"(修复 #31)。该修复已被 #127 的调度器重构取代——
SchedulerUtil与get_scheduler.py已不存在,run-once 现在通过JobRuntimeDao.create_request+SchedulerJobs.execute_once(id=f'_manual:{execution_id}'独立任务)实现,不再替换既有 cron 任务,原来的 bug 已不复存在。因此我把这个 PR 重新定位到上面这个仍然存在的缺陷上,复用了原来的分支与 PR 编号,避免再开一个新 PR。相关讨论见下方评论。
Closes #50