"""demo workspaces and users Revision ID: 20260728_0002 Revises: 20260724_0001 Create Date: 2026-07-28 """ from collections.abc import Sequence from alembic import op revision: str = "20260728_0002" down_revision: str | Sequence[str] | None = "20260724_0001" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None ADMIN_ROLE = "0000000000HNQN4KM476QNKW1C" DEVELOPER_ROLE = "00000000005RCQ4GPGBK3WZYMM" MODEL_WORKSPACE = "00000000000BM630VT9ARVFZPC" RISK_WORKSPACE = "0000000000AE0NC0V5T424KK86" ZHANG = "0000000000RF6FG1SDBXG59S13" LI = "0000000000H2QYCGPCWQM1JSGS" WANG = "0000000000RWG40ESZPGJT629J" ZHAO = "00000000004CQV7WASJA6N6FW4" def upgrade() -> None: op.execute( f""" INSERT INTO roles (role_id, role_code, role_name, role_scope, is_builtin) VALUES ('{ADMIN_ROLE}', 'admin', '管理员', 'workspace', 1), ('{DEVELOPER_ROLE}', 'developer', '开发人员', 'workspace', 1) ON DUPLICATE KEY UPDATE role_name = VALUES(role_name), role_scope = VALUES(role_scope) """ ) op.execute( f""" INSERT INTO users (user_id, username, display_name, password_hash, status, email) VALUES ('{ZHANG}', 'admin-zhang', '张三', 'demo-login-disabled', 'active', 'zhangsan@example.local'), ('{LI}', 'admin-li', '李四', 'demo-login-disabled', 'active', 'lisi@example.local'), ('{WANG}', 'dev-wang', '王五', 'demo-login-disabled', 'active', 'wangwu@example.local'), ('{ZHAO}', 'dev-zhao', '赵六', 'demo-login-disabled', 'active', 'zhaoliu@example.local') ON DUPLICATE KEY UPDATE username = VALUES(username), display_name = VALUES(display_name), status = 'active', email = VALUES(email) """ ) op.execute( f""" INSERT INTO workspaces (workspace_id, workspace_code, workspace_name, active_root_uri, quota_bytes, used_bytes, status, created_by, description, artifact_bucket, artifact_prefix) VALUES ('{MODEL_WORKSPACE}', 'model-dev', '模型开发 Workspace', 'file:///workspace/workspaces/model-dev', 0, 0, 'active', '{ZHANG}', '模型开发与脚本调度', 'model-platform', 'workspaces/model-dev'), ('{RISK_WORKSPACE}', 'risk-validation', '风险验证 Workspace', 'file:///workspace/workspaces/risk-validation', 0, 0, 'active', '{LI}', '风险模型验证与批处理', 'model-platform', 'workspaces/risk-validation') ON DUPLICATE KEY UPDATE workspace_name = VALUES(workspace_name), active_root_uri = VALUES(active_root_uri), status = 'active', description = VALUES(description) """ ) values = [] for workspace_id in (MODEL_WORKSPACE, RISK_WORKSPACE): for user_id, role_id in ( (ZHANG, ADMIN_ROLE), (LI, ADMIN_ROLE), (WANG, DEVELOPER_ROLE), (ZHAO, DEVELOPER_ROLE), ): values.append( f"('{workspace_id}', '{user_id}', '{role_id}', 'active')" ) op.execute( """ INSERT INTO workspace_members (workspace_id, user_id, role_id, member_status) VALUES """ + ",\n".join(values) + """ ON DUPLICATE KEY UPDATE role_id = VALUES(role_id), member_status = 'active' """ ) def downgrade() -> None: # 演示身份可能已产生业务数据,降级时保留,避免破坏外键引用。 pass