"""tasks.channel 列(渠道来源:web / wechat).

Revision ID: 0013
Revises: 0012
Create Date: 2026-06-24

给 tasks 加 channel 列,标记任务来源渠道:
- web    = 网页端常规任务(默认)
- wechat = 微信 ClawBot 常驻对话(每用户一条)

只加列、不动现有数据;server_default='web' 让历史行自动回填为 web。建表后把
现网已存在的微信常驻 task(description = '(微信 ClawBot 对话)')backfill 成
'wechat',让置顶 / 徽章逻辑对存量数据立即生效。

前端据 channel 给微信任务打徽章并后端强制置顶(列表查询排序前置 pin 表达式)。
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op


revision: str = "0013"
down_revision: Union[str, None] = "0012"
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("channel", sa.Text(), nullable=False, server_default="web"),
    )
    # backfill 存量微信常驻 task —— 用建 task 时写死的 description 作标记。
    op.execute(
        "UPDATE tasks SET channel = 'wechat' "
        "WHERE description = '(微信 ClawBot 对话)'"
    )


def downgrade() -> None:
    op.drop_column("tasks", "channel")
