games-development-ai/contracts/db-schemas/V34.0.0__create_game_artifact_storage.sql
lili a513ae38fd
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
fix(storage): harden source authorization and committed CAS
Provision the isolated game-source writer path, bind source uploads to
GameSourceArchive manifests, and require every immutable storage field for
pending-to-committed CAS. Reuse the gate-validated runtime manifest snapshot,
normalize remote storage errors, and record the staging object/CAS evidence.
2026-07-29 19:10:09 -07:00

44 lines
4.6 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 迁移 | 模块runtime/storage对象存储版本状态| ownerWS3 + WS2
-- 文件V34.0.0__create_game_artifact_storage.sql
-- 目的保存对象存储清单的桶、key、hash、源修订身份和 pending/committed 状态。
-- 边界:本表只负责对象存储提交状态;运行包自身的取包状态仍由 runtime 表管理。
-- =============================================================================
CREATE TABLE `game_artifact_storage` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '对象存储记录 ID',
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID',
`game_id` BIGINT NOT NULL COMMENT '游戏项目 IDproject.game_project.id',
`version_id` BIGINT NOT NULL COMMENT '游戏版本 IDproject.game_version.id',
`artifact_bucket` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '运行包/素材/证据清单所在桶',
`artifact_manifest_key` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'artifact-manifest.json 对象 key',
`artifact_manifest_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'GameArtifactManifest/1 manifestHash域标签 + 去自身字段 canonical JSON SHA-256',
`artifact_manifest_bytes` BIGINT NOT NULL DEFAULT 0 COMMENT 'artifact-manifest.json 字节数',
`runtime_manifest_key` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'GamePackage manifest.json 对象 key',
`runtime_manifest_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'GamePackage manifest.json 原始字节 SHA-256与 runtime checksum 对账',
`source_bucket` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '引擎无关源归档所在桶Tier2 外部源修订可为空',
`source_provider` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '源修订 providertier2_source_project/game_source_archive',
`source_game_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '源修订所属稳定标识',
`source_revision_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '源修订不可变标识',
`source_manifest_key` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'GameSourceArchive source-manifest.json key',
`source_manifest_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'GameSourceArchive/1 manifestHash域标签 + 去自身字段 canonical JSON SHA-256',
`source_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '源文件树 SHA-256',
`package_type` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '运行包形态phaser/littlejs/canvas',
`object_count` INT NOT NULL DEFAULT 0 COMMENT 'artifact manifest 正文对象数量',
`total_bytes` BIGINT NOT NULL DEFAULT 0 COMMENT '运行包、素材和证据对象总字节数',
`asset_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '素材 tree hash',
`bundle_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '运行 bundle SHA-256无 bundle 时为空',
`status` VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '对象状态pending=已上传并回读校验committed=数据库 CAS 提交abandoned=失败回收',
`failure_reason` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '失败或回收原因,正常状态为空',
`committed_at` DATETIME NULL COMMENT '数据库 CAS 成功时间',
`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 '逻辑删除标志;不可用它替换同一 game/version 记录',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_game_version` (`tenant_id`, `game_id`, `version_id`) COMMENT '同一租户游戏版本不可绑定第二份对象清单',
KEY `idx_status_created` (`status`, `create_time`) COMMENT '扫描 pending/abandoned 记录',
KEY `idx_manifest_hash` (`artifact_manifest_hash`) COMMENT '按清单 hash 查询幂等记录'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '游戏对象存储版本状态记录(与运行包状态分离)';