from rest_framework import serializers class IPGeolocationSerializer(serializers.Serializer): """Serializer for IP geolocation response""" ip = serializers.IPAddressField(read_only=True, required=False) country = serializers.CharField(max_length=100, allow_null=True, allow_blank=True, read_only=True, required=False) country_code = serializers.CharField(max_length=10, allow_null=True, allow_blank=True, read_only=True, required=False) city = serializers.CharField(max_length=100, allow_null=True, allow_blank=True, read_only=True, required=False) latitude = serializers.FloatField(allow_null=True, read_only=True, required=False) longitude = serializers.FloatField(allow_null=True, read_only=True, required=False) accuracy_radius = serializers.IntegerField(allow_null=True, read_only=True, required=False) time_zone = serializers.CharField(max_length=100, allow_null=True, allow_blank=True, read_only=True, required=False) postal_code = serializers.CharField(max_length=20, allow_null=True, allow_blank=True, read_only=True, required=False) class ReverseGeolocationSerializer(serializers.Serializer): """Serializer for reverse geolocation request query parameters""" lat = serializers.FloatField( required=True, min_value=-90.0, max_value=90.0, help_text="Latitude coordinate (-90 to 90)" ) lon = serializers.FloatField( required=True, min_value=-180.0, max_value=180.0, help_text="Longitude coordinate (-180 to 180)" ) class ReverseGeolocationResponseSerializer(serializers.Serializer): """Serializer for reverse geolocation response""" latitude = serializers.FloatField(read_only=True) longitude = serializers.FloatField(read_only=True) city = serializers.CharField(max_length=100, allow_null=True, read_only=True) country = serializers.CharField(max_length=100, allow_null=True, read_only=True) country_code = serializers.CharField(max_length=10, allow_null=True, read_only=True) accuracy_radius = serializers.IntegerField(allow_null=True, read_only=True, required=False) time_zone = serializers.CharField(max_length=100, allow_null=True, allow_blank=True, read_only=True, required=False) postal_code = serializers.CharField(max_length=20, allow_null=True, allow_blank=True, read_only=True, required=False)