47 lines
2.3 KiB
Markdown
47 lines
2.3 KiB
Markdown
# world 世界定义与管理模块(W-01 世界管理)
|
||
|
||
## 功能
|
||
- world 表 CRUD(创建/更新/删除/查询)
|
||
- 分页列表查询(sqlPaging + 复合索引 idx_world_list)
|
||
- 创建自动编码(W + 时间戳 + 随机4位,全局唯一,冲突重试 3 次)
|
||
- mode 白名单硬校验(draft/active/paused/archived)与流转规则校验
|
||
- world_mode / world_type 编码字典幂等落库(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'
|
||
- world_type VARCHAR(32)
|
||
- owner_id / org_id VARCHAR(32)
|
||
- created_at / updated_at TIMESTAMP
|
||
- 复合索引 idx_world_list(org_id, mode, created_at)
|
||
|
||
## 安装集成
|
||
1. 模块仓库克隆到宿主应用 pkgs/,`pip install .`
|
||
2. 宿主应用 `app/{app}.py` 引入 `from world.init import load_world` 并在 init() 调用 `load_world()`
|
||
3. 宿主应用定义 `get_module_dbname('world')` 映射到实际库名(禁止模块内硬编码 DBNAME)
|
||
4. `scripts/load_path.py` 注册 RBAC 路径(禁通配符)
|
||
5. 构建:`bash build.sh`(生成 DDL、CRUD UI、链接 wwwroot)
|
||
|
||
## 关键接口(经 load_world() 注册)
|
||
- `create_world(params)` → 自动编码;mode 默认 draft;非法 mode/流转 100% 拦截;编码冲突重试 3 次
|
||
- `update_world(params)` → 部分更新;mode 变更走流转校验;code 变更走全局唯一校验
|
||
- `delete_world(params)` / `get_world(params)`
|
||
- `list_worlds(params)` → 分页 {list, total, page, page_size}
|
||
- `set_world_mode(params)` → 模式切换严格校验(draft→active⇄paused、active/paused→archived、archived→active)
|
||
- `get_world_mode_options()` / `get_world_type_options()` → 下拉数据源 [{value, text}]
|
||
|
||
REST 前缀 `/api/*`: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
|
||
|
||
## 错误与分页结构
|
||
- 错误:`{code, message, field, detail}`
|
||
- 分页:`{list, total, page, page_size}`
|
||
|
||
## 依赖
|
||
sqlor(DBPools/sor.C/U/D/R/sqlPaging/sqlExe)、ahserver(ServerEnv)、appbase(appcodes/appcodes_kv)
|