Files
xiaoxia-saas/alembic/versions/014_add_template_tables.py
T
xiaoxia 1217d8cef0
Deploy / Build Production Runtime Images (push) Has been skipped
Deploy / Deploy Production (push) Has been skipped
Deploy / Production Browser E2E (push) Has been skipped
Deploy / Deploy Staging (push) Failing after 210h35m44s
CI/CD Pipeline / Frontend Lint (push) Failing after 210h36m11s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 210h36m17s
style: apply isort formatting to pass CI validation (#129)
2026-06-30 18:17:44 +08:00

84 lines
2.8 KiB
Python

"""Phase 3 - 剪辑计划模板:templates + template_segments + template_categories
Revision ID: 014
Revises: 013
Create Date: 2026-06-29
This migration creates three new tables:
1. templates — 剪辑计划模板主表
2. template_segments — 模板片段表
3. template_categories — 模板分类表
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers
revision = "014"
down_revision = "013"
branch_labels = None
depends_on = None
def upgrade() -> None:
conn = op.get_bind()
# ── 1. Create templates table ──
conn.execute(sa.text("""
CREATE TABLE IF NOT EXISTS templates (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
name VARCHAR(200) NOT NULL,
mode VARCHAR(30) NOT NULL,
category VARCHAR(100) NOT NULL DEFAULT '',
tags JSONB NOT NULL DEFAULT '[]',
title_config JSONB NOT NULL DEFAULT '{}',
subtitle_config JSONB NOT NULL DEFAULT '{}',
bgm_config JSONB NOT NULL DEFAULT '{}',
estimated_duration FLOAT NOT NULL DEFAULT 0.0,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
)
"""))
conn.execute(sa.text("CREATE INDEX IF NOT EXISTS ix_templates_user_id ON templates(user_id)"))
conn.execute(sa.text("CREATE INDEX IF NOT EXISTS ix_templates_mode ON templates(mode)"))
# ── 2. Create template_segments table ──
conn.execute(sa.text("""
CREATE TABLE IF NOT EXISTS template_segments (
id VARCHAR(36) PRIMARY KEY,
template_id VARCHAR(36) NOT NULL,
segment_order INTEGER NOT NULL,
duration_min FLOAT NOT NULL,
duration_max FLOAT NOT NULL,
material_type VARCHAR(20),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
)
"""))
conn.execute(
sa.text("CREATE INDEX IF NOT EXISTS ix_template_segments_template_id " "ON template_segments(template_id)")
)
# ── 3. Create template_categories table ──
conn.execute(sa.text("""
CREATE TABLE IF NOT EXISTS template_categories (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
)
"""))
conn.execute(
sa.text("CREATE INDEX IF NOT EXISTS ix_template_categories_user_id " "ON template_categories(user_id)")
)
def downgrade() -> None:
conn = op.get_bind()
conn.execute(sa.text("DROP TABLE IF EXISTS template_categories"))
conn.execute(sa.text("DROP TABLE IF EXISTS template_segments"))
conn.execute(sa.text("DROP TABLE IF EXISTS templates"))