From 90c34949b8789db951bab3103ed6ebb4fac3efbc Mon Sep 17 00:00:00 2001 From: Xiaoxia AI Date: Wed, 17 Jun 2026 01:27:15 +0800 Subject: [PATCH] feat(workspace): add WorkspaceInvitation entity - Add InvitationStatus enum (pending/accepted/declined/expired) - Add WorkspaceInvitation entity to track invitation lifecycle - Store inviter, invitee email, role, and invitation token - Track status, expiration, and acceptance time - Foundation for workspace invitation system Phase 4 Task 11/68 completed --- packages/domain/entities.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/domain/entities.py b/packages/domain/entities.py index f86a75d8c..85076ccf9 100644 --- a/packages/domain/entities.py +++ b/packages/domain/entities.py @@ -60,6 +60,14 @@ class WorkspaceMemberRole(StrEnum): VIEWER = "viewer" # 查看者(只读) +class InvitationStatus(StrEnum): + """邀请状态""" + PENDING = "pending" # 待处理 + ACCEPTED = "accepted" # 已接受 + DECLINED = "declined" # 已拒绝 + EXPIRED = "expired" # 已过期 + + @dataclass(slots=True) class WorkspaceMember: """工作空间成员""" @@ -71,6 +79,21 @@ class WorkspaceMember: joined_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc)) +@dataclass(slots=True) +class WorkspaceInvitation: + """工作空间邀请""" + id: str + workspace_id: str + inviter_user_id: str # 邀请人 + invitee_email: str # 被邀请人邮箱 + role: str # 邀请角色 + invitation_token: str # 邀请令牌 + status: str = "pending" # pending, accepted, declined, expired + expires_at: datetime | None = None # 过期时间 + accepted_at: datetime | None = None # 接受时间 + created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc)) + + @dataclass(slots=True) class Project: id: str