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