You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
3.0 KiB
76 lines
3.0 KiB
from rest_framework import serializers
|
|
from drf_spectacular.utils import extend_schema_field
|
|
from apps.profiles.models.institution import Institution
|
|
|
|
|
|
class MapInstitutionMarkerSerializer(serializers.ModelSerializer):
|
|
type_display = serializers.CharField(source='get_type_display', read_only=True)
|
|
lat = serializers.FloatField(source='latitude', read_only=True)
|
|
lng = serializers.FloatField(source='longitude', read_only=True)
|
|
|
|
class Meta:
|
|
model = Institution
|
|
fields = [
|
|
'id',
|
|
'name',
|
|
'slug',
|
|
'type',
|
|
'type_display',
|
|
'lat',
|
|
'lng',
|
|
'city',
|
|
'country',
|
|
'avatar',
|
|
'cover_image',
|
|
'verification_status',
|
|
'is_featured',
|
|
'follower_count',
|
|
]
|
|
read_only_fields = fields
|
|
|
|
|
|
class MapClusterItemSerializer(serializers.Serializer):
|
|
is_cluster = serializers.BooleanField()
|
|
# Fields when is_cluster=False
|
|
id = serializers.IntegerField(required=False, allow_null=True)
|
|
name = serializers.CharField(required=False, allow_null=True)
|
|
slug = serializers.CharField(required=False, allow_null=True)
|
|
type = serializers.CharField(required=False, allow_null=True)
|
|
type_display = serializers.CharField(required=False, allow_null=True)
|
|
city = serializers.CharField(required=False, allow_null=True)
|
|
country = serializers.CharField(required=False, allow_null=True)
|
|
avatar = serializers.CharField(required=False, allow_null=True)
|
|
cover_image = serializers.CharField(required=False, allow_null=True)
|
|
is_featured = serializers.BooleanField(required=False)
|
|
verification_status = serializers.CharField(required=False, allow_null=True)
|
|
follower_count = serializers.IntegerField(required=False)
|
|
# Fields when is_cluster=True
|
|
cluster_id = serializers.CharField(required=False)
|
|
count = serializers.IntegerField(required=False)
|
|
lat = serializers.FloatField()
|
|
lng = serializers.FloatField()
|
|
type_breakdown = serializers.DictField(required=False)
|
|
preview_institutions = serializers.ListField(required=False)
|
|
|
|
|
|
class RegionalDensitySerializer(serializers.Serializer):
|
|
country = serializers.CharField()
|
|
total_institutions = serializers.IntegerField()
|
|
mosques_count = serializers.IntegerField()
|
|
hussainiyas_count = serializers.IntegerField()
|
|
cultural_centers_count = serializers.IntegerField()
|
|
libraries_count = serializers.IntegerField()
|
|
institutes_count = serializers.IntegerField()
|
|
charities_count = serializers.IntegerField()
|
|
total_followers = serializers.IntegerField()
|
|
center_lat = serializers.FloatField(allow_null=True)
|
|
center_lng = serializers.FloatField(allow_null=True)
|
|
|
|
|
|
class MapStatsSerializer(serializers.Serializer):
|
|
total_institutions = serializers.IntegerField()
|
|
total_countries = serializers.IntegerField()
|
|
total_cities = serializers.IntegerField()
|
|
type_distribution = serializers.DictField()
|
|
verified_count = serializers.IntegerField()
|
|
featured_count = serializers.IntegerField()
|