Files
server-core/alembic/versions/0006_user_source_fields.py
T
Pine 879396b532 feat(user): 全局用户准确来源 + 丰富跨端字段(全端口兼容)
- users 增: wx_unionid/wx_mini_openid(微信绑定), source(来源枚举), auth_type, register_ip, last_login_ip/at, email, gender, birthday, compute_provisioned/username/quota/used_quota(算力镜像); alembic 0006
- 来源: register/phone-login/wx-login(读 X-Client 头,回退 body.source,再回退按 auth_type 推断)、admin 创建=admin、seed=seed
- auth: 登录(签发令牌)记 last_login; profile 返回 source/auth_type/compute; email/gender/birthday 可编辑
- 对账 sync-users 回写 compute_* 镜像到平台用户
- _user_to_dict 含全部新字段; 迁移已应用, 导入/零依赖校验通过(dict 含 source/算力)
2026-08-25 16:21:20 +08:00

44 lines
1.6 KiB
Python

"""user source/rich fields
Revision ID: 0006_user_source_fields
Revises: 0005_park_settings
Create Date: 2026-08-25
"""
from __future__ import annotations
from alembic import op
import sqlalchemy as sa
revision = "0006_user_source_fields"
down_revision = "0005_park_settings"
branch_labels = None
depends_on = None
def _add(table, col):
conn = op.get_bind()
cols = {r[1] for r in conn.execute(sa.text(f"PRAGMA table_info({table})"))}
if col.name not in cols:
op.add_column(table, col)
def upgrade() -> None:
_add("users", sa.Column("wx_unionid", sa.String, server_default=""))
_add("users", sa.Column("wx_mini_openid", sa.String, server_default=""))
_add("users", sa.Column("email", sa.String, server_default=""))
_add("users", sa.Column("gender", sa.String, server_default=""))
_add("users", sa.Column("birthday", sa.String, server_default=""))
_add("users", sa.Column("source", sa.String, server_default=""))
_add("users", sa.Column("auth_type", sa.String, server_default=""))
_add("users", sa.Column("register_ip", sa.String, server_default=""))
_add("users", sa.Column("last_login_ip", sa.String, server_default=""))
_add("users", sa.Column("last_login_at", sa.String, server_default=""))
_add("users", sa.Column("compute_provisioned", sa.Boolean, server_default="0"))
_add("users", sa.Column("compute_username", sa.String, server_default=""))
_add("users", sa.Column("compute_quota", sa.Integer, server_default="0"))
_add("users", sa.Column("compute_used_quota", sa.Integer, server_default="0"))
def downgrade() -> None:
pass