"""qrcode login (Phase 1.1)

Revision ID: 022_qrcode_login
Revises: 021_rbac
Create Date: 2026-06-21

Phase 1.1 扫码登录后端接口(task #14)。

设计说明:
  扫码登录的所有状态都存在 Redis(无需新增数据库表):
    - qrcode:ticket:{ticket}   → {created_at, expires_at}, TTL 120s
    - qrcode:scan:{ticket}     → {employee_id, name, scanned_at}, TTL 120s
    - qrcode:confirm:{ticket}  → {token, confirmed_at, roles}, TTL 60s

  不动 User / Agent 模型(MFA 字段留给 Phase 2.1)。
  不动 auth2fa.py(SMS 备用通道保留)。

为什么仍然生成这个 migration 文件:
  1. alembic 版本链不能断,021 → 022 必须存在(后续 023+ 需要接续)
  2. 标记 Phase 1.1 上线,方便运维追溯和回滚标记
  3. upgrade()/downgrade() 都是空操作,因为没有 schema 变更

运维注意事项:
  - 该 migration 不需要执行 SQL(已注释),但需要"alembic stamp 022"让 alembic_version 表对齐
  - 如果未来扫码登录要持久化历史记录(审计/防滥用),再追加 023_qrcode_audit.py 加 qrcode_login_logs 表
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = "022_qrcode_login"
down_revision = "021_rbac"
branch_labels = None
depends_on = None


def upgrade() -> None:
    """Phase 1.1 扫码登录无 schema 变更,upgrade 留空。

    预留说明: 如果部署时 alembic stamp 未执行,导致 backend 启动报
    "alembic_version" mismatch,只需 `alembic stamp 022` 即可对齐。
    """
    # 故意 pass:扫码登录的所有数据存 Redis,无 DB schema 变更
    pass


def downgrade() -> None:
    """Phase 1.1 扫码登录无 schema 变更,downgrade 留空。"""
    # 故意 pass
    pass