Files
zkxw/backend/AGENTS.md
T
zlwu b220298f89 chore: 清理历史资料并规范工程目录与开发规则
为减少仓库噪声和重复规则,整理当前开发入口并移除已废弃资料。

- 精简根 AGENTS,补充四个应用规则与 README,统一规范入口
- 归整部署文件、SOP 原稿和参考资源,修正迁移后的脚本路径
- 取消虚拟环境、工具状态、业务导出及备份的跟踪,本机所需原件保留
- 移除停用的 graphify 配置、脚本与产物
- 删除历史业务文档、执行计划、OpenSpec 业务变更和移动 UI 原型
- 清理失效引用,历史细胞产品导入改为必须显式指定 --file

验证:git diff --cached --check、OpenSpec 严格校验、导入参数隔离检查 3/3 通过;
迁移文件完整性和现行链接已核对。未执行部署、业务数据导入或服务启停。
2026-10-29 23:08:29 +08:00

4.4 KiB
Raw Blame History

后端开发约束

适用 backend/,与根规则同时生效。环境与命令见 README。

分层与入口

  • Python 3.9、FastAPI、SQLAlchemy、Pydantic v2;配置通过 app/core/config.py 的 pydantic-settings 与环境文件读取。
  • 路由保持薄层;业务逻辑在 app/services/,持久化在 app/crud/,模型与 Schema 在 app/models/、app/schemas/;既有 API 内联 Schema 按周边方式维护。
  • 新路由模块必须同时在 app/api/__init__.py 导出并在 app/main.py 注册;保持鉴权、API 加密和请求审计。
  • API 总前缀由 API_V1_PREFIX 控制,默认 /api;实际模块主要使用 /web/...、/mini/...,以路由定义为准。
  • 列表无自定义排序时使用 create_time DESC。

数据库与权限

  • MySQL 5.7、utf8mb4。主键 id VARCHAR(64) NOT NULL,值为 UUID。
  • 字段顺序:id → 业务字段 → tenant_no、order_num、remark、create_by、create_dept_id、create_time、update_by、update_time、del_flag;del_flag 默认 0。
  • 查询按租户与数据权限过滤,默认排除 del_flag=1;写入租户从当前用户取得。禁止业务物理删除。
  • 数据范围支持全部、本部门、本部门及下级、本人、自定义;自定义使用 sys_role_data_scope_detail.scope_type(dept/user)和 scope_value。
  • 权限取有效角色并集,包括现有职位继承角色链;复用 app/services/web_auth_roles.py、app/core/data_scope.py,不要另造单角色判断。
  • SQL 变更维护在 ../docs/sql/,区分结构迁移、种子数据与一次性数据修复;有写库行为的 scripts/ 不是普通检查命令。

子行与样本关联

  • 通过 app/crud/child_row_sync.py 的 sync_child_rows 按行保存,已有行保持原 ID。
  • 请求无 ID 时,用稳定业务键(样本编码、物料编码、条码、组分 ID 等)匹配尚未占用的有效行,匹配不到才生成 UUID。
  • 拒绝其他父记录或其他租户的 ID。只软删除用户移除的行;删除父记录可级联软删除,复制或克隆父记录必须为子行生成新 ID。
  • 禁止先把全部子行软删除再插入,否则会破坏 production_step_output_id、protocol_sample_id、donation_sample_id 等外部引用。
  • 细胞存储样本与接收、质检等下游匹配使用 tenant_no + sample_code,不使用 collection_protocol_id 或 protocol_sample_id 作为跨表匹配键。

字段一致性

  • _row_to_dict 是实体可读字段基准;CreateBody、UpdateBody、前端 formData 必须包含其中所有可写字段。
  • 排除 id、tenantNo、createTime、updateTime、stockQty 等服务端或计算字段;租户不能成为客户端可写字段。
  • 逐层核对 Schema → API Handler → CRUD 参数 → ORM 赋值;字段映射不只检查返回值。
  • 修改后从仓库根目录运行 python backend/scripts/check_field_consistency.py,并按指南核对受影响实体。检查器只覆盖注册实体,不能代替新增实体检查。
  • 当前检查器有两个前端路径失效,详情见字段一致性指南。失败需区分既有问题和新改动,不能隐藏结果。

工作流与 OA

  • app/services/workflow_engine.py 与 app/services/oa_engine.py 均有实现;不得将其描述为尚未实现或当作重复文件删除。
  • 流程由后端独立、可配置地执行;支持开始、结束、审批人、多条件分支,扩展不得破坏已发布定义。
  • 审批人策略遵循指定用户、角色或受控 SQL 解析,以及任一通过/全员通过的正式要求;不能让前端独占流程状态机。
  • 运行实例绑定发起版本,新发布版本只影响新实例;维护待办、已办中心的权限与状态一致性。
  • 具体要求见 workflow-conventions,不同引擎的能力差异应单独核实。

验证与工具

  • 在隔离数据环境执行受影响测试,不运行清库、导入、重置密码等脚本作为通用验收。
  • 环境与文档清理不重启服务;影响范围通过源码检索和测试核对。
  • requirements.txt 保存运行依赖,venv/、.venv/ 是本地环境,不能纳入 Git。测试工具安装在开发环境,不为清理改动覆盖现有环境。