From 0dd31f5a4f20a4b9f3165b6267972fb89080523c Mon Sep 17 00:00:00 2001 From: Zayden Jung Date: Sun, 17 May 2026 22:37:43 +0800 Subject: [PATCH] create workspace table & workspace-user membership --- app/models/workspace.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 app/models/workspace.py diff --git a/app/models/workspace.py b/app/models/workspace.py new file mode 100644 index 0000000..c380a06 --- /dev/null +++ b/app/models/workspace.py @@ -0,0 +1,31 @@ +from sqlalchemy import Column, DateTime, String, ForeignKey, BigInteger, UniqueConstraint +from sqlalchemy.sql import func +from .base import AutoID, Base + +class Workspace(Base, AutoID): + """工作区表""" + __tablename__ = "workspaces" + + name = Column(String, nullable=False) + # 存储容量上限(单位:字节 Bytes),默认 5GB + storage_limit = Column(BigInteger, default=5 * 1024 * 1024 * 1024) + + created_at = Column(DateTime(timezone=True), server_default=func.now()) + + +class WorkspaceMember(Base, AutoID): + """工作区成员及权限表""" + __tablename__ = "workspace_members" + + workspace_id = Column(String(32), ForeignKey("workspaces.id", ondelete="CASCADE"), index=True) + user_id = Column(String(32), ForeignKey("users.id", ondelete="CASCADE"), index=True) + + # 角色权限:'owner' (所有者), 'admin' (管理员), 'user' (普通用户) + role = Column(String, default="user", nullable=False) + + created_at = Column(DateTime(timezone=True), server_default=func.now()) + + # 一个用户在一个工作区只能有一条记录 + __table_args__ = ( + UniqueConstraint("workspace_id", "user_id", name="uq_workspace_user"), + ) \ No newline at end of file