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/算力)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user