ref
This commit is contained in:
@@ -47,6 +47,35 @@ class WorkspaceMemberOutput(pydantic.BaseModel):
|
||||
user: WorkspaceMemberUserOutput
|
||||
permissions: list[WorkspacePermissionOutput]
|
||||
|
||||
@classmethod
|
||||
def from_domain(cls, member: domain.WorkspaceUser) -> 'WorkspaceMemberOutput':
|
||||
if member.user is None:
|
||||
raise ValueError('Workspace member user relation is not loaded')
|
||||
|
||||
permissions_map: dict[domain.PermissionKey, list[WorkspacePermissionScopeOutput]] = {}
|
||||
|
||||
for permission in getattr(member, 'permissions', []) or []:
|
||||
permissions_map.setdefault(permission.permission, [])
|
||||
|
||||
for scope in getattr(member, 'permission_scopes', []) or []:
|
||||
permissions_map.setdefault(scope.permission, []).append(
|
||||
WorkspacePermissionScopeOutput(type=scope.scope_type, id=scope.scope_id)
|
||||
)
|
||||
|
||||
return cls(
|
||||
id=member.id,
|
||||
status=member.status,
|
||||
user=WorkspaceMemberUserOutput(
|
||||
id=member.user.id,
|
||||
telegram_id=member.user.telegram_id,
|
||||
username=member.user.username,
|
||||
),
|
||||
permissions=[
|
||||
WorkspacePermissionOutput(key=key, scopes=scopes)
|
||||
for key, scopes in sorted(permissions_map.items(), key=lambda item: item[0].value)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
class GetWorkspaceMembersOutput(pydantic.BaseModel):
|
||||
members: list[WorkspaceMemberOutput]
|
||||
@@ -119,6 +148,26 @@ class WorkspaceInviteOutput(pydantic.BaseModel):
|
||||
user: WorkspaceMemberUserOutput
|
||||
invited_by: WorkspaceMemberUserOutput
|
||||
|
||||
@classmethod
|
||||
def from_domain(cls, invite: domain.WorkspaceInvite) -> 'WorkspaceInviteOutput':
|
||||
if invite.user is None or invite.invited_by is None:
|
||||
raise ValueError('Workspace invite relations are not loaded')
|
||||
|
||||
return cls(
|
||||
id=invite.id,
|
||||
status=invite.status,
|
||||
user=WorkspaceMemberUserOutput(
|
||||
id=invite.user.id,
|
||||
telegram_id=invite.user.telegram_id,
|
||||
username=invite.user.username,
|
||||
),
|
||||
invited_by=WorkspaceMemberUserOutput(
|
||||
id=invite.invited_by.id,
|
||||
telegram_id=invite.invited_by.telegram_id,
|
||||
username=invite.invited_by.username,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class GetWorkspaceInvitesOutput(pydantic.BaseModel):
|
||||
invites: list[WorkspaceInviteOutput]
|
||||
|
||||
Reference in New Issue
Block a user