ai-robot-core/ai-service/migrations/001_scene_slot_bundles.py

82 lines
2.5 KiB
Python
Raw Normal View History

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