scene/docs/work-log-2026-07-19.md
2026-08-29 12:44:22 +08:00

3.4 KiB
Raw Blame History

scene 模块开发工作日志

日期:2026-07-19 模块:scene(W-02 场景管理) 任务:new_dev(新开发),迭代「元景项目-初始迭代」

范围 / 背景

按 design 交付 modules/scene.md 与 design/scene.md 实现 W-02 场景管理:

  • scene.scene / scene_import 表 CRUD、列表查询(分页 {list,total})
  • 场景导入(api/scene_import.dspy 文件导入)
  • scene.world_id → world.id 逻辑关联(codes 段,不加外键)
  • 导入事务批量 + 失败回滚无脏数据
  • REST 统一前缀 /api/*,错误结构 {code,message,field,detail}
  • 非法输入 100% 拦截不落库

交付清单

文件 说明
models/scene.json scene 表定义(id PK、idx_scene_code 唯一、idx_scene_world;codes 段 world/appcodes)
models/scene_import.json scene_import 表定义(只读导入记录)
json/scene.json scene CRUD 定义(editable 顶部 new/update/delete_data_url → 自定义 api/*.dspy)
json/scene_import.json scene_import 只读列表定义
init/data.json appcodes 种子:scene_type / scene_status / import_status
scene/init.py 全部业务函数:list/get/create/update/delete/import_scenes/parse_scene_file/下拉
scene/init.py 包导出(与 init.py、load_scene 三处同步注册)
wwwroot/api/*.dspy 9 个 REST 接口(/scene/api/*.dspy)
wwwroot/index.ui 场景管理入口(列表/导入/导入记录三卡片)
wwwroot/import_page.ui 导入页(Form:world_id + file)
scripts/load_path.py RBAC 显式路径注册(无通配符)
pyproject.toml / README.md / .gitignore / skill/SKILL.md 工程化配套

关键技术决策

  1. world_id 逻辑关联:models codes 段声明 world_id→world(id/name) 渲染下拉,不加物理外键;create/update/import 在 Python 层显式校验 world 存在(_world_exists),非法 world_id 100% 拦截。
  2. 导入事务回滚:import_scenes 先对全部行做字段校验(name/code/world_id 必填、长度上限、文件内 code 去重),再在一个 async with sqlorContext 内逐条 sor.C;任一条异常 → 整个 context 回滚,仅写一条 status=2 的 scene_import 失败记录。无脏数据。
  3. 分页 {list,total}:用 sor.sqlPaging(sql, {page, rows, ...}),支持白名单 sort/order(防注入),rows 上限 200。
  4. 错误结构统一:{code, message, field, detail};code 枚举见 SKILL.md。
  5. REST 统一前缀:所有接口放 wwwroot/api/*.dspy,宿主挂载后路径为 /scene/api/*.dspy;返回 {status:'ok'|'error', data}。
  6. 三处同步注册:scene/init.py 导出 ← scene/init.py 实现 ← load_scene() env.xxx=xxx;.dspy 无 import 直接调用全局函数。

验证情况(环境受限)

  • 本工作空间无运行时环境(无 MySQL/ahserver/宿主应用),无法启动服务 curl 实测。
  • 已做静态自检:模型 JSON 四段式(summary/fields/indexes/codes);CRUD JSON 有 tblname + params.editable + 顶部 new/update/delete_data_url;dspy 无 import/print/uuid,均显式 return;init.py 用 sor.C/U/R/D/sqlPaging 标准 API(无编造 save/list/insert);未硬编码 DBNAME(全部 get_module_dbname)。
  • 待部署环境验证项:pip install .、json2ddl 建表、xls2ui 生成 CRUD UI、RBAC 注册、curl 各 /scene/api/*.dspy。

当前状态

  • 模块仓库 modules/scene/,未提交(交付后由 PM 审核通过统一 git 提交)。