68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
"""记录 task 标题来源,支持清空后安全地重新自动命名。
|
||
|
||
Revision ID: 0024
|
||
Revises: 0023
|
||
Create Date: 2026-07-31
|
||
|
||
新增 title_source:auto / manual / fixed,以及防止旧标题结果跨清空轮次写回的
|
||
auto_title_version。历史数据无法可靠区分“自动命名后又人工改名”,因此仅把仍
|
||
处于 auto_title_pending 的行回填为 auto;渠道与调度任务回填 fixed,其余保守为
|
||
manual,避免清空时覆盖人工标题。
|
||
"""
|
||
from typing import Sequence, Union
|
||
|
||
import sqlalchemy as sa
|
||
from alembic import op
|
||
|
||
|
||
revision: str = "0024"
|
||
down_revision: Union[str, None] = "0023"
|
||
branch_labels: Union[str, Sequence[str], None] = None
|
||
depends_on: Union[str, Sequence[str], None] = None
|
||
|
||
|
||
def upgrade() -> None:
|
||
op.add_column(
|
||
"tasks",
|
||
sa.Column(
|
||
"title_source",
|
||
sa.Text(),
|
||
nullable=False,
|
||
server_default="manual",
|
||
),
|
||
)
|
||
op.add_column(
|
||
"tasks",
|
||
sa.Column(
|
||
"auto_title_version",
|
||
sa.Integer(),
|
||
nullable=False,
|
||
server_default="0",
|
||
),
|
||
)
|
||
op.execute(
|
||
"""
|
||
UPDATE tasks
|
||
SET title_source = 'fixed'
|
||
WHERE channel <> 'web' OR scheduled_job_id IS NOT NULL
|
||
"""
|
||
)
|
||
op.execute(
|
||
"""
|
||
UPDATE tasks
|
||
SET title_source = 'auto'
|
||
WHERE title_source = 'manual' AND auto_title_pending = true
|
||
"""
|
||
)
|
||
op.create_check_constraint(
|
||
"ck_tasks_title_source",
|
||
"tasks",
|
||
"title_source IN ('auto', 'manual', 'fixed')",
|
||
)
|
||
|
||
|
||
def downgrade() -> None:
|
||
op.drop_constraint("ck_tasks_title_source", "tasks", type_="check")
|
||
op.drop_column("tasks", "auto_title_version")
|
||
op.drop_column("tasks", "title_source")
|