abc54ace4e
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 13s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1646h5m55s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1646h5m57s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1646h5m57s
CI/CD Pipeline / Build Production Runtime Images (pull_request) Failing after 1646h5m59s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Failing after 1646h5m59s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1646h37m27s
P0 hotfix: ingest_jobs.library_id (and all other UUID fields across 10 tables) were varchar(32), but standard UUIDs with hyphens are 36 chars, causing StringDataRightTruncation on insert — mini-program upload was completely broken. Changes: - models.py: All String(32) UUID fields → String(36) across 10 tables (projects, edit_templates, edit_plans, template_clip_configs, edit_plan_clips, ingest_jobs, classification_jobs, generation_tasks, generated_videos, jobs) - Alembic migration 036: ALTER COLUMN for all affected fields - Unit tests: 43 tests verifying String(36) on all UUID columns and standard UUID construction with hyphens Fixes: upload/direct/complete StringDataRightTruncation error
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
"""Expand UUID fields from varchar(32) to varchar(36)
|
|
|
|
All UUID fields across all tables were varchar(32), but standard UUIDs with
|
|
hyphens are 36 characters (e.g. 550e8400-e29b-41d4-a716-446655440000).
|
|
This caused StringDataRightTruncation errors on insert.
|
|
|
|
Revision ID: 036_expand_uuid_36
|
|
Revises: 035_editing_mode
|
|
Create Date: 2026-07-10
|
|
"""
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import op
|
|
|
|
revision = "036_expand_uuid_36"
|
|
down_revision = "035_editing_mode"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
# ── 表 → 需要扩容的列 ─────────────────────────────────────────────────────────
|
|
|
|
_TABLES: dict[str, list[str]] = {
|
|
"projects": ["id", "owner_user_id"],
|
|
"edit_templates": ["id"],
|
|
"edit_plans": ["id", "template_id", "source_edit_plan_id", "project_id", "created_by_user_id"],
|
|
"template_clip_configs": ["id", "template_id"],
|
|
"edit_plan_clips": ["id", "plan_id", "template_clip_config_id", "asset_id"],
|
|
"ingest_jobs": ["id", "project_id", "library_id", "result_asset_id"],
|
|
"classification_jobs": ["id", "project_id", "asset_id"],
|
|
"generation_tasks": [
|
|
"id",
|
|
"project_id",
|
|
"strategy_id",
|
|
"asset_library_id",
|
|
"voice_library_id",
|
|
"created_by_user_id",
|
|
"source_edit_plan_id",
|
|
"batch_id",
|
|
],
|
|
"generated_videos": ["id", "project_id", "generation_task_id", "duplicate_of"],
|
|
"jobs": ["id", "project_id", "source_id", "created_by_user_id"],
|
|
}
|
|
|
|
|
|
def upgrade() -> None:
|
|
for table, columns in _TABLES.items():
|
|
for col in columns:
|
|
op.alter_column(
|
|
table,
|
|
col,
|
|
existing_type=sa.String(32),
|
|
type_=sa.String(36),
|
|
existing_nullable=None,
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
for table, columns in reversed(list(_TABLES.items())):
|
|
for col in columns:
|
|
op.alter_column(
|
|
table,
|
|
col,
|
|
existing_type=sa.String(36),
|
|
type_=sa.String(32),
|
|
existing_nullable=None,
|
|
)
|