- 范围:全仓除已完成的 game-cloud/game-admin(及排除区);91 文件 - cn.iocoder.yudao→com.wanxiang.huijing / cn.wanxiang.game→com.wanxiang.huijing.game / cn.iocoder.cloud→com.wanxiang / Yudao*→Huijing* / bare yudao→huijing - 含 contracts/api-schemas(apiInterface FQCN)、docs/architecture+agent-specs(含中文名,git ls-files -z 修复)、AGENTS.md/CLAUDE.md 等根文档 - 保留不动:上游归属 URL(gitee/github yudaocode·YunaiV,改则断链+违反署名)、game-cloud Flyway 迁移注释(保 checksum)、lockfile(装包重生) - 纯文档/字符串,零构建影响(game-cloud/game-admin 字节码未动) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
93 lines
9.9 KiB
SQL
93 lines
9.9 KiB
SQL
-- =============================================================================
|
||
-- 契约 #2 DB 迁移 | 模块:studio(game-module-studio,Wave3 创作主链路最小版)| owner:studio 路
|
||
-- 文件:V8.0.0__create_game_studio.sql(Flyway,只新增;已合入禁止修改,回滚写新补偿迁移 V8.0.1 DROP TABLE)
|
||
-- 内容:studio 模块核心表 —— 创作会话 game_studio_session + 创作任务链 game_studio_taskchain + 资产槽位 game_studio_asset
|
||
-- 职责(架构 Doc B §71-76):有状态创作工作台后端。编排「建草稿(委托 project createProject)→一句话生成(委托 aigc)
|
||
-- →进度轮询→重生成→模板应用」。不跑 LLM(委托 aigc)、不持久化项目版本(交 project)、不做锁风裁决(调 compliance)。
|
||
-- 边界纪律:
|
||
-- - 项目/版本权威归 project(game_project / game_version);studio 仅持 game_id/version_id 引用,不在本模块建版本表。
|
||
-- - 生成任务权威归 aigc(game_aigc_task);studio 任务链仅持 aigc_task_id 引用 + 自身链态,不在本模块重建生成状态机。
|
||
-- - attachments 本波仅持久化(R7),不透传 aigc(aigc reqDTO 无 attachments 字段)。
|
||
-- - MVP 进度推送走轮询(D4),非 MQ/SSE。
|
||
-- 约定:InnoDB + utf8mb4;显式列;含 Huijing 审计列 creator/create_time/updater/update_time/deleted + tenant_id;
|
||
-- 状态机用 tinyint,非法流转由 Service 校验,DO 层不承载;中文列注释;关键查询建索引、禁裸 select*。
|
||
-- 错误码段:studio = 1-112-***-***
|
||
-- =============================================================================
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_studio_session —— 创作会话表(有状态创作工作台主记录,对齐 P-CRT-10 进工作坊)
|
||
-- 用途:创作者进工作坊 upsert 一条会话,承载草稿入参(title/prompt/templateId/attachments)+ 移交后的 game_id。
|
||
-- 移交:createDraft 调 project ProjectApi.createProject 拿 gameId 回写本表 game_id(草稿移交 project,P-TPL-03)。
|
||
-- attachments:JSON 持久化(本波仅持久化不透传 aigc,R7)。
|
||
-- 状态机 status:0 草稿 → 1 生成中 → 2 完成 / 3 失败(StudioSessionStatusEnum;由 generate/getTask 透传 aigc 终态映射)。
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_studio_session` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '创作会话 ID',
|
||
`creator_user_id` BIGINT NOT NULL COMMENT '创作者用户 ID(业务字段;DataPermission:创作者只见自己会话。区别于审计列 creator)',
|
||
`game_id` BIGINT NULL DEFAULT NULL COMMENT '移交后的游戏 ID(project.game_project.id);createDraft 调 createProject 后回写',
|
||
`template_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '玩法模板 ID(透传 aigc,如 dodge/runner/clicker/puzzle/shooter)',
|
||
`title` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '作品标题(建草稿入参,透传 project createProject)',
|
||
`prompt` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '一句话自然语言 Prompt(透传 aigc submitGenerate)',
|
||
`attachments` JSON NULL DEFAULT NULL COMMENT '附件上下文(P-CRT-04,JSON 数组);本波仅持久化,P1 透传 aigc',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '会话状态机:0草稿 1生成中 2完成 3失败(StudioSessionStatusEnum;Service 校验流转)',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者(Huijing 审计列)',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除:0未删 1已删',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID(Huijing 多租户兼容,MVP 单租户=0)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_creator` (`creator_user_id`, `id`) COMMENT '创作者「我的创作会话」列表(DataPermission 边界 + 按 id 倒序)',
|
||
KEY `idx_game` (`game_id`) COMMENT '按移交后的游戏 ID 反查会话'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '创作会话表(有状态创作工作台主记录;草稿入参 + 移交 game_id)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_studio_taskchain —— 创作任务链表(线性单步编排,对齐 P-CRT-01/09 一句话生成 + 重生成血缘)
|
||
-- 用途:generate 时落一条任务链(status=1),回填 aigc_task_id;getTask 轮询透传 aigc 进度/状态映射链态。
|
||
-- 引用边界:aigc_task_id 引用 aigc.game_aigc_task.id(生成权威归 aigc);version_id 引用 project.game_version.id
|
||
-- (aigc succeeded 后回填,版本权威归 project);本表只持引用 + 自身链态,不重建生成状态机。
|
||
-- 重生成血缘:retry_of 指向原任务链 id(P-CRT-09);regenerate 新建一条 retry_of=原 id 的链。
|
||
-- 链态 status:0 初始 → 1 生成中 → 2 完成(回填 version_id) / 3 失败(透传 aigc failed/timed_out)。
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_studio_taskchain` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '创作任务链 ID',
|
||
`session_id` BIGINT NOT NULL COMMENT '所属创作会话 ID(= game_studio_session.id)',
|
||
`creator_user_id` BIGINT NOT NULL COMMENT '创作者用户 ID(DataPermission 边界,归属校验用)',
|
||
`aigc_task_id` BIGINT NULL DEFAULT NULL COMMENT '委托的 aigc 生成任务 ID(= aigc.game_aigc_task.id);generate 后回填,轮询据此查 aigc',
|
||
`game_id` BIGINT NULL DEFAULT NULL COMMENT '关联游戏 ID(project.game_project.id,透传 aigc 用)',
|
||
`version_id` BIGINT NULL DEFAULT NULL COMMENT '产物版本 ID(project.game_version.id);aigc succeeded 后由 getTask 回填',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '任务链状态机:0初始 1生成中 2完成 3失败(Service 校验流转,透传 aigc 终态映射)',
|
||
`progress` INT NOT NULL DEFAULT 0 COMMENT '进度百分比 0-100(透传 aigc progress,供前端进度条 P-CRT-12)',
|
||
`retry_of` BIGINT NULL DEFAULT NULL COMMENT '若为重生成,指向原任务链 ID(P-CRT-09 重生成血缘)',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者(Huijing 审计列)',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除:0未删 1已删',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID(Huijing 多租户兼容,MVP 单租户=0)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_session` (`session_id`, `id`) COMMENT '按会话查任务链(含重生成历史,按 id 倒序)',
|
||
KEY `idx_aigc` (`aigc_task_id`) COMMENT '按 aigc 任务 ID 反查任务链(轮询回写映射)'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '创作任务链表(线性单步编排;持 aigc_task_id/version_id 引用 + 链态)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_studio_asset —— 创作资产槽位表(单步出整包,对齐 P-CRT-02;MVP 仅落槽位 seam,不六路并发)
|
||
-- 用途:单步生成产物的资产槽位记录(asset_type 槽位 + asset_url + 槽位状态)。
|
||
-- 狠切(R7/草稿 scope):MVP 只建槽位表占位 seam,不实现六路并发资产生成;资产由 aigc 单步整包产出,studio 仅登记槽位。
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_studio_asset` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '资产槽位 ID',
|
||
`session_id` BIGINT NOT NULL COMMENT '所属创作会话 ID(= game_studio_session.id)',
|
||
`asset_type` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '资产槽位类型(如 sprite/background/audio/icon;MVP 槽位占位)',
|
||
`asset_url` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '资产 URL(OSS/MinIO;单步整包产出后登记)',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '槽位状态:0未生成 1已生成(Service 校验,MVP 单步直填)',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者(Huijing 审计列)',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除:0未删 1已删',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID(Huijing 多租户兼容,MVP 单租户=0)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_session_type` (`session_id`, `asset_type`) COMMENT '按会话+槽位类型查资产'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '创作资产槽位表(单步出整包槽位 seam;MVP 不六路并发)';
|