54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
from rest_framework import serializers
|
|
|
|
from core.serializers.base import BaseModelSerializer
|
|
from apps.workspaces.models import Workspace, WorkspaceMembership
|
|
|
|
|
|
class WorkspaceMemberInputSerializer(serializers.Serializer):
|
|
user_id = serializers.UUIDField()
|
|
role = serializers.ChoiceField(choices=WorkspaceMembership.Role.choices, default=WorkspaceMembership.Role.MEMBER)
|
|
|
|
|
|
class WorkspaceSerializer(BaseModelSerializer):
|
|
members = WorkspaceMemberInputSerializer(many=True, write_only=True, required=False)
|
|
|
|
class Meta:
|
|
model = Workspace
|
|
fields = BaseModelSerializer.Meta.fields + (
|
|
"name",
|
|
"description",
|
|
"members",
|
|
)
|
|
|
|
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.get('role', 'member'),
|
|
is_active=True
|
|
)
|
|
)
|
|
|
|
if memberships_to_create:
|
|
WorkspaceMembership.objects.bulk_create(memberships_to_create)
|
|
|
|
return workspace
|
|
|
|
|
|
class WorkspaceMembershipSerializer(BaseModelSerializer):
|
|
class Meta:
|
|
model = WorkspaceMembership
|
|
fields = BaseModelSerializer.Meta.fields + (
|
|
"workspace",
|
|
"user",
|
|
"role",
|
|
"is_active",
|
|
)
|