Files
xiaoxia-saas/alembic/versions/013_add_recipe_tables.py
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

63 lines
1.8 KiB
Python

"""Phase 2 - 配方复用:recipes + recipe_items
Revision ID: 013
Revises: 012
Create Date: 2026-06-29
This migration creates two new tables:
1. recipes — 配方主表
2. recipe_items — 配方素材项表
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers
revision = "013"
down_revision = "012"
branch_labels = None
depends_on = None
def upgrade() -> None:
conn = op.get_bind()
# ── 1. Create recipes table ──
conn.execute(sa.text("""
CREATE TABLE IF NOT EXISTS recipes (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
name VARCHAR(200) NOT NULL,
description TEXT NOT NULL DEFAULT '',
template_id VARCHAR(36) NOT NULL DEFAULT '',
generation_params JSONB NOT NULL DEFAULT '{}',
is_active BOOLEAN NOT NULL DEFAULT TRUE,
metadata JSONB NOT NULL DEFAULT '{}',
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
)
"""))
conn.execute(sa.text("CREATE INDEX IF NOT EXISTS ix_recipes_user_id ON recipes(user_id)"))
# ── 2. Create recipe_items table ──
conn.execute(sa.text("""
CREATE TABLE IF NOT EXISTS recipe_items (
id VARCHAR(36) PRIMARY KEY,
recipe_id VARCHAR(36) NOT NULL,
item_type VARCHAR(20) NOT NULL,
item_id VARCHAR(36) NOT NULL,
position INTEGER NOT NULL DEFAULT 0,
metadata JSONB NOT NULL DEFAULT '{}'
)
"""))
conn.execute(sa.text("CREATE INDEX IF NOT EXISTS ix_recipe_items_recipe_id ON recipe_items(recipe_id)"))
def downgrade() -> None:
conn = op.get_bind()
conn.execute(sa.text("DROP TABLE IF EXISTS recipe_items"))
conn.execute(sa.text("DROP TABLE IF EXISTS recipes"))