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)
|