Files
training-software/accounts/serializers.py
Paperclip CTO 5ed7cf2225 fix(api): close contract gaps identified in TRA-398 API review
- 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>
2026-05-19 08:57:59 +02:00

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},
}