games-development-ai/contracts/db-schemas/V9.0.0__create_game_compliance.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

85 lines
8.9 KiB
SQL
Raw Permalink 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 迁移 | 模块compliancegame-module-complianceWave3 合规域「锁风门 Gate」| ownerWave3 compliance 子 agent
-- 文件V9.0.0__create_game_compliance.sqlFlyway只新增已合入禁止修改回滚写新补偿迁移 V9.0.1 DROP TABLE
-- 内容compliance 模块三张表 —— 锁风门评估台账 game_compliance_gate_result + 内容分级 game_content_rating + 封禁台账 game_user_ban
-- 职责(架构 Doc B + D2 范围铁律):只做 Gate聚合风格/IP 原子→verdict + 内容分级 + 封禁台账);
-- 【明确不建】审核状态机表 / audit_record —— 审核状态机权威归 projectgame_review_recordcompliance 绝不重写。
-- 锁风门 seamR1project.submitPublish 同进程调 ComplianceGateApi.evaluate → 聚合裁决落 game_compliance_gate_result + 分级落 game_content_rating
-- → 返回 verdict 供 project 据此置 admittedblock→admitted=false 不抛异常)。
-- 封禁联动R3 状态分支):写 game_user_ban 台账(主操作恒执行);下架仅当 project 状态==PUBLISHED 时才调 project reviewProject(3)
-- 非 PUBLISHED 只记封禁不调状态机。【本波说明】ProjectApi 暂无 reviewProject seam下架联动标 TODO 留 Phase C 主 agent 收口,本波仅写台账。
-- 降权出流屏蔽P1 本波不生效R5不建 FeedDownweightApi 孤儿 seam
-- 约定InnoDB + utf8mb4显式列含 Huijing 审计列 creator/create_time/updater/update_time/deleted + tenant_id
-- 状态机用 tinyint非法流转由 Service 校验DO 层不承载;中文列注释;关键查询建索引、禁裸 select*。
-- 错误码段compliance = 1-109-***-***
-- =============================================================================
-- -----------------------------------------------------------------------------
-- 表game_compliance_gate_result —— 锁风门评估台账(每次 publish 评估各落一条,审计/溯源用)
-- 用途project.publish 注入 evaluate 时落聚合裁决 + 各原子明细 JSONadmin 复核与合规溯源据此查
-- 写口径非幂等每次评估各落一条审计记录不去重verdict 为聚合结果 max(各原子)
-- -----------------------------------------------------------------------------
CREATE TABLE `game_compliance_gate_result` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '锁风门评估记录 ID',
`game_id` BIGINT NOT NULL COMMENT '评估的游戏 IDproject.game_project.id',
`version_id` BIGINT NOT NULL DEFAULT 0 COMMENT '评估的版本 ID待发布版本无版本时为 0',
`verdict` VARCHAR(16) NOT NULL DEFAULT 'pass' COMMENT '聚合裁决pass 通过/review 需人工复核/block 拦截(= max(各原子)',
`rating` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '本次评估落定的内容分级all/8+/12+/16+(可空)',
`details` VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '各合规原子明细 JSON[{atom,verdict,reason}],便于复核溯源)',
`trace_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '全链路追踪 ID与 publish 链路对账)',
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者Huijing 审计列;锁风门评估为 system/发布发起方)',
`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 '租户 IDHuijing 多租户兼容MVP 单租户=0',
PRIMARY KEY (`id`),
KEY `idx_game_version` (`game_id`, `version_id`) COMMENT '按游戏+版本查最近一次锁风门评估(复核/溯源)'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '锁风门评估台账(每次 publish 评估落一条,聚合裁决+原子明细;审计/溯源)';
-- -----------------------------------------------------------------------------
-- 表game_content_rating —— 内容分级表(按游戏+版本唯一评估时落、admin 复核可改)
-- 用途:/app-api/compliance/rating/get 读分级;分级写入仅由 Gate evaluate 落定 + admin 复核产生
-- 唯一键:(game_id,version_id) 业务唯一(含 deleted/tenant_id 适配逻辑删+多租户),同游戏同版本只存一条最新分级
-- -----------------------------------------------------------------------------
CREATE TABLE `game_content_rating` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '内容分级记录 ID',
`game_id` BIGINT NOT NULL COMMENT '游戏 IDproject.game_project.id',
`version_id` BIGINT NOT NULL DEFAULT 0 COMMENT '版本 ID无版本时为 0',
`rating` VARCHAR(16) NOT NULL DEFAULT 'all' COMMENT '内容分级all 全年龄/8+/12+/16+',
`rated_by` VARCHAR(32) NOT NULL DEFAULT 'gate' COMMENT '分级来源gate 锁风门自动/admin 人工复核',
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者Huijing 审计列)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者admin 复核改分级时记录)',
`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 '租户 IDHuijing 多租户兼容MVP 单租户=0',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_game_version` (`game_id`, `version_id`, `deleted`, `tenant_id`) COMMENT '游戏+版本分级业务唯一键(含 deleted/tenant_id 适配逻辑删+多租户)'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '内容分级表(评估落定+admin 复核;/app-api 只读取)';
-- -----------------------------------------------------------------------------
-- 表game_user_ban —— 封禁台账(封禁/降权的权威台账;主操作恒执行)
-- 用途admin 封禁游戏/用户落台账恒执行R3 下架联动仅当游戏==PUBLISHED 时才调 project 状态机(本波标 TODO
-- R5 降权出流屏蔽 P1 本波不生效(不建 feed seam
-- 唯一键:(target_type,target_id,status) 生效中唯一status=1 生效,含 deleted/tenant_id同目标不可重复生效封禁解封后(status=0)可再次封禁
-- 状态机 status1 生效 → 0 已解封(解封由 admin 触发Service 校验合法流转)
-- -----------------------------------------------------------------------------
CREATE TABLE `game_user_ban` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '封禁台账记录 ID',
`target_type` TINYINT NOT NULL COMMENT '封禁目标类型1 游戏 / 2 用户',
`target_id` BIGINT NOT NULL COMMENT '封禁目标 ID游戏=game_id / 用户=user_id',
`ban_type` TINYINT NOT NULL DEFAULT 1 COMMENT '处置类型1 封禁(下架/禁用)/ 2 降权出流屏蔽P1 本波不生效)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '封禁状态机1 生效 / 0 已解封(合法流转由 Service 校验)',
`reason` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '封禁/降权原因(合规处置说明)',
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者Huijing 审计列;封禁操作的 admin userId',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(封禁时间)',
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者(解封操作的 admin userId',
`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 '租户 IDHuijing 多租户兼容MVP 单租户=0',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_target_active` (`target_type`, `target_id`, `status`, `deleted`, `tenant_id`) COMMENT '生效中封禁业务唯一键:同目标 status=1 不可重复(含 deleted/tenant_id 适配逻辑删+多租户)',
KEY `idx_type_status` (`target_type`, `status`) COMMENT 'admin 按目标类型+状态分页查封禁台账'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '封禁台账表(封禁/降权权威台账;主操作恒执行,下架联动按 project 状态分支)';