refactor: 优化API路由和响应模型 feat(admin): 添加App用户管理接口 feat(sms): 实现阿里云短信服务集成 feat(email): 添加SMTP邮件发送功能 feat(upload): 支持文件上传接口 feat(rate-limiter): 实现手机号限流器 fix: 修复计算步骤入库问题 docs: 更新API文档和测试计划 chore: 更新依赖和配置
1.7 KiB
1.7 KiB
问题
- 计算步骤创建时报 Pydantic 校验错误:
step_order期望整型,但代码使用层级小数(如 2.1、2.11)。这不是计算公式问题,而是“类型不匹配”导致步骤未入库。
修复原则
- 不改变任何计算公式或数值流程,仅调整“步骤顺序”的存储与校验类型,使其能接受层级小数。
具体改动
- 模型字段修改(不涉公式):
app/models/valuation.py中ValuationCalculationStep.step_order: IntField → DecimalField(max_digits=8, decimal_places=3);保留ordering=["step_order"],确保排序正确。
- Schema 修改(不涉公式):
ValuationCalculationStepCreate.step_order: int → Decimal,添加前置校验,支持 int/float/str 自动转换为 Decimal;ValuationCalculationStepOut同步为 Decimal。- 列表与详情端点已使用
model_dump_json()再json.loads(),Decimal 会被正确序列化为 JSON 数字,无需改动。
- 代码调用无需改(不涉公式):
- 由于 Schema 接受 float 并转换为 Decimal,现有调用处传入
2.1/2.11/...不需改。
- 迁移与验证
- 启动时执行 Aerich 迁移更新列类型(项目已有初始化流程)。
- 跑脚本观测:
calcstep.create不再报错;calcstep.list数量 > 0;后台“估值计算步骤”返回完整数组。
影响范围与安全性
- 仅变更“步骤顺序”的字段类型与 Schema 校验,不触及任何计算逻辑或公式。
- 排序按照 Decimal 正常工作,层级表达(2.11 < 2.2)保留。
——确认后,我将按以上方案修改模型与 Schema,并执行验证,保证不改变计算逻辑,仅解决类型不匹配问题。