3.3 KiB
PL API JSON 命名(运输计划模块)
本能力补充 openspec/changes/zkxw-engineering-standards/specs/api-conventions/spec.md 中「JSON 字段命名」要求,专用于 app/api/pl/** 与 web-admin/src/api/pl/**、web-admin/src/views/pl/**。
ADDED Requirements
Requirement: 运输计划 API JSON 字段 camelCase 对齐
运输计划模块(路由前缀 /api/transport/**)的请求体、响应体及 Query 参数中,凡前端 TypeScript 使用 camelCase 的多词字段,后端 Pydantic Schema SHALL 通过 Field(..., alias="camelCase") 声明 JSON 别名,并设置 model_config = {"populate_by_name": True}(或 ConfigDict(populate_by_name=True))。
路由层访问请求体 SHALL 使用 Python snake_case 属性名(如 payload.carrier_name),SHALL NOT 使用 payload.carrierName。
读接口(response_model=...Read)SHALL 为 ORM 列对应的 snake_case 字段配置 alias,使 FastAPI 默认 response_model_by_alias=True 输出 camelCase,与 web-admin/src/api/pl/index.ts 类型定义一致。
Scenario: 承运商新增
- WHEN 前端
POST /api/transport/carrier请求体为{ "carrierName": "某某物流", "contactName": "张三", "status": "1" } - THEN
CarrierCreateSHALL 校验通过(HTTP 非 422) - AND 路由 SHALL 通过
payload.carrier_name写入pl_carrier.carrier_name
Scenario: 计划新增含产品明细
- WHEN 前端
POST /api/transport/plan/请求体含belongsCompany、planType、planDate及products[].productId - THEN
PlanCreate/PlanProductCreateSHALL 校验通过 - AND 响应
PlanRead/PlanProductRead的 JSON 键 SHALL 为planNo、createTime等 camelCase
Scenario: 运输安排
- WHEN 前端
POST /api/transport/order/arrange/{planId}请求体为{ "vehicleId": "...", "driverId": "...", "freightType": "by_weight" } - THEN
TransportArrangeSHALL 校验通过 - AND 路由 SHALL 使用
payload.vehicle_id、payload.driver_id访问字段
Scenario: 列表分页 Query
- WHEN 前端 GET 列表接口 Query 为
page=1&pageSize=20&planType=direct - THEN 路由参数 SHALL 通过
Query(..., alias="pageSize")或 Schema alias 正确解析 - AND SHALL NOT 静默忽略
pageSize导致始终使用默认每页 20 条
Scenario: 仅 snake_case 无 alias 视为缺陷
- WHEN
app/schemas/pl/**中 Write/Read Schema 的多词字段仅有snake_case属性名、无alias - THEN 属于本变更范围内的规范违反;前端发送 camelCase 时将返回 422 Unprocessable Entity
- AND 修复 SHALL 为后端补 alias,SHALL NOT 要求 web-admin 改为 snake_case
Requirement: 运输计划 Schema 变更门禁
修改 app/schemas/pl/** 或新增 PL 写接口时,提交前 SHALL 运行 python backend/scripts/check_pl_json_aliases.py;脚本失败 SHALL 阻塞合并。
Schema 覆盖范围 SHALL 至少包括:
| 路径 | 说明 |
|---|---|
app/schemas/pl/__init__.py |
承运商、车辆、司机 |
app/schemas/pl/plan.py |
计划与产品明细 |
app/schemas/pl/transport.py |
运输、安排、审批 |
app/schemas/pl/freight.py |
运费结算 |
app/schemas/pl/inventory.py |
库存、证件提醒 |
参考实现:app/schemas/db/weighing.py(地磅模块 alias 模式)。