import { MigrationInterface, QueryRunner } from "typeorm"; /** * 场景管理(T-WEB-015,契约 database 0.4.0 / data-models 0.7.0)。 * * 场景以 **GLB 为主**:`glb_asset_id` 指向存储里的场景文件; * `config` 存物理参数(重力 / 风向动态 / 地面 / 碰撞体)与环境、出生点、相机; * `stats` 复用模型检查器的分析结果。服务端**只存参数、不跑物理**。 */ export class AddScenes1789650000000 implements MigrationInterface { name = 'AddScenes1789650000000' public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` CREATE TABLE \`scenes\` ( \`id\` bigint NOT NULL AUTO_INCREMENT, \`name\` varchar(200) NOT NULL, \`glb_asset_id\` bigint NULL, \`thumbnail_asset_id\` bigint NULL, \`config\` mediumtext NULL, \`stats\` mediumtext NULL, \`file_size\` bigint NULL, \`file_sha256\` varchar(64) NULL, \`conversion_note\` varchar(500) NULL, \`source_type\` varchar(32) NOT NULL, \`source_name\` varchar(200) NOT NULL, \`source_url\` varchar(500) NOT NULL, \`license\` varchar(100) NOT NULL, \`author\` varchar(200) NOT NULL, \`status\` varchar(16) NOT NULL DEFAULT 'pending', \`created_at\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, \`updated_at\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, \`deleted_at\` datetime NULL, INDEX \`idx_scenes_status\` (\`status\`), PRIMARY KEY (\`id\`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(`DROP TABLE \`scenes\``); } }