82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
|
|
"""
|
|||
|
|
Database Migration: Scene Slot Bundle Tables.
|
|||
|
|
[AC-SCENE-SLOT-01] 场景-槽位映射配置表迁移
|
|||
|
|
|
|||
|
|
创建时间: 2025-03-07
|
|||
|
|
变更说明:
|
|||
|
|
- 新增 scene_slot_bundles 表用于存储场景槽位包配置
|
|||
|
|
|
|||
|
|
执行方式:
|
|||
|
|
- SQLModel 会自动创建表(通过 init_db)
|
|||
|
|
- 此脚本用于手动迁移或回滚
|
|||
|
|
|
|||
|
|
SQL DDL:
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE scene_slot_bundles (
|
|||
|
|
id UUID PRIMARY KEY,
|
|||
|
|
tenant_id VARCHAR NOT NULL,
|
|||
|
|
scene_key VARCHAR(100) NOT NULL,
|
|||
|
|
scene_name VARCHAR(100) NOT NULL,
|
|||
|
|
description TEXT,
|
|||
|
|
required_slots JSON NOT NULL DEFAULT '[]',
|
|||
|
|
optional_slots JSON NOT NULL DEFAULT '[]',
|
|||
|
|
slot_priority JSON,
|
|||
|
|
completion_threshold FLOAT NOT NULL DEFAULT 1.0,
|
|||
|
|
ask_back_order VARCHAR NOT NULL DEFAULT 'priority',
|
|||
|
|
status VARCHAR NOT NULL DEFAULT 'draft',
|
|||
|
|
version INTEGER NOT NULL DEFAULT 1,
|
|||
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
CREATE INDEX ix_scene_slot_bundles_tenant ON scene_slot_bundles(tenant_id);
|
|||
|
|
CREATE UNIQUE INDEX ix_scene_slot_bundles_tenant_scene ON scene_slot_bundles(tenant_id, scene_key);
|
|||
|
|
CREATE INDEX ix_scene_slot_bundles_tenant_status ON scene_slot_bundles(tenant_id, status);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
回滚 SQL:
|
|||
|
|
```sql
|
|||
|
|
DROP TABLE IF EXISTS scene_slot_bundles;
|
|||
|
|
```
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
SCENE_SLOT_BUNDLES_DDL = """
|
|||
|
|
CREATE TABLE IF NOT EXISTS scene_slot_bundles (
|
|||
|
|
id UUID PRIMARY KEY,
|
|||
|
|
tenant_id VARCHAR NOT NULL,
|
|||
|
|
scene_key VARCHAR(100) NOT NULL,
|
|||
|
|
scene_name VARCHAR(100) NOT NULL,
|
|||
|
|
description TEXT,
|
|||
|
|
required_slots JSON NOT NULL DEFAULT '[]',
|
|||
|
|
optional_slots JSON NOT NULL DEFAULT '[]',
|
|||
|
|
slot_priority JSON,
|
|||
|
|
completion_threshold FLOAT NOT NULL DEFAULT 1.0,
|
|||
|
|
ask_back_order VARCHAR NOT NULL DEFAULT 'priority',
|
|||
|
|
status VARCHAR NOT NULL DEFAULT 'draft',
|
|||
|
|
version INTEGER NOT NULL DEFAULT 1,
|
|||
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
SCENE_SLOT_BUNDLES_INDEXES = """
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_scene_slot_bundles_tenant ON scene_slot_bundles(tenant_id);
|
|||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS ix_scene_slot_bundles_tenant_scene ON scene_slot_bundles(tenant_id, scene_key);
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_scene_slot_bundles_tenant_status ON scene_slot_bundles(tenant_id, status);
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
SCENE_SLOT_BUNDLES_ROLLBACK = """
|
|||
|
|
DROP TABLE IF EXISTS scene_slot_bundles;
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def upgrade(conn):
|
|||
|
|
"""执行迁移"""
|
|||
|
|
await conn.execute(SCENE_SLOT_BUNDLES_DDL)
|
|||
|
|
await conn.execute(SCENE_SLOT_BUNDLES_INDEXES)
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def downgrade(conn):
|
|||
|
|
"""回滚迁移"""
|
|||
|
|
await conn.execute(SCENE_SLOT_BUNDLES_ROLLBACK)
|