From 54762f491c9b62631789f37311e5f09754001c63 Mon Sep 17 00:00:00 2001 From: 1445043649 <> Date: Tue, 12 May 2026 22:15:05 +0800 Subject: [PATCH] feat(persistence): UserRow.default_workspace_id Adds a nullable FK column to mirror alembic 0001. On fresh deployments metadata.create_all() will create users with this column; existing deployments rely on the alembic migration to add it. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../packages/harness/deerflow/persistence/user/model.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/packages/harness/deerflow/persistence/user/model.py b/backend/packages/harness/deerflow/persistence/user/model.py index 6a04c98e..ecf9cb46 100644 --- a/backend/packages/harness/deerflow/persistence/user/model.py +++ b/backend/packages/harness/deerflow/persistence/user/model.py @@ -13,7 +13,7 @@ from __future__ import annotations from datetime import UTC, datetime -from sqlalchemy import Boolean, DateTime, Index, String, text +from sqlalchemy import Boolean, DateTime, ForeignKey, Index, String, text from sqlalchemy.orm import Mapped, mapped_column from deerflow.persistence.base import Base @@ -36,6 +36,12 @@ class UserRow(Base): oauth_id: Mapped[str | None] = mapped_column(String(128), nullable=True, comment="OAuth 提供商内的用户 ID;与 oauth_provider 组合需唯一") needs_setup: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False, comment="是否需要完成首次设置(admin 自动创建后改密码/邮箱)") token_version: Mapped[int] = mapped_column(nullable=False, default=0, comment="JWT 令牌版本号;自增即吊销该用户所有旧令牌") + default_workspace_id: Mapped[str | None] = mapped_column( + String(36), + ForeignKey("workspaces.id", ondelete="SET NULL"), + nullable=True, + comment="登录后默认进入的 workspace;NULL 时强制走 picker(user 多 workspace 场景)", + ) __table_args__ = ( Index(