feat(notifications): notify membership access changes
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.serializers.base import BaseModelSerializer
|
||||
from apps.workspaces.models import Workspace, WorkspaceMembership
|
||||
from core.serializers.mini import UserMiniSerializer
|
||||
from rest_framework import serializers
|
||||
|
||||
from apps.notifications.membership_events import notify_workspace_membership_added
|
||||
from apps.users.models import User
|
||||
from core.serializers.base import BaseModelSerializer
|
||||
from apps.workspaces.models import Workspace, WorkspaceMembership
|
||||
from core.serializers.mini import UserMiniSerializer
|
||||
|
||||
|
||||
class WorkspaceMemberInputSerializer(serializers.Serializer):
|
||||
@@ -34,26 +36,41 @@ class WorkspaceSerializer(BaseModelSerializer):
|
||||
).first()
|
||||
return getattr(membership, "role", None)
|
||||
|
||||
def create(self, validated_data):
|
||||
members_data = validated_data.pop('members', [])
|
||||
|
||||
workspace = super().create(validated_data)
|
||||
|
||||
memberships_to_create = []
|
||||
for member in members_data:
|
||||
memberships_to_create.append(
|
||||
def create(self, validated_data):
|
||||
members_data = validated_data.pop('members', [])
|
||||
|
||||
workspace = super().create(validated_data)
|
||||
|
||||
memberships_to_create = []
|
||||
for member in members_data:
|
||||
memberships_to_create.append(
|
||||
WorkspaceMembership(
|
||||
workspace=workspace,
|
||||
user_id=member['user_id'],
|
||||
role=member['role'],
|
||||
is_active=True
|
||||
)
|
||||
)
|
||||
|
||||
if memberships_to_create:
|
||||
WorkspaceMembership.objects.bulk_create(memberships_to_create)
|
||||
|
||||
return workspace
|
||||
)
|
||||
|
||||
if memberships_to_create:
|
||||
WorkspaceMembership.objects.bulk_create(memberships_to_create)
|
||||
request = self.context.get("request")
|
||||
actor = getattr(request, "user", None)
|
||||
if actor and actor.is_authenticated:
|
||||
users_by_id = User.objects.in_bulk(
|
||||
[member["user_id"] for member in members_data]
|
||||
)
|
||||
for member in members_data:
|
||||
recipient = users_by_id.get(member["user_id"])
|
||||
if recipient:
|
||||
notify_workspace_membership_added(
|
||||
actor=actor,
|
||||
recipient=recipient,
|
||||
workspace=workspace,
|
||||
role=member["role"],
|
||||
)
|
||||
|
||||
return workspace
|
||||
|
||||
|
||||
class WorkspaceMembershipSerializer(BaseModelSerializer):
|
||||
|
||||
Reference in New Issue
Block a user