entity/docs/work-log-2026-07-19.md

2.8 KiB
Raw Blame History

entity 模块工作日志W-03 实体管理)

  • 日期2026-07-19元景项目-初始迭代)
  • 范围W-03 实体管理功能点——entity.entity / entity_import 表 CRUD、列表查询、实体文件导入scene_id→scene.id 逻辑关联codes 段entity_type 字典幂等落库;导入事务批量+失败回滚REST 统一前缀 /api/*;错误结构 {code,message,field,detail};分页 {list,total};非法输入 100% 拦截。

交付内容

  • modules/entity/entity/init.py + entity/__init__.py:后端全部 async 函数create/update/delete/get/list/import/guard/rejectload_entity() 注册。
  • modules/entity/models/entity / entity_import / entity_import_log 三张表定义(四段式 summary/fields/indexes/codes
  • modules/entity/json/entity / entity_import 两个 CRUD 定义。
  • modules/entity/wwwroot/index.ui入口导航、import_page.ui导入页、api/*.dspy11 个接口、i18n/zh-CN.json + en-US.json。
  • modules/entity/init/data.jsonentity_type / common_status / import_status 三组字典Format B appcodes 幂等落库)。
  • modules/entity/scripts/load_path.pyRBAC 显式路径注册(无通配符)。
  • modules/entity/skill/SKILL.md:模块技能文档。
  • modules/entity/docs/i18n.mdi18n 提取说明。

关键决策

  1. 包目录双层结构modules/entity/entity/Python 包),根 __init__.py 仅为仓库标记。符合「包目录=模块名」规范。
  2. 导入两阶段:先全量校验(只读,不写任何数据)→ 再批量插入(同批 import_id 标记);插入异常按 import_id 补偿 DELETE 回滚,保证失败无脏数据。校验失败只写失败批次 + 逐行日志。
  3. entity_import 只读:批次/明细表系统生成new/update/delete 指向 entity_import_reject.dspy 统一拒绝。
  4. 逻辑关联不加外键scene_id/world_id 在 models/entity.json codes 段声明table=scene/world不建物理外键。
  5. 非法输入 100% 拦截:编码必填/唯一/长度、类型字典白名单、状态白名单、场景/世界存在性均在校验层拦截,不落库。
  6. i18n:全部新文案提取到 wwwroot/i18n/{zh-CN,en-US}.jsonkey 前缀 entity.,错误码 entity.code.* 对应后端 {code,...}。

验证情况

  • 环境受限(本地无 Sage/数据库服务),无法起服务做端到端 curl。已做静态验证见交付说明中 py_compile 与禁项审计输出)。
  • 部署后需在宿主应用:load_entity() 挂载、get_module_dbname('entity') 注册、执行 scripts/load_path.py 注册 RBAC、build.sh 链接 wwwroot 并生成 CRUD 页面、init/data.json 落库字典。

当前状态

  • 分支/提交:见 git 本地提交记录(交付说明)。
  • 遗留:运行期集成验证由 deploy_test 在测试环境执行。