- 范围:全仓除已完成的 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>
121 lines
9.8 KiB
SQL
121 lines
9.8 KiB
SQL
-- =============================================================================
|
||
-- 契约 #2 DB 迁移 | 模块:project(黄金模板模块)| owner:WS1
|
||
-- 文件:V1.0.0__create_game_project.sql(Flyway,已合入禁止修改,回滚写新补偿迁移)
|
||
-- 内容:project 模块核心表 —— 游戏/版本/审核记录 + 双轨专区 Zone + 按 Zone 分区
|
||
-- 约定:InnoDB + utf8mb4;显式列;含 Huijing 审计列;状态机用 tinyint,非法流转由服务端拒绝
|
||
-- 错误码段:project = 1-100-***-***
|
||
-- =============================================================================
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_project —— 游戏项目主表(Game 实体,含状态机)
|
||
-- 状态机 status:0草稿 → 1审核中 →(2通过/3拒绝)→ 4已发布 →(5下架/6封禁)
|
||
-- 合法流转由 ProjectService 校验,DO 层不承载校验
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_project` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '游戏项目 ID(= GamePackage.gameId)',
|
||
`creator_user_id` BIGINT NOT NULL COMMENT '创作者用户 ID(DataPermission:创作者只见自己数据)',
|
||
`title` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '标题',
|
||
`summary` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '简介',
|
||
`cover_url` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '封面图 URL(首屏卡片展示)',
|
||
`tags` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '标签(逗号分隔,≤10 个)',
|
||
`template_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '玩法模板 ID',
|
||
`age_rating` VARCHAR(8) NOT NULL DEFAULT 'all' COMMENT '适龄提示:all/8+/12+/16+(发布前必填,门禁⑦)',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态机:0草稿 1审核中 2已通过 3已拒绝 4已发布 5已下架 6已封禁',
|
||
`current_version_id` BIGINT NULL COMMENT '当前生效版本 ID(game_version.id)',
|
||
`launch_zone_id` BIGINT NULL COMMENT '发布去向专区 ID(launchZone,←G1)',
|
||
`featured` BIT(1) NOT NULL DEFAULT b'0' COMMENT '是否精选池:0否 1是',
|
||
`play_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计试玩数(telemetry 回写)',
|
||
`like_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计点赞数',
|
||
`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_status` (`creator_user_id`, `status`) COMMENT '我的项目列表查询',
|
||
KEY `idx_status_update` (`status`, `update_time`) COMMENT '审核队列/精选按状态+时间',
|
||
KEY `idx_launch_zone` (`launch_zone_id`) COMMENT '按 Zone 分区'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '游戏项目主表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_version —— 游戏版本表(GameVersion,版本管理 + 草稿/发布)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_version` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '版本 ID(= GamePackage.versionId)',
|
||
`game_id` BIGINT NOT NULL COMMENT '所属游戏 ID',
|
||
`version_no` INT NOT NULL DEFAULT 1 COMMENT '版本号(同游戏内递增)',
|
||
`gen_task_id` VARCHAR(64) NULL COMMENT '生成任务 ID(aigc)',
|
||
`package_url` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'GamePackage(manifest)OSS URL,按 /games/{gameId}/versions/{versionId}/ 版本化',
|
||
`bundle_size` BIGINT NOT NULL DEFAULT 0 COMMENT '包总字节(编译期门禁)',
|
||
`checksum` CHAR(64) NOT NULL DEFAULT '' COMMENT '整包 sha256(Manifest 完整性校验)',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '版本状态:0草稿 1已编译 2预览就绪 3已发布',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者',
|
||
`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 '逻辑删除',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_game_version` (`game_id`, `version_no`) COMMENT '按游戏查版本'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '游戏版本表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_review_record —— 审核记录表(ReviewRecord,含锁风门 Gate 二态)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_review_record` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '审核记录 ID',
|
||
`game_id` BIGINT NOT NULL COMMENT '游戏 ID',
|
||
`version_id` BIGINT NOT NULL COMMENT '版本 ID',
|
||
`reviewer_user_id` BIGINT NULL COMMENT '审核人 ID(人工审核)',
|
||
`decision` TINYINT NOT NULL COMMENT '审核决策:1通过 2拒绝 3下架',
|
||
`gate_result` VARCHAR(16) NOT NULL DEFAULT 'pass' COMMENT '锁风门 Gate 二态:pass/block(←G2,owner=compliance 聚合裁决)',
|
||
`reason` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '拒绝/下架理由(回填给创作者)',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者',
|
||
`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 '逻辑删除',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_game` (`game_id`, `create_time`) COMMENT '按游戏查审核历史'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '审核记录表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_zone —— 专区表(双轨 Zone:官方精选 / UGC 普通,←G1,owner=project)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_zone` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '专区 ID',
|
||
`name` VARCHAR(64) NOT NULL COMMENT '专区名称',
|
||
`type` TINYINT NOT NULL COMMENT '专区类型(双轨):1官方精选 2UGC普通',
|
||
`sort` INT NOT NULL DEFAULT 0 COMMENT '排序',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0停用 1启用',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者',
|
||
`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 '逻辑删除',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_type_status` (`type`, `status`, `sort`) COMMENT '按双轨类型取启用专区'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '专区表(双轨)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_project_zone —— 游戏↔专区关系表(按 Zone 分区推荐/浏览,←G1)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_project_zone` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '关系 ID',
|
||
`game_id` BIGINT NOT NULL COMMENT '游戏 ID',
|
||
`zone_id` BIGINT NOT NULL COMMENT '专区 ID',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_game_zone` (`game_id`, `zone_id`) COMMENT '同一游戏不重复归入同一专区',
|
||
KEY `idx_zone` (`zone_id`) COMMENT 'feed 按 Zone 分区取游戏'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '游戏专区关系表';
|
||
|
||
-- 初始化双轨专区种子(官方精选 + UGC 广场),供 feed 双专区浏览
|
||
INSERT INTO `game_zone` (`name`, `type`, `sort`, `creator`) VALUES
|
||
('官方精选', 1, 1, 'system'),
|
||
('创作广场', 2, 2, 'system');
|