655 lines
47 KiB
Python
655 lines
47 KiB
Python
"""2026073101_add_column_comments
|
||
|
||
Revision ID: 2026073101
|
||
Revises: f7g8h9i0j1k2
|
||
Create Date: 2026-07-31 00:00:00.000000
|
||
|
||
该文件包含 2026-07-31 的数据库迁移内容:
|
||
给所有表字段添加 COMMENT 注释,便于数据库维护与排查。
|
||
仅使用 COMMENT ON COLUMN/COMMENT ON TABLE 语句,不修改列类型与约束。
|
||
"""
|
||
from typing import Sequence, Union
|
||
|
||
from alembic import op
|
||
|
||
|
||
revision: str = '2026073101'
|
||
down_revision: Union[str, None] = 'f7g8h9i0j1k2'
|
||
branch_labels: Union[str, Sequence[str], None] = None
|
||
depends_on: Union[str, Sequence[str], None] = None
|
||
|
||
|
||
def _comment_table(table_name: str, comment: str) -> None:
|
||
op.execute(f"COMMENT ON TABLE {table_name} IS '{comment}'")
|
||
|
||
|
||
def _comment_column(table_name: str, column_name: str, comment: str) -> None:
|
||
escaped = comment.replace("'", "''")
|
||
op.execute(f"COMMENT ON COLUMN {table_name}.{column_name} IS '{escaped}'")
|
||
|
||
|
||
def upgrade() -> None:
|
||
# ============================================================
|
||
# users 表
|
||
# ============================================================
|
||
_comment_table("users", "用户表")
|
||
_comment_column("users", "id", "主键ID")
|
||
_comment_column("users", "username", "用户名,唯一")
|
||
_comment_column("users", "email", "邮箱,唯一")
|
||
_comment_column("users", "phone", "手机号,唯一")
|
||
_comment_column("users", "hashed_password", "加密后的密码")
|
||
_comment_column("users", "avatar", "头像URL")
|
||
_comment_column("users", "credits", "账户积分余额")
|
||
_comment_column("users", "is_active", "是否启用,True启用")
|
||
_comment_column("users", "is_admin", "是否管理员,True管理员")
|
||
_comment_column("users", "user_type", "用户类型:frontend前台用户,admin后台管理员")
|
||
_comment_column("users", "frontend_user_kind", "前台用户类型:internal内部用户,external外部用户")
|
||
_comment_column("users", "team_id", "当前归属团队ID,仅前台用户有意义")
|
||
_comment_column("users", "last_login_at", "最后登录时间")
|
||
_comment_column("users", "password_set_at", "密码设置时间,NULL表示未设置密码")
|
||
_comment_column("users", "allowed_menus", "允许访问的菜单列表(JSON),NULL表示继承默认")
|
||
_comment_column("users", "private_portrait_asset_limit", "私域人像素材总量上限,0表示关闭模块")
|
||
_comment_column("users", "created_at", "创建时间")
|
||
_comment_column("users", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# projects 表
|
||
# ============================================================
|
||
_comment_table("projects", "项目表")
|
||
_comment_column("projects", "id", "主键ID")
|
||
_comment_column("projects", "user_id", "所属用户ID")
|
||
_comment_column("projects", "name", "项目名称")
|
||
_comment_column("projects", "industry", "所属行业")
|
||
_comment_column("projects", "created_at", "创建时间")
|
||
_comment_column("projects", "updated_at", "更新时间")
|
||
_comment_column("projects", "deleted_at", "软删除时间,NULL表示未删除")
|
||
|
||
# ============================================================
|
||
# credit_ratios 表
|
||
# ============================================================
|
||
_comment_table("credit_ratios", "积分计费规则表")
|
||
_comment_column("credit_ratios", "id", "主键ID")
|
||
_comment_column("credit_ratios", "model_config_id", "引擎ID:图片对应image_engines.id,视频对应video_engines.id")
|
||
_comment_column("credit_ratios", "gen_type", "生成类型:image图片,video视频")
|
||
_comment_column("credit_ratios", "resolution", "分辨率档位:图片(2K/4K) / 视频(480p/720p/1080p)")
|
||
_comment_column("credit_ratios", "ratio", "生成倍率,最终积分 = (基础积分+单位积分×时长/张数) × 倍率")
|
||
_comment_column("credit_ratios", "base_credits", "生成基础积分")
|
||
_comment_column("credit_ratios", "per_second_credits", "视频每秒积分 / 图片每张积分")
|
||
_comment_column("credit_ratios", "input_video_ratio", "传入视频积分倍率")
|
||
_comment_column("credit_ratios", "input_video_base_credits", "传入视频基础积分")
|
||
_comment_column("credit_ratios", "input_video_per_second_credits", "传入视频每秒积分")
|
||
_comment_column("credit_ratios", "input_image_ratio", "传入图片积分倍率")
|
||
_comment_column("credit_ratios", "input_image_base_credits", "传入图片基础积分")
|
||
_comment_column("credit_ratios", "input_image_per_image_credits", "传入图片每张积分")
|
||
_comment_column("credit_ratios", "created_at", "创建时间")
|
||
_comment_column("credit_ratios", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# credit_records 表
|
||
# ============================================================
|
||
_comment_table("credit_records", "积分流水表")
|
||
_comment_column("credit_records", "id", "主键ID")
|
||
_comment_column("credit_records", "user_id", "所属用户ID")
|
||
_comment_column("credit_records", "type", "流水类型:charge扣费,recharge充值,refund退款,gift赠送")
|
||
_comment_column("credit_records", "amount", "流水金额,扣费为负数,充值/退款/赠送为正数")
|
||
_comment_column("credit_records", "balance_after", "流水后账户余额")
|
||
_comment_column("credit_records", "description", "流水描述")
|
||
_comment_column("credit_records", "related_id", "关联业务ID,如生成任务ID/订单ID")
|
||
_comment_column("credit_records", "biz_key", "业务幂等键,格式如 owner_type:owner_id:attempt_no:charge_kind:action")
|
||
_comment_column("credit_records", "refund_for_biz_key", "退款时,对应的扣费biz_key")
|
||
_comment_column("credit_records", "owner_type", "归属类型:chat_generation_task/ generation_record等")
|
||
_comment_column("credit_records", "owner_id", "归属业务记录ID")
|
||
_comment_column("credit_records", "attempt_no", "计费尝试次数,重试时递增")
|
||
_comment_column("credit_records", "charge_kind", "扣费大类:media媒体生成,prompt提示词等")
|
||
_comment_column("credit_records", "charge_action", "扣费动作:charge扣费,refund退款")
|
||
_comment_column("credit_records", "credit_subject", "计费科目:image/video/text")
|
||
_comment_column("credit_records", "media_type", "媒体类型:与credit_subject配合细分")
|
||
_comment_column("credit_records", "billing_scene", "计费场景:如chat_creation、project等")
|
||
_comment_column("credit_records", "source_module", "来源模块:generation_record/module_generation等")
|
||
_comment_column("credit_records", "source_project_id", "来源项目ID")
|
||
_comment_column("credit_records", "source_step_id", "来源步骤ID")
|
||
_comment_column("credit_records", "source_step_code", "来源步骤编码")
|
||
_comment_column("credit_records", "token_usage_id", "关联Token消耗记录ID")
|
||
_comment_column("credit_records", "input_tokens", "输入Token数量快照")
|
||
_comment_column("credit_records", "output_tokens", "输出Token数量快照")
|
||
_comment_column("credit_records", "total_tokens", "总Token数量快照")
|
||
_comment_column("credit_records", "engine_type", "引擎类型:image/video/text")
|
||
_comment_column("credit_records", "engine_id", "使用的引擎ID")
|
||
_comment_column("credit_records", "engine_name", "引擎名称快照")
|
||
_comment_column("credit_records", "engine_provider", "引擎供应商快照:ark/其他")
|
||
_comment_column("credit_records", "engine_model_name", "引擎模型名快照")
|
||
_comment_column("credit_records", "user_type_snapshot", "用户类型快照:frontend/admin")
|
||
_comment_column("credit_records", "frontend_user_kind_snapshot", "前台用户类型快照:internal/external")
|
||
_comment_column("credit_records", "team_id_snapshot", "团队ID快照,流水发生时的归属团队")
|
||
_comment_column("credit_records", "team_name_snapshot", "团队名称快照")
|
||
_comment_column("credit_records", "created_at", "创建时间")
|
||
_comment_column("credit_records", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# chat_generation_tasks 表
|
||
# ============================================================
|
||
_comment_table("chat_generation_tasks", "AI创作任务表(不绑定项目的聊天式生成)")
|
||
_comment_column("chat_generation_tasks", "id", "主键ID,顶层/子任务ID")
|
||
_comment_column("chat_generation_tasks", "user_id", "所属用户ID")
|
||
_comment_column("chat_generation_tasks", "original_prompt", "原始用户提示词")
|
||
_comment_column("chat_generation_tasks", "optimized_prompt", "优化后的提示词")
|
||
_comment_column("chat_generation_tasks", "gen_type", "生成类型:image图片,video视频")
|
||
_comment_column("chat_generation_tasks", "duration", "视频时长(秒)")
|
||
_comment_column("chat_generation_tasks", "aspect_ratio", "视频比例:16:9/9:16等")
|
||
_comment_column("chat_generation_tasks", "resolution", "用户选择的分辨率")
|
||
_comment_column("chat_generation_tasks", "provider_generation_resolution", "供应商实际生成分辨率")
|
||
_comment_column("chat_generation_tasks", "video_upscale_enabled_snapshot", "是否开启视频超分")
|
||
_comment_column("chat_generation_tasks", "video_upscale_snapshot_json", "视频超分参数快照JSON")
|
||
_comment_column("chat_generation_tasks", "image_size", "图片分辨率档位:2K/4K")
|
||
_comment_column("chat_generation_tasks", "image_proportion", "图片比例:1:1/16:9等")
|
||
_comment_column("chat_generation_tasks", "image_px", "图片像素,如2048×2048")
|
||
_comment_column("chat_generation_tasks", "status", "任务状态:generating/success/failed等")
|
||
_comment_column("chat_generation_tasks", "pipeline_stage", "流水线阶段:prompt_optimized/resource_generated等")
|
||
_comment_column("chat_generation_tasks", "generation_mode", "生成模式:chatapi_async单份异步/chatapi_main多份主任务")
|
||
_comment_column("chat_generation_tasks", "parent_task_id", "父任务ID,多份生成时子任务关联主任务")
|
||
_comment_column("chat_generation_tasks", "generation_count", "生成份数,主任务表示总共多少份")
|
||
_comment_column("chat_generation_tasks", "generation_index", "第N份子任务,主任务为NULL")
|
||
_comment_column("chat_generation_tasks", "generation_attempt_no", "生成尝试次数,重试时递增")
|
||
_comment_column("chat_generation_tasks", "resource_generation_started_at", "资源生成开始时间")
|
||
_comment_column("chat_generation_tasks", "provider_create_claim_token", "供应商创建任务分布式租约token")
|
||
_comment_column("chat_generation_tasks", "provider_create_lease_until", "供应商创建租约过期时间")
|
||
_comment_column("chat_generation_tasks", "provider_create_started_at", "供应商创建任务开始时间")
|
||
_comment_column("chat_generation_tasks", "media_references", "参考素材JSON数组")
|
||
_comment_column("chat_generation_tasks", "provider_task_id", "供应商任务ID")
|
||
_comment_column("chat_generation_tasks", "seedance_task_id", "Seedance任务ID(兼容字段)")
|
||
_comment_column("chat_generation_tasks", "remote_result_url", "供应商返回的远程资源URL")
|
||
_comment_column("chat_generation_tasks", "image_url", "图片结果URL")
|
||
_comment_column("chat_generation_tasks", "video_url", "视频结果URL")
|
||
_comment_column("chat_generation_tasks", "video_cover_url", "视频封面URL")
|
||
_comment_column("chat_generation_tasks", "engine_id", "使用的引擎ID")
|
||
_comment_column("chat_generation_tasks", "engine_snapshot_json", "引擎参数快照JSON")
|
||
_comment_column("chat_generation_tasks", "provider_response_json", "供应商完整响应JSON")
|
||
_comment_column("chat_generation_tasks", "credits_cost", "媒体生成消耗的总积分")
|
||
_comment_column("chat_generation_tasks", "text_credits_cost", "提示词优化消耗积分")
|
||
_comment_column("chat_generation_tasks", "text_tokens_used", "提示词优化Token消耗")
|
||
_comment_column("chat_generation_tasks", "video_tokens_used", "视频生成Token消耗")
|
||
_comment_column("chat_generation_tasks", "image_tokens_used", "图片生成Token消耗")
|
||
_comment_column("chat_generation_tasks", "retry_count", "重试次数(兼容旧字段)")
|
||
_comment_column("chat_generation_tasks", "manual_retry_count", "用户手动重试次数")
|
||
_comment_column("chat_generation_tasks", "poll_error_count", "轮询错误次数")
|
||
_comment_column("chat_generation_tasks", "poll_count", "轮询总次数")
|
||
_comment_column("chat_generation_tasks", "last_poll_at", "最后一次轮询时间")
|
||
_comment_column("chat_generation_tasks", "poll_started_at", "本次轮询开始时间")
|
||
_comment_column("chat_generation_tasks", "next_poll_at", "下一次轮询触发时间")
|
||
_comment_column("chat_generation_tasks", "poll_interval_seconds", "轮询间隔秒数")
|
||
_comment_column("chat_generation_tasks", "poll_claim_token", "轮询分布式租约token")
|
||
_comment_column("chat_generation_tasks", "poll_lease_until", "轮询租约过期时间")
|
||
_comment_column("chat_generation_tasks", "deadline_at", "任务截止时间,超时自动失败")
|
||
_comment_column("chat_generation_tasks", "generated_at", "资源生成完成时间")
|
||
_comment_column("chat_generation_tasks", "error_message", "错误信息")
|
||
_comment_column("chat_generation_tasks", "idempotency_key", "幂等键,防重复创建")
|
||
_comment_column("chat_generation_tasks", "download_celery_task_id", "下载步骤Celery任务ID")
|
||
_comment_column("chat_generation_tasks", "download_enqueued_at", "下载入队时间")
|
||
_comment_column("chat_generation_tasks", "download_started_at", "下载开始时间")
|
||
_comment_column("chat_generation_tasks", "download_claim_token", "下载租约token")
|
||
_comment_column("chat_generation_tasks", "download_lease_until", "下载租约过期时间")
|
||
_comment_column("chat_generation_tasks", "download_next_retry_at", "下载下次重试时间")
|
||
_comment_column("chat_generation_tasks", "download_attempt_count", "下载重试次数")
|
||
_comment_column("chat_generation_tasks", "download_last_error", "下载最后一次错误信息")
|
||
_comment_column("chat_generation_tasks", "download_storage_date_dir", "下载存储日期目录")
|
||
_comment_column("chat_generation_tasks", "created_at", "创建时间")
|
||
_comment_column("chat_generation_tasks", "updated_at", "更新时间")
|
||
_comment_column("chat_generation_tasks", "deleted_at", "软删除时间,NULL表示未删除")
|
||
|
||
# ============================================================
|
||
# generation_records 表
|
||
# ============================================================
|
||
_comment_table("generation_records", "项目生成记录表(绑定项目的旧版生成)")
|
||
_comment_column("generation_records", "id", "主键ID")
|
||
_comment_column("generation_records", "user_id", "所属用户ID")
|
||
_comment_column("generation_records", "project_id", "所属项目ID")
|
||
_comment_column("generation_records", "original_prompt", "原始提示词")
|
||
_comment_column("generation_records", "optimized_prompt", "优化后的提示词")
|
||
_comment_column("generation_records", "prompt_usage_snapshot_json", "提示词消耗快照JSON")
|
||
_comment_column("generation_records", "gen_type", "生成类型:image/video")
|
||
_comment_column("generation_records", "duration", "视频时长秒数")
|
||
_comment_column("generation_records", "aspect_ratio", "视频比例")
|
||
_comment_column("generation_records", "resolution", "分辨率档位")
|
||
_comment_column("generation_records", "provider_generation_resolution", "供应商实际分辨率")
|
||
_comment_column("generation_records", "video_upscale_enabled_snapshot", "是否开启视频超分")
|
||
_comment_column("generation_records", "video_upscale_snapshot_json", "视频超分快照JSON")
|
||
_comment_column("generation_records", "image_size", "图片分辨率档位")
|
||
_comment_column("generation_records", "image_proportion", "图片比例")
|
||
_comment_column("generation_records", "image_px", "图片像素尺寸")
|
||
_comment_column("generation_records", "status", "任务状态")
|
||
_comment_column("generation_records", "pipeline_stage", "流水线阶段")
|
||
_comment_column("generation_records", "video_url", "视频结果URL")
|
||
_comment_column("generation_records", "video_cover_url", "视频封面URL")
|
||
_comment_column("generation_records", "image_url", "图片结果URL")
|
||
_comment_column("generation_records", "media_references", "参考素材JSON数组")
|
||
_comment_column("generation_records", "include_media_references", "是否包含参考素材")
|
||
_comment_column("generation_records", "video_url_expires_at", "视频URL过期时间")
|
||
_comment_column("generation_records", "seedance_task_id", "Seedance任务ID")
|
||
_comment_column("generation_records", "credits_cost", "媒体生成消耗积分")
|
||
_comment_column("generation_records", "text_credits_cost", "提示词消耗积分")
|
||
_comment_column("generation_records", "text_tokens_used", "提示词Token数")
|
||
_comment_column("generation_records", "video_tokens_used", "视频Token数")
|
||
_comment_column("generation_records", "image_tokens_used", "图片Token数")
|
||
_comment_column("generation_records", "generated_at", "生成完成时间")
|
||
_comment_column("generation_records", "error_message", "错误信息")
|
||
_comment_column("generation_records", "idempotency_key", "幂等键")
|
||
_comment_column("generation_records", "generation_attempt_no", "生成尝试次数")
|
||
_comment_column("generation_records", "resource_generation_started_at", "资源生成开始时间")
|
||
_comment_column("generation_records", "deadline_at", "任务截止时间")
|
||
_comment_column("generation_records", "engine_id", "使用引擎ID")
|
||
_comment_column("generation_records", "engine_snapshot_json", "引擎参数快照JSON")
|
||
_comment_column("generation_records", "provider_response_json", "供应商响应JSON")
|
||
_comment_column("generation_records", "remote_result_url", "远程资源URL")
|
||
_comment_column("generation_records", "provider_create_claim_token", "供应商创建租约token")
|
||
_comment_column("generation_records", "provider_create_lease_until", "供应商创建租约过期")
|
||
_comment_column("generation_records", "provider_create_started_at", "供应商创建开始时间")
|
||
_comment_column("generation_records", "retry_count", "重试次数(兼容)")
|
||
_comment_column("generation_records", "manual_retry_count", "手动重试次数")
|
||
_comment_column("generation_records", "poll_error_count", "轮询错误次数")
|
||
_comment_column("generation_records", "poll_count", "轮询次数")
|
||
_comment_column("generation_records", "last_poll_at", "最后轮询时间")
|
||
_comment_column("generation_records", "poll_started_at", "轮询开始时间")
|
||
_comment_column("generation_records", "next_poll_at", "下次轮询时间")
|
||
_comment_column("generation_records", "poll_interval_seconds", "轮询间隔秒")
|
||
_comment_column("generation_records", "poll_claim_token", "轮询租约token")
|
||
_comment_column("generation_records", "poll_lease_until", "轮询租约过期")
|
||
_comment_column("generation_records", "download_celery_task_id", "下载Celery任务ID")
|
||
_comment_column("generation_records", "download_enqueued_at", "下载开始入队时间")
|
||
_comment_column("generation_records", "download_started_at", "下载开始时间")
|
||
_comment_column("generation_records", "download_claim_token", "下载租约token")
|
||
_comment_column("generation_records", "download_lease_until", "下载租约过期")
|
||
_comment_column("generation_records", "download_next_retry_at", "下载下次重试")
|
||
_comment_column("generation_records", "download_attempt_count", "下载重试次数")
|
||
_comment_column("generation_records", "download_last_error", "下载最后错误")
|
||
_comment_column("generation_records", "download_storage_date_dir", "下载存储日期目录")
|
||
_comment_column("generation_records", "created_at", "创建时间")
|
||
_comment_column("generation_records", "updated_at", "更新时间")
|
||
_comment_column("generation_records", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# generated_resources 表
|
||
# ============================================================
|
||
_comment_table("generated_resources", "生成资源账本表(统一记录所有生成的图片/视频)")
|
||
_comment_column("generated_resources", "id", "主键ID")
|
||
_comment_column("generated_resources", "user_id", "所属用户ID")
|
||
_comment_column("generated_resources", "resource_type", "资源类型:image/video")
|
||
_comment_column("generated_resources", "resource_url", "资源访问URL")
|
||
_comment_column("generated_resources", "remote_url", "供应商原始远程URL")
|
||
_comment_column("generated_resources", "storage_type", "存储类型:local本地/oss对象存储")
|
||
_comment_column("generated_resources", "storage_path", "存储路径")
|
||
_comment_column("generated_resources", "file_name", "文件名,平台素材名称")
|
||
_comment_column("generated_resources", "file_size_bytes", "文件大小(字节)")
|
||
_comment_column("generated_resources", "source_model", "来源模型:chat_generation_task/generation_record")
|
||
_comment_column("generated_resources", "source_model_module", "来源模块描述")
|
||
_comment_column("generated_resources", "source_id", "来源记录ID")
|
||
_comment_column("generated_resources", "engine_id", "使用引擎ID")
|
||
_comment_column("generated_resources", "engine_type", "引擎类型:image/video")
|
||
_comment_column("generated_resources", "provider", "供应商:ark/其他")
|
||
_comment_column("generated_resources", "model_name", "模型名称")
|
||
_comment_column("generated_resources", "generated_at", "资源生成完成时间")
|
||
_comment_column("generated_resources", "resource_month", "资源归属月份,按月统计")
|
||
_comment_column("generated_resources", "extra_json", "扩展字段JSON")
|
||
_comment_column("generated_resources", "created_at", "创建时间")
|
||
_comment_column("generated_resources", "updated_at", "更新时间")
|
||
_comment_column("generated_resources", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# upload_resources 表
|
||
# ============================================================
|
||
_comment_table("upload_resources", "用户上传资源账本表(用户上传/模块上传/切片文件)")
|
||
_comment_column("upload_resources", "id", "主键ID")
|
||
_comment_column("upload_resources", "user_id", "所属用户ID")
|
||
_comment_column("upload_resources", "module", "所属模块:conversation/generation_record等")
|
||
_comment_column("upload_resources", "resource_type", "资源类型:image/video/audio/file")
|
||
_comment_column("upload_resources", "resource_url", "资源访问URL")
|
||
_comment_column("upload_resources", "storage_path", "存储路径,唯一")
|
||
_comment_column("upload_resources", "file_name", "原始文件名")
|
||
_comment_column("upload_resources", "file_ext", "文件扩展名")
|
||
_comment_column("upload_resources", "mime_type", "MIME类型")
|
||
_comment_column("upload_resources", "file_size_bytes", "文件大小(字节)")
|
||
_comment_column("upload_resources", "duration_seconds", "音视频时长(秒)")
|
||
_comment_column("upload_resources", "duration_source", "时长来源:probe探测/用户设置")
|
||
_comment_column("upload_resources", "width", "图片/视频宽度(像素)")
|
||
_comment_column("upload_resources", "height", "图片/视频高度(像素)")
|
||
_comment_column("upload_resources", "source_model", "关联业务模型")
|
||
_comment_column("upload_resources", "source_id", "关联业务记录ID")
|
||
_comment_column("upload_resources", "source_module", "关联业务模块")
|
||
_comment_column("upload_resources", "bind_status", "绑定状态:pending待绑定/bound已绑定/unbound已解绑")
|
||
_comment_column("upload_resources", "delete_policy", "删除策略:user_deletable用户可删/keep_forever永久保留")
|
||
_comment_column("upload_resources", "created_by", "创建来源:api用户上传/worker系统生成")
|
||
_comment_column("upload_resources", "metadata_json", "媒体元数据JSON")
|
||
_comment_column("upload_resources", "capacity_released_at", "容量统计中已释放时间")
|
||
_comment_column("upload_resources", "physical_deleted_at", "物理文件删除时间")
|
||
_comment_column("upload_resources", "file_delete_status", "文件删除状态:active待删/deleting删除中/deleted已删除/error失败")
|
||
_comment_column("upload_resources", "file_delete_error", "文件删除失败信息")
|
||
_comment_column("upload_resources", "created_at", "创建时间")
|
||
_comment_column("upload_resources", "updated_at", "更新时间")
|
||
_comment_column("upload_resources", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# image_engines 表
|
||
# ============================================================
|
||
_comment_table("image_engines", "图片生成引擎配置表")
|
||
_comment_column("image_engines", "id", "主键ID")
|
||
_comment_column("image_engines", "name", "引擎显示名称")
|
||
_comment_column("image_engines", "provider", "供应商:ark/其他")
|
||
_comment_column("image_engines", "api_base", "API基础地址")
|
||
_comment_column("image_engines", "api_key", "API密钥")
|
||
_comment_column("image_engines", "model_name", "模型名")
|
||
_comment_column("image_engines", "supported_models", "支持的模型列表JSON")
|
||
_comment_column("image_engines", "supported_sizes", "支持尺寸JSON:{分辨率:{比例:像素}}")
|
||
_comment_column("image_engines", "default_size", "默认分辨率档位")
|
||
_comment_column("image_engines", "max_image_count", "允许生成图片数量上限")
|
||
_comment_column("image_engines", "multi_generation_enabled", "是否允许多份生成")
|
||
_comment_column("image_engines", "max_generation_count", "多份生成最大份数")
|
||
_comment_column("image_engines", "multi_image_max_images", "组图接口参考图+生成图数量上限")
|
||
_comment_column("image_engines", "max_reference_image_count", "最多参考图片张数")
|
||
_comment_column("image_engines", "output_format", "输出格式,空表示使用默认")
|
||
_comment_column("image_engines", "generate_url", "生成接口URL,留空使用SDK默认")
|
||
_comment_column("image_engines", "is_active", "是否启用")
|
||
_comment_column("image_engines", "priority", "排序优先级,越大越优先")
|
||
_comment_column("image_engines", "created_at", "创建时间")
|
||
_comment_column("image_engines", "updated_at", "更新时间")
|
||
_comment_column("image_engines", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# video_engines 表
|
||
# ============================================================
|
||
_comment_table("video_engines", "视频生成引擎配置表")
|
||
_comment_column("video_engines", "id", "主键ID")
|
||
_comment_column("video_engines", "name", "引擎显示名称")
|
||
_comment_column("video_engines", "provider", "供应商:ark/其他")
|
||
_comment_column("video_engines", "api_base", "API基础地址")
|
||
_comment_column("video_engines", "api_key", "API密钥")
|
||
_comment_column("video_engines", "model_name", "模型名")
|
||
_comment_column("video_engines", "supported_ratios", "支持比例JSON数组")
|
||
_comment_column("video_engines", "supported_resolutions", "支持分辨率JSON数组")
|
||
_comment_column("video_engines", "supported_durations", "支持时长JSON数组")
|
||
_comment_column("video_engines", "max_duration", "最大时长秒数")
|
||
_comment_column("video_engines", "max_image_count", "最多参考图片张数,0表示不支持")
|
||
_comment_column("video_engines", "max_video_count", "最多参考视频段数,0表示不支持")
|
||
_comment_column("video_engines", "max_audio_count", "最多参考音频段数,0表示不支持")
|
||
_comment_column("video_engines", "multi_generation_enabled", "是否允许多份生成")
|
||
_comment_column("video_engines", "max_generation_count", "多份生成最大份数")
|
||
_comment_column("video_engines", "supports_first_last_frame", "是否支持首尾帧参考")
|
||
_comment_column("video_engines", "supports_universal_reference", "是否支持通用参考素材")
|
||
_comment_column("video_engines", "generate_url", "生成接口URL")
|
||
_comment_column("video_engines", "query_url", "查询接口URL")
|
||
_comment_column("video_engines", "is_active", "是否启用")
|
||
_comment_column("video_engines", "priority", "排序优先级")
|
||
_comment_column("video_engines", "created_at", "创建时间")
|
||
_comment_column("video_engines", "updated_at", "更新时间")
|
||
_comment_column("video_engines", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# model_configs 表
|
||
# ============================================================
|
||
_comment_table("model_configs", "文本模型配置表(提示词优化等文本模型)")
|
||
_comment_column("model_configs", "id", "主键ID")
|
||
_comment_column("model_configs", "name", "模型显示名称")
|
||
_comment_column("model_configs", "provider", "供应商")
|
||
_comment_column("model_configs", "api_base", "API基础地址")
|
||
_comment_column("model_configs", "api_key", "API密钥")
|
||
_comment_column("model_configs", "model_name", "模型名")
|
||
_comment_column("model_configs", "weight", "权重,权重选择时使用")
|
||
_comment_column("model_configs", "max_tokens", "最大输出Token数")
|
||
_comment_column("model_configs", "temperature", "采样温度")
|
||
_comment_column("model_configs", "is_active", "是否启用")
|
||
_comment_column("model_configs", "priority", "排序优先级")
|
||
_comment_column("model_configs", "created_at", "创建时间")
|
||
_comment_column("model_configs", "updated_at", "更新时间")
|
||
_comment_column("model_configs", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# system_configs 表
|
||
# ============================================================
|
||
_comment_table("system_configs", "系统配置表")
|
||
_comment_column("system_configs", "id", "主键ID")
|
||
_comment_column("system_configs", "key", "配置键名,唯一")
|
||
_comment_column("system_configs", "value", "配置值")
|
||
_comment_column("system_configs", "description", "配置说明")
|
||
_comment_column("system_configs", "created_at", "创建时间")
|
||
_comment_column("system_configs", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# operation_logs 表
|
||
# ============================================================
|
||
_comment_table("operation_logs", "操作日志表")
|
||
_comment_column("operation_logs", "id", "主键ID")
|
||
_comment_column("operation_logs", "user_id", "操作用户ID")
|
||
_comment_column("operation_logs", "username", "操作用户名")
|
||
_comment_column("operation_logs", "action", "操作动作:CREATE/UPDATE/DELETE等")
|
||
_comment_column("operation_logs", "method", "HTTP方法:GET/POST/PUT/DELETE")
|
||
_comment_column("operation_logs", "path", "请求路径")
|
||
_comment_column("operation_logs", "detail", "操作详情JSON")
|
||
_comment_column("operation_logs", "ip", "客户端IP")
|
||
_comment_column("operation_logs", "created_at", "创建时间")
|
||
_comment_column("operation_logs", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# notifications 表
|
||
# ============================================================
|
||
_comment_table("notifications", "通知消息表")
|
||
_comment_column("notifications", "id", "主键ID")
|
||
_comment_column("notifications", "user_id", "接收用户ID,NULL表示全体广播")
|
||
_comment_column("notifications", "title", "通知标题")
|
||
_comment_column("notifications", "content", "通知内容")
|
||
_comment_column("notifications", "type", "通知类型:system系统公告/billing账单通知等")
|
||
_comment_column("notifications", "is_read", "是否已读")
|
||
_comment_column("notifications", "related_id", "关联业务ID")
|
||
_comment_column("notifications", "created_at", "创建时间")
|
||
_comment_column("notifications", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# recharge_packages 表
|
||
# ============================================================
|
||
_comment_table("recharge_packages", "积分充值套餐表")
|
||
_comment_column("recharge_packages", "id", "主键ID")
|
||
_comment_column("recharge_packages", "name", "套餐名称")
|
||
_comment_column("recharge_packages", "credits", "套餐包含积分")
|
||
_comment_column("recharge_packages", "price", "套餐价格(元)")
|
||
_comment_column("recharge_packages", "bonus_credits", "赠送积分")
|
||
_comment_column("recharge_packages", "description", "套餐描述")
|
||
_comment_column("recharge_packages", "package_type", "套餐类型:normal普通/gift赠送首充等")
|
||
_comment_column("recharge_packages", "is_gift", "是否赠送套餐")
|
||
_comment_column("recharge_packages", "is_active", "是否启用")
|
||
_comment_column("recharge_packages", "sort_order", "排序值,越小越靠前")
|
||
_comment_column("recharge_packages", "created_at", "创建时间")
|
||
_comment_column("recharge_packages", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# payment_orders 表
|
||
# ============================================================
|
||
_comment_table("payment_orders", "支付订单表")
|
||
_comment_column("payment_orders", "id", "主键ID")
|
||
_comment_column("payment_orders", "user_id", "下单用户ID")
|
||
_comment_column("payment_orders", "order_no", "订单号,唯一")
|
||
_comment_column("payment_orders", "amount", "支付金额(元)")
|
||
_comment_column("payment_orders", "credits", "获得积分总数(含赠送)")
|
||
_comment_column("payment_orders", "payment_method", "支付方式:wxpay/alipay等")
|
||
_comment_column("payment_orders", "status", "订单状态:pending待支付/paid已支付/refunded已退款/failed失败")
|
||
_comment_column("payment_orders", "paid_at", "支付成功时间")
|
||
_comment_column("payment_orders", "trade_no", "第三方支付流水号")
|
||
_comment_column("payment_orders", "refund_trade_no", "退款流水号")
|
||
_comment_column("payment_orders", "refunded_at", "退款完成时间")
|
||
_comment_column("payment_orders", "refund_amount", "退款金额")
|
||
_comment_column("payment_orders", "created_at", "创建时间")
|
||
_comment_column("payment_orders", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# video_upscale_tasks 表
|
||
# ============================================================
|
||
_comment_table("video_upscale_tasks", "视频超分任务表")
|
||
_comment_column("video_upscale_tasks", "id", "主键ID")
|
||
_comment_column("video_upscale_tasks", "chat_generation_task_id", "关联AI创作任务ID,与generation_record_id二选一")
|
||
_comment_column("video_upscale_tasks", "generation_record_id", "关联项目生成记录ID,与chat_generation_task_id二选一")
|
||
_comment_column("video_upscale_tasks", "api_generation_task_id", "关联API生成任务ID")
|
||
_comment_column("video_upscale_tasks", "status", "任务状态:pending/processing/success/failed")
|
||
_comment_column("video_upscale_tasks", "stage", "阶段:upscale_queued/upscale_processing等")
|
||
_comment_column("video_upscale_tasks", "processor_key", "处理节点标识")
|
||
_comment_column("video_upscale_tasks", "attempt_count", "执行尝试次数")
|
||
_comment_column("video_upscale_tasks", "failure_count", "失败次数")
|
||
_comment_column("video_upscale_tasks", "manual_retry_count", "手动重试次数")
|
||
_comment_column("video_upscale_tasks", "next_retry_at", "下次重试时间")
|
||
_comment_column("video_upscale_tasks", "last_error", "最后错误信息")
|
||
_comment_column("video_upscale_tasks", "source_local_path", "源视频本地路径")
|
||
_comment_column("video_upscale_tasks", "source_file_size_bytes", "源文件大小(字节)")
|
||
_comment_column("video_upscale_tasks", "source_width", "源视频宽度")
|
||
_comment_column("video_upscale_tasks", "source_height", "源视频高度")
|
||
_comment_column("video_upscale_tasks", "source_duration_seconds", "源视频时长秒数")
|
||
_comment_column("video_upscale_tasks", "source_deleted_at", "源文件删除时间")
|
||
_comment_column("video_upscale_tasks", "source_delete_error", "源文件删除错误")
|
||
_comment_column("video_upscale_tasks", "source_remote_url", "源文件远程URL")
|
||
_comment_column("video_upscale_tasks", "source_remote_url_signed_at", "远程URL签名时间")
|
||
_comment_column("video_upscale_tasks", "source_remote_url_expires_at", "远程URL过期时间")
|
||
_comment_column("video_upscale_tasks", "source_remote_url_last_probe_at", "远程URL最后探测时间")
|
||
_comment_column("video_upscale_tasks", "source_remote_url_probe_status", "远程URL探测状态")
|
||
_comment_column("video_upscale_tasks", "input_source_type", "输入源类型:local/remote")
|
||
_comment_column("video_upscale_tasks", "input_source_fallback_count", "输入源回退次数")
|
||
_comment_column("video_upscale_tasks", "target_width", "目标宽度像素")
|
||
_comment_column("video_upscale_tasks", "target_height", "目标高度像素")
|
||
_comment_column("video_upscale_tasks", "effective_target_width", "实际生效目标宽度")
|
||
_comment_column("video_upscale_tasks", "effective_target_height", "实际生效目标高度")
|
||
_comment_column("video_upscale_tasks", "provider_task_id", "供应商超分任务ID")
|
||
_comment_column("video_upscale_tasks", "provider_request_json", "供应商请求JSON")
|
||
_comment_column("video_upscale_tasks", "provider_response_json", "供应商响应JSON")
|
||
_comment_column("video_upscale_tasks", "provider_output_url", "供应商输出URL")
|
||
_comment_column("video_upscale_tasks", "provider_output_url_expires_at", "供应商输出URL过期")
|
||
_comment_column("video_upscale_tasks", "provider_submitted_at", "提交供应商时间")
|
||
_comment_column("video_upscale_tasks", "final_local_path", "最终本地文件路径")
|
||
_comment_column("video_upscale_tasks", "final_resource_url", "最终资源访问URL")
|
||
_comment_column("video_upscale_tasks", "final_file_size_bytes", "最终文件大小(字节)")
|
||
_comment_column("video_upscale_tasks", "celery_task_id", "Celery任务ID")
|
||
_comment_column("video_upscale_tasks", "lease_token", "分布式租约token")
|
||
_comment_column("video_upscale_tasks", "lease_until", "租约过期时间")
|
||
_comment_column("video_upscale_tasks", "started_at", "开始处理时间")
|
||
_comment_column("video_upscale_tasks", "completed_at", "完成时间")
|
||
_comment_column("video_upscale_tasks", "failed_at", "失败时间")
|
||
_comment_column("video_upscale_tasks", "created_at", "创建时间")
|
||
_comment_column("video_upscale_tasks", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# shot_replicate_task_sets 表
|
||
# ============================================================
|
||
_comment_table("shot_replicate_task_sets", "拆镜复刻总任务集")
|
||
_comment_column("shot_replicate_task_sets", "id", "主键ID")
|
||
_comment_column("shot_replicate_task_sets", "user_id", "所属用户ID")
|
||
_comment_column("shot_replicate_task_sets", "title", "任务集标题")
|
||
_comment_column("shot_replicate_task_sets", "video_url", "上传视频访问URL")
|
||
_comment_column("shot_replicate_task_sets", "video_path", "上传视频存储路径")
|
||
_comment_column("shot_replicate_task_sets", "video_duration_seconds", "上传视频总时长秒数")
|
||
_comment_column("shot_replicate_task_sets", "status", "总任务状态:pending_analysis/analyzing/analysis_done等")
|
||
_comment_column("shot_replicate_task_sets", "analysis_status", "AI分析状态:pending/processing/success/failed")
|
||
_comment_column("shot_replicate_task_sets", "split_status", "切片状态:none/slicing/sliced")
|
||
_comment_column("shot_replicate_task_sets", "original_video_content", "原视频内容描述")
|
||
_comment_column("shot_replicate_task_sets", "original_video_category", "原视频行业分类")
|
||
_comment_column("shot_replicate_task_sets", "original_video_audience", "原视频目标受众")
|
||
_comment_column("shot_replicate_task_sets", "ai_suggestion_json", "AI复刻建议JSON")
|
||
_comment_column("shot_replicate_task_sets", "analysis_raw_json", "AI分析原始JSON")
|
||
_comment_column("shot_replicate_task_sets", "analysis_result_json", "AI分析结果JSON")
|
||
_comment_column("shot_replicate_task_sets", "segment_count", "总拆镜头数")
|
||
_comment_column("shot_replicate_task_sets", "completed_segment_count", "已完成镜头数")
|
||
_comment_column("shot_replicate_task_sets", "failed_segment_count", "失败镜头数")
|
||
_comment_column("shot_replicate_task_sets", "analysis_attempt_no", "AI分析尝试次数")
|
||
_comment_column("shot_replicate_task_sets", "analysis_claim_token", "AI分析租约token")
|
||
_comment_column("shot_replicate_task_sets", "analysis_started_at", "AI分析开始时间")
|
||
_comment_column("shot_replicate_task_sets", "analysis_lease_until", "AI分析租约过期")
|
||
_comment_column("shot_replicate_task_sets", "analysis_error_message", "AI分析错误信息")
|
||
_comment_column("shot_replicate_task_sets", "split_error_message", "切片错误信息")
|
||
_comment_column("shot_replicate_task_sets", "idempotency_key", "幂等键")
|
||
_comment_column("shot_replicate_task_sets", "created_at", "创建时间")
|
||
_comment_column("shot_replicate_task_sets", "updated_at", "更新时间")
|
||
_comment_column("shot_replicate_task_sets", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# teams 表(已经有部分comment,补齐未加的)
|
||
# ============================================================
|
||
_comment_table("teams", "团队表")
|
||
_comment_column("teams", "id", "主键ID")
|
||
_comment_column("teams", "name", "团队名称")
|
||
_comment_column("teams", "code", "团队编码")
|
||
_comment_column("teams", "description", "团队备注")
|
||
_comment_column("teams", "status", "团队状态:active启用,disabled禁用")
|
||
_comment_column("teams", "sort_order", "排序值,越小越靠前")
|
||
_comment_column("teams", "manager_id", "团队管理人ID")
|
||
_comment_column("teams", "created_at", "创建时间")
|
||
_comment_column("teams", "updated_at", "更新时间")
|
||
_comment_column("teams", "deleted_at", "软删除时间")
|
||
|
||
# ============================================================
|
||
# user_resource_capacity_configs 表(已部分有comment)
|
||
# ============================================================
|
||
_comment_table("user_resource_capacity_configs", "用户个人容量配置表")
|
||
_comment_column("user_resource_capacity_configs", "id", "主键ID")
|
||
_comment_column("user_resource_capacity_configs", "user_id", "用户ID")
|
||
_comment_column("user_resource_capacity_configs", "enabled", "是否启用该用户个人容量限制")
|
||
_comment_column("user_resource_capacity_configs", "limit_value", "容量数值,最小1,最多3位小数")
|
||
_comment_column("user_resource_capacity_configs", "limit_unit", "容量单位:MB/GB/TB")
|
||
_comment_column("user_resource_capacity_configs", "limit_bytes", "换算后的容量字节数")
|
||
_comment_column("user_resource_capacity_configs", "created_at", "创建时间")
|
||
_comment_column("user_resource_capacity_configs", "updated_at", "更新时间")
|
||
|
||
# ============================================================
|
||
# resources_material 表(已部分有comment)
|
||
# ============================================================
|
||
_comment_table("resources_material", "资源素材对接表(第三方平台素材同步)")
|
||
_comment_column("resources_material", "id", "主键")
|
||
_comment_column("resources_material", "oauth_id", "授权表user_oauth自增id")
|
||
_comment_column("resources_material", "advertiser_id", "广告主id")
|
||
_comment_column("resources_material", "target_table", "资源表名称")
|
||
_comment_column("resources_material", "target_id", "资源表id")
|
||
_comment_column("resources_material", "material_id", "素材id")
|
||
_comment_column("resources_material", "upload_id", "上传资源平台id,图片id,视频id")
|
||
_comment_column("resources_material", "resource_type", "资源类型,image或者video")
|
||
_comment_column("resources_material", "user_id", "用户登录id")
|
||
_comment_column("resources_material", "task_id", "前测任务id")
|
||
_comment_column("resources_material", "note", "前测失败备注或者其他备注")
|
||
_comment_column("resources_material", "status", "前测状态(FAILED/PENDING/SUCCESS)")
|
||
_comment_column("resources_material", "pre_result", "前测结果,JSON数组对象")
|
||
_comment_column("resources_material", "pre_test_template_id", "前测模板id")
|
||
_comment_column("resources_material", "created_at", "创建时间")
|
||
_comment_column("resources_material", "updated_at", "更新时间")
|
||
_comment_column("resources_material", "deleted_at", "软删除时间")
|
||
|
||
|
||
def downgrade() -> None:
|
||
# 注释回滚时选择清空所有注释即可,不影响功能
|
||
op.execute("""
|
||
DO $$
|
||
DECLARE
|
||
r record;
|
||
BEGIN
|
||
FOR r IN
|
||
SELECT table_name, column_name
|
||
FROM information_schema.columns
|
||
WHERE table_schema = 'public'
|
||
AND table_name IN (
|
||
'users', 'projects', 'credit_ratios', 'credit_records',
|
||
'chat_generation_tasks', 'generation_records',
|
||
'generated_resources', 'upload_resources',
|
||
'image_engines', 'video_engines', 'model_configs',
|
||
'system_configs', 'operation_logs', 'notifications',
|
||
'recharge_packages', 'payment_orders',
|
||
'video_upscale_tasks', 'shot_replicate_task_sets',
|
||
'teams', 'user_resource_capacity_configs',
|
||
'resources_material'
|
||
)
|
||
LOOP
|
||
EXECUTE format('COMMENT ON COLUMN %I.%I IS NULL', r.table_name, r.column_name);
|
||
END LOOP;
|
||
END $$;
|
||
""")
|
||
# 清空表注释
|
||
for t in [
|
||
"users", "projects", "credit_ratios", "credit_records",
|
||
"chat_generation_tasks", "generation_records",
|
||
"generated_resources", "upload_resources",
|
||
"image_engines", "video_engines", "model_configs",
|
||
"system_configs", "operation_logs", "notifications",
|
||
"recharge_packages", "payment_orders",
|
||
"video_upscale_tasks", "shot_replicate_task_sets",
|
||
"teams", "user_resource_capacity_configs",
|
||
"resources_material",
|
||
]:
|
||
op.execute(f"COMMENT ON TABLE {t} IS NULL")
|