- 审批:删 _flush_order 撞键内部重试(rollback 会回掉同事务业务行造成 静默丢数据,异常改由 create 外层重试整体重来/update 路径审计收敛); act() 出参固化前置到 commit 之前(commit 后查询失败会把已通过的审批 记成失败审计);驳回/撤回清空方案生效行(防被否决方案进 M3 快照); keyword 改 contains(autoescape=True) 对齐全库转义口径;撤单抽 withdraw_pending_orders 供编辑清空方案时显式调用 - 业务:删业务遇在途审批单禁删 400、终态审批单随 _hard_delete 清理; 编辑清空方案同步撤回在途单;历史离职参与人编辑放行(冗余姓名固化 语义,仅新增参与人做在职校验) - 迁移:business_secondary_allocations 补 uk(business_id, personnel_id) (模型/迁移 py/导出 SQL/init-dev 四方同步,开发库往返重放验证) - 设置:upload_logo 改同步 def(阻塞操作不卡事件循环)+ file.size 先拦; company_name schema 剥空白防全空白入库;logo 旧文件清理移到 commit 成功后(防库指旧路径而文件已删断链);uploadLogo 走 request() 解包 (原直发 service.post 不解包信封,logoUrl 会被置 undefined) - 备份:restore_drill --drop-exec 先清全部历史 drill 库再演练并即删本轮 (原语义永远删错对象,每轮净增一份整库拷贝) - 测试:conftest 清理补 system_settings 种子行与 uploads/logo 文件; 新增 5 例(驳回清方案/清空撤单/在途禁删终态随删/离职放行/BOOL 边界); 全量回归 701 passed - 遗留 2 项记 AI_CONTEXT(方案版本承载、审批单快照,依赖 ④ 分摊语义) Co-Authored-By: Claude Code <noreply@anthropic.com>
35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
"""系统设置(公司信息)请求/响应模型。
|
||
|
||
`SettingPublicOut` 与 `SettingOut` **刻意不共用**:public 端点无鉴权,
|
||
响应字段必须白名单显式列出——将来往 SettingOut 加敏感字段时不会
|
||
顺着复用链泄漏到匿名端点。
|
||
"""
|
||
|
||
from pydantic import BaseModel, ConfigDict, Field
|
||
|
||
|
||
class SettingOut(BaseModel):
|
||
"""公司信息(管理端)。"""
|
||
|
||
company_name: str
|
||
logo_url: str | None = None
|
||
|
||
|
||
class SettingPublicOut(BaseModel):
|
||
"""公司信息(匿名端点白名单):登录页展示所需的两个字段。"""
|
||
|
||
company_name: str
|
||
logo_url: str | None = None
|
||
|
||
|
||
class SettingUpdateIn(BaseModel):
|
||
"""公司信息更新。
|
||
|
||
str_strip_whitespace:全空白名称先剥再校验——否则 `" "` 过 min_length=1
|
||
后由服务层 strip 成空串入库(200 成功但 public 端点返回空公司名)。
|
||
"""
|
||
|
||
model_config = ConfigDict(str_strip_whitespace=True)
|
||
|
||
company_name: str = Field(min_length=1, max_length=64, description="公司名称")
|