Files
aiagent/backend/alembic/versions/002_add_template_market.py
2026-01-19 00:09:36 +08:00

84 lines
4.4 KiB
Python

"""add template market tables
Revision ID: 002
Revises: 001
Create Date: 2024-01-17 12:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql
# revision identifiers, used by Alembic.
revision = '002'
down_revision = '001'
branch_labels = None
depends_on = None
def upgrade() -> None:
# 创建工作流模板表
op.create_table(
'workflow_templates',
sa.Column('id', mysql.CHAR(length=36), nullable=False, comment='模板ID'),
sa.Column('name', sa.String(length=100), nullable=False, comment='模板名称'),
sa.Column('description', sa.Text(), nullable=True, comment='模板描述'),
sa.Column('category', sa.String(length=50), nullable=True, comment='分类: llm/data_processing/automation/integration/other'),
sa.Column('tags', sa.JSON(), nullable=True, comment='标签列表'),
sa.Column('nodes', sa.JSON(), nullable=False, comment='节点配置'),
sa.Column('edges', sa.JSON(), nullable=False, comment='边配置'),
sa.Column('thumbnail', sa.String(length=500), nullable=True, comment='缩略图URL'),
sa.Column('is_public', sa.Boolean(), server_default='1', nullable=True, comment='是否公开'),
sa.Column('is_featured', sa.Boolean(), server_default='0', nullable=True, comment='是否精选'),
sa.Column('view_count', sa.Integer(), server_default='0', nullable=True, comment='查看次数'),
sa.Column('use_count', sa.Integer(), server_default='0', nullable=True, comment='使用次数'),
sa.Column('rating_count', sa.Integer(), server_default='0', nullable=True, comment='评分次数'),
sa.Column('rating_avg', sa.Float(), server_default='0.0', nullable=True, comment='平均评分'),
sa.Column('user_id', mysql.CHAR(length=36), nullable=False, comment='创建者ID'),
sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间'),
sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), nullable=True, comment='更新时间'),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id'),
mysql_charset='utf8mb4',
mysql_collate='utf8mb4_unicode_ci'
)
# 创建模板评分表
op.create_table(
'template_ratings',
sa.Column('id', mysql.CHAR(length=36), nullable=False, comment='评分ID'),
sa.Column('template_id', mysql.CHAR(length=36), nullable=False, comment='模板ID'),
sa.Column('user_id', mysql.CHAR(length=36), nullable=False, comment='用户ID'),
sa.Column('rating', sa.Integer(), nullable=False, comment='评分: 1-5'),
sa.Column('comment', sa.Text(), nullable=True, comment='评论'),
sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间'),
sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), nullable=True, comment='更新时间'),
sa.ForeignKeyConstraint(['template_id'], ['workflow_templates.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('template_id', 'user_id', name='uq_template_user_rating'),
mysql_charset='utf8mb4',
mysql_collate='utf8mb4_unicode_ci'
)
# 创建模板收藏表
op.create_table(
'template_favorites',
sa.Column('id', mysql.CHAR(length=36), nullable=False, comment='收藏ID'),
sa.Column('template_id', mysql.CHAR(length=36), nullable=False, comment='模板ID'),
sa.Column('user_id', mysql.CHAR(length=36), nullable=False, comment='用户ID'),
sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间'),
sa.ForeignKeyConstraint(['template_id'], ['workflow_templates.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('template_id', 'user_id', name='uq_template_user_favorite'),
mysql_charset='utf8mb4',
mysql_collate='utf8mb4_unicode_ci'
)
def downgrade() -> None:
op.drop_table('template_favorites')
op.drop_table('template_ratings')
op.drop_table('workflow_templates')