Browse Source

added quran secondary translation api for admin panel and also category filtering based on its source type

master
Mohsen Taba 3 weeks ago
parent
commit
36dbdf7b90
  1. 63
      apps/hadis/serializers/serializers_admin.py
  2. 3
      apps/hadis/urls.py
  3. 21
      apps/hadis/views_admin.py

63
apps/hadis/serializers/serializers_admin.py

@ -631,3 +631,66 @@ class AdminBookReferenceDetailSerializer(serializers.ModelSerializer):
if authors is not None:
book.authors.set(authors)
return book
# Category Quran Verse Admin Serializers
from ..models.category import CategoryQuranVerse, QuranSecondaryTranslation
class AdminQuranSecondaryTranslationSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
translation_text = serializers.JSONField(default=list)
translator = serializers.JSONField(default=list)
class Meta:
model = QuranSecondaryTranslation
fields = ["id", "translation_text", "translator"]
class AdminCategoryQuranVerseSerializer(serializers.ModelSerializer):
surah_name = serializers.JSONField(default=list)
translation = serializers.JSONField(default=list)
translator = serializers.JSONField(default=list)
secondary_translations = AdminQuranSecondaryTranslationSerializer(many=True, required=False)
class Meta:
model = CategoryQuranVerse
fields = [
"id",
"category",
"surah_name",
"ayah_number",
"arabic_text",
"translation",
"translator",
"secondary_translations",
]
def create(self, validated_data):
secondary_data = validated_data.pop("secondary_translations", [])
verse = CategoryQuranVerse.objects.create(**validated_data)
for sec in secondary_data:
QuranSecondaryTranslation.objects.create(quran_verse=verse, **sec)
return verse
def update(self, instance, validated_data):
secondary_data = validated_data.pop("secondary_translations", None)
instance.surah_name = validated_data.get("surah_name", instance.surah_name)
instance.ayah_number = validated_data.get("ayah_number", instance.ayah_number)
instance.arabic_text = validated_data.get("arabic_text", instance.arabic_text)
instance.translation = validated_data.get("translation", instance.translation)
instance.translator = validated_data.get("translator", instance.translator)
instance.category = validated_data.get("category", instance.category)
instance.save()
if secondary_data is not None:
keep_ids = [item.get("id") for item in secondary_data if item.get("id")]
instance.secondary_translations.exclude(id__in=keep_ids).delete()
for sec in secondary_data:
sec_id = sec.get("id")
if sec_id:
QuranSecondaryTranslation.objects.filter(id=sec_id, quran_verse=instance).update(
translation_text=sec.get("translation_text", []),
translator=sec.get("translator", [])
)
else:
QuranSecondaryTranslation.objects.create(quran_verse=instance, **sec)
return instance

3
apps/hadis/urls.py

@ -18,7 +18,7 @@ from .views_admin import (
AdminBookSubjectAreaViewSet, AdminBookTypeViewSet, AdminBookAuthorViewSet, AdminBookAttributeViewSet, AdminBookReferenceImageViewSet, AdminBookReferenceDocumentViewSet, AdminBookReferenceViewSet,
AdminTransmitterViewSet, AdminTransmitterReliabilityViewSet, DovodiBookSubjectAreaViewSet, DovodiBookTypeViewSet,
DovodiNarratorLayerViewSet, DovodiTransmitterReliabilityViewSet, DovodiOpinionStatusViewSet,
DovodiHadisSectViewSet, DovodiHadisCategoryViewSet
DovodiHadisSectViewSet, DovodiHadisCategoryViewSet, AdminCategoryQuranVerseViewSet
)
from .views.reference_v2 import BookAuthorListView, BookAuthorDetailView, AuthorReferencesListView, BookAuthorSyncView
from django.views.decorators.cache import cache_page
@ -31,6 +31,7 @@ def cached_view(view_func):
admin_router = SimpleRouter()
admin_router.register(r'hadises', AdminHadisViewSet, basename='admin-hadises')
admin_router.register(r'categories', AdminHadisCategoryViewSet, basename='admin-hadis-categories')
admin_router.register(r'quran-verses', AdminCategoryQuranVerseViewSet, basename='admin-category-quran-verses')
admin_router.register(r'dovodi-sects', DovodiHadisSectViewSet, basename='dovodi-hadis-sects')
admin_router.register(r'dovodi-categories', DovodiHadisCategoryViewSet, basename='dovodi-hadis-categories')
admin_router.register(r'corrections', AdminHadisCorrectionViewSet, basename='admin-hadis-corrections')

21
apps/hadis/views_admin.py

@ -92,6 +92,9 @@ class DovodiHadisCategoryViewSet(ModelViewSet):
| Q(slug__icontains=search_query)
| Q(source_type__icontains=search_query)
)
source_type = self.request.query_params.get("source_type")
if source_type:
queryset = queryset.filter(source_type=source_type)
return queryset.order_by("tree_id", "lft", "order", "id")
@ -499,3 +502,21 @@ class AdminBookReferenceViewSet(ModelViewSet):
queryset = queryset.filter(authors__id=author_id)
return queryset.distinct().order_by("-created_at")
class AdminCategoryQuranVerseViewSet(ModelViewSet):
permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication]
parser_classes = (JSONParser, MultiPartParser, FormParser)
def get_serializer_class(self):
from .serializers.serializers_admin import AdminCategoryQuranVerseSerializer
return AdminCategoryQuranVerseSerializer
def get_queryset(self):
from .models.category import CategoryQuranVerse
queryset = CategoryQuranVerse.objects.all().prefetch_related("secondary_translations")
category_id = self.request.query_params.get("category")
if category_id:
queryset = queryset.filter(category_id=category_id)
return queryset
Loading…
Cancel
Save