- EmployeeAttendanceSerializer: add meeting_title (source: meeting.title) fixes attendance.js rendering r.meeting_title as undefined - MeetingParticipantSerializer: add user_email and user_display_name so meeting detail participant list shows human-readable identity - OrganizationProfileListCreateView: add GET handler to list org profiles (previously POST-only, returning 405 on GET) - UserProfileSerializer: add org_ids derived from role_bindings so frontend can resolve which org profile to load for branding Co-Authored-By: Paperclip <noreply@paperclip.ing>
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models import AccountUser, OrganizationProfile, Role, UserRoleBinding
|
|
|
|
|
|
class RoleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Role
|
|
fields = ["slug", "name"]
|
|
|
|
|
|
class UserRoleBindingSerializer(serializers.ModelSerializer):
|
|
role_slug = serializers.CharField(source="role.slug", read_only=True)
|
|
|
|
class Meta:
|
|
model = UserRoleBinding
|
|
fields = ["role_slug", "org_id", "source"]
|
|
|
|
|
|
class UserProfileSerializer(serializers.ModelSerializer):
|
|
roles = serializers.SerializerMethodField()
|
|
org_ids = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = AccountUser
|
|
fields = ["id", "email", "display_name", "is_active", "last_login_at", "created_at", "roles", "org_ids"]
|
|
read_only_fields = fields
|
|
|
|
def get_roles(self, obj):
|
|
return list(
|
|
obj.role_bindings.select_related("role").values_list("role__slug", flat=True)
|
|
)
|
|
|
|
def get_org_ids(self, obj):
|
|
return list(
|
|
obj.role_bindings.exclude(org_id=None)
|
|
.values_list("org_id", flat=True)
|
|
.distinct()
|
|
)
|
|
|
|
|
|
class UserListSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AccountUser
|
|
fields = ["id", "email", "display_name", "is_active", "created_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class RolePatchSerializer(serializers.Serializer):
|
|
role_slugs = serializers.ListField(child=serializers.CharField(), allow_empty=True)
|
|
org_id = serializers.UUIDField(required=False, allow_null=True, default=None)
|
|
|
|
|
|
class OrganizationProfileSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = OrganizationProfile
|
|
fields = [
|
|
"org_id",
|
|
"company_name",
|
|
"license_user_limit",
|
|
"brand_logo_url",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
read_only_fields = ["created_at", "updated_at"]
|
|
|
|
|
|
class OrganizationProfileCreateSerializer(serializers.ModelSerializer):
|
|
# Suppress the auto-added UniqueValidator so we can return 409 instead of 400.
|
|
org_id = serializers.UUIDField(validators=[])
|
|
|
|
class Meta:
|
|
model = OrganizationProfile
|
|
fields = ["org_id", "company_name", "license_user_limit", "brand_logo_url"]
|
|
extra_kwargs = {
|
|
"license_user_limit": {"required": False},
|
|
"brand_logo_url": {"required": False},
|
|
}
|