Browse Source

narrators filters added to narrators sync api

master
Mohsen Taba 1 month ago
parent
commit
880f5492c5
  1. 7
      apps/hadis/docs.py
  2. 55
      apps/hadis/views/transmitter.py

7
apps/hadis/docs.py

@ -1384,6 +1384,13 @@ transmitter_sync_swagger = swagger_auto_schema(
examples={
"application/json": {
"count": 10,
"filters": {
"generations": [1, 2, 3],
"madhabs": ["shia", "sunni", "unknown"],
"reliabilities": [
{"text": "Very Reliable", "slug": "very-reliable"}
]
},
"results": [
{
"id": 51,

55
apps/hadis/views/transmitter.py

@ -141,12 +141,40 @@ class TransmitterSyncView(ListAPIView):
response_data = {
'count': len(serializer.data), # ← No extra query!
'filters': get_transmitter_filters(request),
'results': serializer.data
}
return Response(response_data)
def get_transmitter_filters(request):
# Get all unique generations
generations = Transmitters.objects.exclude(generation__isnull=True).values_list('generation', flat=True).distinct().order_by('generation')
# Get madhhab choices
madhabs = []
for choice in Transmitters.MadhhabChoices:
madhabs.append(choice.value)
# Get reliabilities from TransmitterReliability model
from ..models.transmitter import TransmitterReliability
reliabilities = []
for reliability in TransmitterReliability.objects.all().order_by('id'):
# Get the English title for the slug
if reliability.title:
reliabilities.append({
'text': get_localized_text(reliability.title, request),
'slug': reliability.slug
})
return {
'generations': list(generations),
'madhabs': madhabs,
'reliabilities': reliabilities
}
class TransmitterFiltersView(ListAPIView):
"""
API view to return filter data for transmitters
@ -163,30 +191,5 @@ class TransmitterFiltersView(ListAPIView):
return Transmitters.objects.none()
def list(self, request, *args, **kwargs):
# Get all unique generations
generations = Transmitters.objects.exclude(generation__isnull=True).values_list('generation', flat=True).distinct().order_by('generation')
# Get madhhab choices
madhabs = []
for choice in Transmitters.MadhhabChoices:
madhabs.append(choice.value)
# Get reliabilities from TransmitterReliability model
from ..models.transmitter import TransmitterReliability
reliabilities = []
for reliability in TransmitterReliability.objects.all().order_by('id'):
# Get the English title for the slug
if reliability.title:
reliabilities.append({
'text': get_localized_text(reliability.title,request),
'slug': reliability.slug
})
response_data = {
'generations': list(generations),
'madhabs': madhabs,
'reliabilities': reliabilities
}
return Response(response_data)
return Response(get_transmitter_filters(request))
Loading…
Cancel
Save