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

82 lines
2.5 KiB
Python
Raw 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.

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