Dynavera/apps/orgs/serializers.py

75 lines
2.9 KiB
Python
Raw Normal View History

from rest_framework.serializers import ModelSerializer, SerializerMethodField, IntegerField
from apps.orgs.models import Organization, OrganizationMembership, OrganizationInvitation, Role, RoleMembership
from apps.users.serializers import UserSerializer
class OrganizationSerializer(ModelSerializer):
owner = UserSerializer(read_only = True)
member_count = SerializerMethodField()
role_count = SerializerMethodField()
class Meta:
model = Organization
fields = ['id', 'uuid', 'name', 'description', 'owner', 'created_at', 'updated_at', 'member_count', 'role_count']
read_only_fields = ['uuid', 'owner', 'created_at', 'updated_at']
def get_member_count(self, obj):
return obj.memberships.count()
def get_role_count(self, obj):
return obj.roles.count()
class OrganizationMembershipSerializer(ModelSerializer):
user = UserSerializer(read_only = True)
user_id = IntegerField(write_only = True, required = False)
class Meta:
model = OrganizationMembership
fields = ['id', 'user', 'user_id', 'organization', 'created_at', 'updated_at']
read_only_fields = ['organization', 'created_at', 'updated_at']
def create(self, validated_data):
user_id = validated_data.pop('user_id', None)
if user_id:
validated_data['user_id'] = user_id
return super().create(validated_data)
class OrganizationInvitationSerializer(ModelSerializer):
created_by = UserSerializer(read_only = True)
used_by = UserSerializer(read_only = True, many=True)
invite_url = SerializerMethodField()
is_valid = SerializerMethodField()
class Meta:
model = OrganizationInvitation
fields = ['id', 'token', 'organization', 'created_by', 'expires_at', 'used_by', 'max_uses', 'is_active', 'invite_url', 'is_valid', 'created_at', 'updated_at']
read_only_fields = ['token', 'organization', 'created_by', 'used_by', 'max_uses', 'created_at', 'updated_at']
def get_invite_url(self, obj):
request = self.context.get('request')
if request:
return request.build_absolute_uri(f'/invite/{obj.token}')
return f'/invite/{obj.token}'
def get_is_valid(self, obj):
return obj.is_valid()
class RoleMembershipSerializer(ModelSerializer):
user = UserSerializer(read_only = True)
class Meta:
model = RoleMembership
fields = ['id', 'user', 'role', 'created_at']
read_only_fields = ['created_at']
class RoleSerializer(ModelSerializer):
organization = OrganizationSerializer(read_only = True)
member_count = SerializerMethodField()
class Meta:
model = Role
fields = ['id', 'uuid', 'name', 'organization', 'member_count', 'description', 'created_at', 'updated_at']
read_only_fields = ['uuid', 'organization', 'created_at', 'updated_at']
def get_member_count(self, obj):
return obj.memberships.count()