3.1 KiB
3.1 KiB
| name | description |
|---|---|
| world | 世界定义与管理模块(W-01 世界管理)——world 表 CRUD、列表查询(sqlPaging+复合索引)、创建自动编码、mode 白名单硬校验与流转规则校验、world_mode 编码字典幂等落库。通过 load_world() 挂载。 |
world 模块技能文档
概述
世界定义与管理(平台入口域根模块)。提供 world 表 CRUD、分页列表查询、创建自动编码、 世界模式(mode)白名单硬校验与流转规则校验。依赖 sqlor / ahserver / appbase(编码字典 appcodes/appcodes_kv)。
数据模型
表 world(models/world.json 四段式 summary/fields/indexes/codes):
- id VARCHAR(32) PK(str 32,getID() 生成,禁 uuid)
- code VARCHAR(64) 唯一(唯一索引 idx_world_code + 应用层前置校验 + 冲突重试)
- name VARCHAR(255) NOT NULL
- description TEXT
- mode VARCHAR(32) NOT NULL DEFAULT 'draft'(白名单 draft/active/paused/archived)
- world_type VARCHAR(32)(world_type 编码字典)
- owner_id / org_id VARCHAR(32)
- created_at / updated_at TIMESTAMP
- 复合索引 idx_world_list(org_id, mode, created_at) 支撑列表查询
编码字典:init/data.json 幂等落库 world_mode(draft=草稿/active=运行中/paused=已暂停/archived=已归档)
与 world_type(game/simulation/education/business/social),appcodes + appcodes_kv 两表同插。
关键接口(经 load_world() 注册到 ServerEnv)
create_world(params)→ 自动编码 W+时间戳+随机4位;mode 默认 draft;非法 mode/流转 100% 拦截不落库;编码唯一冲突重试 3 次update_world(params)→ 部分更新;mode 变更走流转校验;code 变更走全局唯一校验delete_world(params)/get_world(params)list_worlds(params)→ 分页 {list, total, page, page_size};count 与数据查询分离 + 显式列清单(排除 TEXT),P95 达标set_world_mode(params)→ 模式切换严格校验(draft→active⇄paused、active/paused→archived、archived→active)
REST 前缀 /api/*(wwwroot/api/*.dspy):
- create_world.dspy / world_update.dspy / world_delete.dspy / get_world.dspy / list_worlds.dspy / set_world_mode.dspy
- get_search_status.dspy / get_search_world_type.dspy(下拉数据源,返回 [{value,text}],首项"全部")
统一错误结构:{code, message, field, detail};分页结构:{list, total}。
陷阱
- mode 硬校验:非法枚举一律返回 INVALID_MODE,绝不落库;流转规则见 MODE_TRANSITIONS
- 编码唯一:唯一索引兜底 + 前置校验 + Duplicate key 冲突重试(自动编码场景)
- 列表查询 LIMIT/OFFSET 用整数内联(sqlPaging ns.page/ns.rows),禁止
${param}$生成引号字符串 - 所有 .dspy 无 import(json/exception/format_exc/get_module_dbname/DBPools 为预载全局)
- 取库名用 get_module_dbname('world'),禁止硬编码 DBNAME
- 根目录不放 init.py;包目录为 world/world/;三处同步注册(world.py / init.py / init.py)
依赖
- sqlor(DBPools/sqlExe/sor.C/U/D/R/sqlPaging)
- ahserver(ServerEnv、get_module_dbname)
- appbase(appcodes/appcodes_kv 编码字典)