from django.contrib.auth import get_user_model from rest_framework import serializers from apps.accounts.models import ApiKey User = get_user_model() class PkAsIdMixin(serializers.Serializer): """Keep JSON `id` stable after ERD-named primary keys.""" id = serializers.IntegerField(source="pk", read_only=True) class SlugPkAsIdMixin(serializers.Serializer): """JSON `id` for slug / string primary keys.""" id = serializers.CharField(source="pk", read_only=True) class UserSerializer(PkAsIdMixin, serializers.ModelSerializer): class Meta: model = User fields = ["id", "user_name", "display_name", "status", "created_at", "updated_at"] read_only_fields = ["id", "user_name", "created_at", "updated_at"] class LoginSerializer(serializers.Serializer): user_name = serializers.CharField(max_length=30) password = serializers.CharField(write_only=True) class ApiKeySerializer(serializers.ModelSerializer): class Meta: model = ApiKey fields = [ "id", "name", "prefix", "is_active", "last_used_at", "created_at", "updated_at", "user", ] read_only_fields = fields class ApiKeyCreateSerializer(serializers.Serializer): name = serializers.CharField(max_length=100) user_id = serializers.IntegerField(required=False)