Browse Source

transmitters endpoints added for dovoodi panel

master
Mohsen Taba 1 month ago
parent
commit
daff1a1bde
  1. 89
      apps/hadis/serializers/serializers_admin.py
  2. 5
      apps/hadis/urls.py
  3. 61
      apps/hadis/views_admin.py

89
apps/hadis/serializers/serializers_admin.py

@ -1,7 +1,8 @@
from rest_framework import serializers from rest_framework import serializers
from ..models import ( from ..models import (
Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisSect, Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisSect,
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType,
Transmitters, TransmitterReliability
) )
from .category import LocalizedField from .category import LocalizedField
@ -190,6 +191,91 @@ class AbsoluteFileField(serializers.FileField):
return url return url
class AdminTransmitterReliabilitySerializer(serializers.ModelSerializer):
class Meta:
model = TransmitterReliability
fields = ["id", "title", "slug", "color", "main_color_code"]
class AdminTransmitterListSerializer(serializers.ModelSerializer):
reliability_detail = AdminTransmitterReliabilitySerializer(source="reliability", read_only=True)
full_name = serializers.JSONField()
known_as = serializers.JSONField()
nickname = serializers.JSONField()
thumbnail = AbsoluteImageField(required=False, allow_null=True)
share_link = serializers.CharField(read_only=True)
class Meta:
model = Transmitters
fields = [
"id",
"full_name",
"slug",
"birth_year_hijri",
"death_year_hijri",
"known_as",
"nickname",
"reliability",
"reliability_detail",
"madhhab",
"generation",
"thumbnail",
"share_link",
"created_at",
"updated_at",
]
read_only_fields = ["id", "slug", "share_link", "created_at", "updated_at"]
class AdminTransmitterDetailSerializer(serializers.ModelSerializer):
reliability_detail = AdminTransmitterReliabilitySerializer(source="reliability", read_only=True)
full_name = serializers.JSONField()
kunya = serializers.JSONField()
known_as = serializers.JSONField()
nickname = serializers.JSONField()
origin = serializers.JSONField()
lived_in = serializers.JSONField()
died_in = serializers.JSONField()
description = serializers.JSONField()
thumbnail = AbsoluteImageField(required=False, allow_null=True)
reliability = serializers.PrimaryKeyRelatedField(
queryset=TransmitterReliability.objects.all(),
required=False,
)
share_link = serializers.CharField(read_only=True)
class Meta:
model = Transmitters
fields = [
"id",
"full_name",
"kunya",
"known_as",
"nickname",
"slug",
"legacy_number",
"legacy_id",
"birth_year_hijri",
"death_year_hijri",
"age_at_death",
"generation",
"reliability",
"reliability_detail",
"madhhab",
"in_sahih_muslim",
"in_sahih_bukhari",
"origin",
"lived_in",
"died_in",
"description",
"thumbnail",
"share_link",
"created_at",
"updated_at",
]
read_only_fields = ["id", "slug", "share_link", "created_at", "updated_at", "reliability_detail"]
class AdminBookSubjectAreaSerializer(serializers.ModelSerializer): class AdminBookSubjectAreaSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = BookSubjectArea model = BookSubjectArea
@ -319,4 +405,3 @@ class AdminBookReferenceDetailSerializer(serializers.ModelSerializer):
if authors is not None: if authors is not None:
book.authors.set(authors) book.authors.set(authors)
return book return book

5
apps/hadis/urls.py

@ -8,7 +8,8 @@ from .views.version import ContentReleaseSyncView
from .views.info import HadisInfoView from .views.info import HadisInfoView
from .views_admin import ( from .views_admin import (
AdminHadisCategoryViewSet, AdminHadisViewSet, AdminHadisCorrectionViewSet, AdminHadisInterpretationViewSet, AdminHadisStatusViewSet, AdminHadisTagViewSet, AdminHadisCategoryViewSet, AdminHadisViewSet, AdminHadisCorrectionViewSet, AdminHadisInterpretationViewSet, AdminHadisStatusViewSet, AdminHadisTagViewSet,
AdminBookSubjectAreaViewSet, AdminBookTypeViewSet, AdminBookAuthorViewSet, AdminBookAttributeViewSet, AdminBookReferenceImageViewSet, AdminBookReferenceDocumentViewSet, AdminBookReferenceViewSet
AdminBookSubjectAreaViewSet, AdminBookTypeViewSet, AdminBookAuthorViewSet, AdminBookAttributeViewSet, AdminBookReferenceImageViewSet, AdminBookReferenceDocumentViewSet, AdminBookReferenceViewSet,
AdminTransmitterViewSet, AdminTransmitterReliabilityViewSet
) )
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
@ -31,6 +32,8 @@ admin_router.register(r'book-authors', AdminBookAuthorViewSet, basename='admin-b
admin_router.register(r'book-attributes', AdminBookAttributeViewSet, basename='admin-book-attributes') admin_router.register(r'book-attributes', AdminBookAttributeViewSet, basename='admin-book-attributes')
admin_router.register(r'book-images', AdminBookReferenceImageViewSet, basename='admin-book-images') admin_router.register(r'book-images', AdminBookReferenceImageViewSet, basename='admin-book-images')
admin_router.register(r'book-documents', AdminBookReferenceDocumentViewSet, basename='admin-book-documents') admin_router.register(r'book-documents', AdminBookReferenceDocumentViewSet, basename='admin-book-documents')
admin_router.register(r'transmitters', AdminTransmitterViewSet, basename='admin-transmitters')
admin_router.register(r'transmitter-reliabilities', AdminTransmitterReliabilityViewSet, basename='admin-transmitter-reliabilities')
urlpatterns = [ urlpatterns = [
# Admin endpoints # Admin endpoints

61
apps/hadis/views_admin.py

@ -11,7 +11,8 @@ from utils.pagination import StandardResultsSetPagination
from .models import ( from .models import (
Hadis, HadisCategory, HadisCorrection, HadisInterpretation, HadisStatus, HadisTag, Hadis, HadisCategory, HadisCorrection, HadisInterpretation, HadisStatus, HadisTag,
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType,
Transmitters, TransmitterReliability
) )
from .serializers.serializers_admin import ( from .serializers.serializers_admin import (
AdminHadisCategorySerializer, AdminHadisCategorySerializer,
@ -29,6 +30,9 @@ from .serializers.serializers_admin import (
AdminBookReferenceDocumentSerializer, AdminBookReferenceDocumentSerializer,
AdminBookReferenceListSerializer, AdminBookReferenceListSerializer,
AdminBookReferenceDetailSerializer, AdminBookReferenceDetailSerializer,
AdminTransmitterListSerializer,
AdminTransmitterDetailSerializer,
AdminTransmitterReliabilitySerializer,
) )
@ -62,6 +66,60 @@ class AdminHadisTagViewSet(ReadOnlyModelViewSet):
return HadisTag.objects.all().order_by("id") return HadisTag.objects.all().order_by("id")
class AdminTransmitterReliabilityViewSet(ReadOnlyModelViewSet):
serializer_class = AdminTransmitterReliabilitySerializer
permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication]
pagination_class = None
def get_queryset(self):
return TransmitterReliability.objects.all().order_by("id")
class AdminTransmitterViewSet(ModelViewSet):
permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication]
pagination_class = StandardResultsSetPagination
parser_classes = (MultiPartParser, FormParser, JSONParser)
def get_serializer_class(self):
if self.action == "list":
return AdminTransmitterListSerializer
return AdminTransmitterDetailSerializer
def get_queryset(self):
queryset = Transmitters.objects.select_related("reliability")
search_query = self.request.query_params.get("search")
if search_query:
q_filter = (
Q(full_name__icontains=search_query)
| Q(kunya__icontains=search_query)
| Q(known_as__icontains=search_query)
| Q(nickname__icontains=search_query)
| Q(origin__icontains=search_query)
| Q(lived_in__icontains=search_query)
| Q(died_in__icontains=search_query)
)
if search_query.isdigit():
q_filter |= Q(legacy_number=int(search_query)) | Q(generation=int(search_query))
queryset = queryset.filter(q_filter)
status_filter = self.request.query_params.get("status")
if status_filter and status_filter != "all":
queryset = queryset.filter(reliability__slug=status_filter)
madhhab_filter = self.request.query_params.get("madhhab")
if madhhab_filter and madhhab_filter != "all":
queryset = queryset.filter(madhhab=madhhab_filter)
generation_filter = self.request.query_params.get("generation")
if generation_filter and generation_filter != "all":
queryset = queryset.filter(generation=generation_filter)
return queryset.order_by("full_name", "id")
class AdminHadisViewSet(ModelViewSet): class AdminHadisViewSet(ModelViewSet):
permission_classes = [IsAuthenticated, IsSuperAdmin] permission_classes = [IsAuthenticated, IsSuperAdmin]
@ -267,4 +325,3 @@ class AdminBookReferenceViewSet(ModelViewSet):
queryset = queryset.filter(authors__id=author_id) queryset = queryset.filter(authors__id=author_id)
return queryset.distinct().order_by("-created_at") return queryset.distinct().order_by("-created_at")
Loading…
Cancel
Save