games-development-ai/contracts/db-schemas/V1.0.0__create_game_project.sql
zizi 063ec4edf2 docs(rename): ③ 文档/契约漂移清理——contracts+docs+根文档 yudao 标识同步 com.wanxiang.huijing(follow-up,脚本)
- 范围:全仓除已完成的 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>
2026-06-15 14:32:44 +00:00

121 lines
9.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================================================
-- 契约 #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');