world_sync/skill/SKILL.md

4.5 KiB
Raw Blame History

name description
world_sync W-05 同步管理模块——同步配置(world_sync)、同步任务(world_sync_task)、同步日志(world_sync_log)管理; 同步任务批量事务执行、失败回滚无脏数据; 编码字典 sync_status/sync_type 幂等落库。

world_sync 模块技能文档

模块概述

world_sync 是元景项目 W-05 同步管理模块,提供:

  • 同步配置维护world_sync 表 CRUD同步编码唯一、类型/模式/状态白名单校验)
  • 同步任务执行create_sync_task + execute_sync_task批量事务 + 失败回滚无脏数据)
  • 同步日志查询get_sync_log 分页 {list,total}
  • 编码字典sync_status / sync_type 经 init/data.json 幂等落库 appcodes/appcodes_kv

架构与集成

  • Python 包 world_sync/,通过 load_world_sync() 注册到 ServerEnv宿主应用调用
  • 宿主应用 app/{app}.py 定义 get_module_dbname('world_sync') 并挂 ServerEnv模块内禁止硬编码库名
  • 前端 wwwroot/ 自动路由 /world_sync/{file}api/ 下 .dspy 为薄封装,业务在 init.py 注册函数。
  • 宿主应用 spec.json 的 generated_modules 必须包含 "world_sync",并在 init() 中 load_world_sync() 挂载。

数据模型models/*.json 四段式)

说明 主键 关键字段
world_sync 同步配置 id str(32) sync_code(唯一 str64)、sync_name、sync_type(str32)、mode(str16)、status(str32)、org_id
world_sync_task 同步任务 id str(32) sync_id、sync_code、sync_type、status、batch_no、total/success/fail_count、start/end_time、error_msg
world_sync_log 同步日志 id str(32) task_id、sync_id、sync_type、status、direction、target_table、target_key、batch_no、payload、result、error_msg
  • 主键 id 一律 str(32),由 appPublic.uniqueID.getID() 生成(禁止 uuid4
  • status 字段引用 appcodes_kvcondparentid='sync_status' / parentid='sync_type'(禁止 id=)。

关键接口REST 前缀 /api/*,错误结构 {code,message,field,detail},分页 {list,total}

方法/路径 说明
POST /world_sync/api/world_sync_create.dspy 新增同步配置(前置校验,非法输入不落库)
POST /world_sync/api/world_sync_update.dspy 更新同步配置
POST /world_sync/api/world_sync_delete.dspy 删除同步配置(级联任务/日志)
GET /world_sync/api/world_sync_list.dspy 配置分页列表 {list,total}
POST /world_sync/api/world_sync_task_create.dspy 创建同步任务
POST /world_sync/api/world_sync_task_execute.dspy 执行同步任务batch 批量事务,失败回滚)
GET /world_sync/api/world_sync_task_list.dspy 任务分页列表 {list,total}
GET /world_sync/api/world_sync_log_list.dspy 日志分页查询 {list,total}
GET /world_sync/api/world_sync_dict.dspy?type=sync_status sync_type

成功:{"success":true,"code":0,"message":"ok","data":{...}} 失败:{"success":false,"code":400|404|409|500,"message":"...","field":"...","detail":"..."}

模块陷阱

  1. 三处同步注册:增删函数需同步修改 world_sync/world_sync.py__init__.py 导入、init.pyenv.xxx = xxx
  2. dspy 禁 import.dspy 无 importjson/debug/format_exc 预置),业务全部走 await xxx(request, params_kw) 委托。
  3. sor 接口:只用 sor.C/U/R/D/I/sqlExesor.U('t', data) 只收 2 参id 在 data 内;sor.I 只收 1 参(元数据)。
  4. 事务回滚execute_sync_task 中批量写入任一条失败 → sor.rollback() 整体回滚,任务标记 failed无脏数据校验失败batch 非数组/超 5000/任务已结束/配置停用)直接拦截不写库。
  5. 时间戳sqlor 不自动填充 created_at必须 curDateString() 显式赋值,否则 sor.C 静默丢记录。
  6. 用户上下文.py 内取用户用 request._run_nsenv = request._run_ns; await env.get_user()ServerEnv() 单例无 per-request 用户。
  7. 库名:取库名一律 ServerEnv().get_module_dbname('world_sync'),禁止 DBNAME = 'xxx'
  8. task/log 只读json/ 中 task、log 的 editable 指向 world_sync_write_guard.dspy拒绝直接增删改数据只能由 execute_sync_task 生成。

依赖

  • 基础包sqlor、ahserver(ServerEnv)、appPublic(uniqueID/log/timeUtils)
  • 编码字典依赖宿主应用 appbase 的 appcodes/appcodes_kv 表
  • 宿主应用必须定义 get_module_dbname 并 load_world_sync()