Browse Source

refereces edditions and volumes api added

master
Mohsen Taba 2 weeks ago
parent
commit
3d57d88b9f
  1. 48
      apps/hadis/serializers/serializers_admin.py
  2. 4
      apps/hadis/urls.py
  3. 38
      apps/hadis/views_admin.py

48
apps/hadis/serializers/serializers_admin.py

@ -4,7 +4,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile
from utils.image_compression import maybe_compress_uploaded_file
from ..models import (
Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisCollection, HadisSect, HadisInCollection, HadisTransmitter,
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType,
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType, BookEdition, BookVolume,
Transmitters, TransmitterReliability, NarratorLayer, OpinionStatus, TransmitterOpinion, TransmitterOriginalText
)
from .category import LocalizedField
@ -800,3 +800,49 @@ class AdminTransmitterOriginalTextSerializer(serializers.ModelSerializer):
"embedded_in",
"order",
]
class AdminBookVolumeSerializer(serializers.ModelSerializer):
class Meta:
model = BookVolume
fields = [
"id",
"book_reference",
"edition",
"title",
"created_at",
"updated_at",
]
class AdminBookEditionSerializer(serializers.ModelSerializer):
publisher = serializers.JSONField(required=False, default=list)
city_of_publication = serializers.JSONField(required=False, default=list)
country_of_publication = serializers.JSONField(required=False, default=list)
notes = serializers.JSONField(required=False, default=list)
tags = serializers.JSONField(required=False, default=list)
volumes_detail = AdminBookVolumeSerializer(source="volumes", many=True, read_only=True)
number_of_volumes = serializers.SerializerMethodField()
class Meta:
model = BookEdition
fields = [
"id",
"book_reference",
"publisher",
"city_of_publication",
"country_of_publication",
"edition_number",
"year_of_publication",
"number_of_volumes",
"source_url",
"isbn",
"notes",
"tags",
"volumes_detail",
"created_at",
"updated_at",
]
def get_number_of_volumes(self, obj):
return obj.volumes.count()

4
apps/hadis/urls.py

@ -19,7 +19,7 @@ from .views_admin import (
AdminTransmitterViewSet, AdminTransmitterReliabilityViewSet, DovodiBookSubjectAreaViewSet, DovodiBookTypeViewSet,
DovodiNarratorLayerViewSet, DovodiTransmitterReliabilityViewSet, DovodiOpinionStatusViewSet,
DovodiHadisSectViewSet, DovodiHadisCategoryViewSet, AdminCategoryQuranVerseViewSet, AdminHadisTransmitterViewSet,
AdminTransmitterOpinionViewSet, AdminTransmitterOriginalTextViewSet
AdminTransmitterOpinionViewSet, AdminTransmitterOriginalTextViewSet, AdminBookEditionViewSet, AdminBookVolumeViewSet
)
from .views.reference_v2 import BookAuthorListView, BookAuthorDetailView, AuthorReferencesListView, BookAuthorSyncView
from django.views.decorators.cache import cache_page
@ -57,6 +57,8 @@ admin_router.register(r'dovodi-opinion-statuses', DovodiOpinionStatusViewSet, ba
admin_router.register(r'hadis-transmitters', AdminHadisTransmitterViewSet, basename='admin-hadis-transmitters')
admin_router.register(r'transmitter-opinions', AdminTransmitterOpinionViewSet, basename='admin-transmitter-opinions')
admin_router.register(r'transmitter-original-texts', AdminTransmitterOriginalTextViewSet, basename='admin-transmitter-original-texts')
admin_router.register(r'book-editions', AdminBookEditionViewSet, basename='admin-book-editions')
admin_router.register(r'book-volumes', AdminBookVolumeViewSet, basename='admin-book-volumes')
# Hide admin viewsets from swagger
for prefix, viewset, basename in admin_router.registry:

38
apps/hadis/views_admin.py

@ -12,7 +12,7 @@ from utils.pagination import StandardResultsSetPagination
from .models import (
Hadis, HadisCategory, HadisCollection, HadisCorrection, HadisInterpretation, HadisStatus, HadisTag, HadisSect, HadisTransmitter,
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType,
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType, BookEdition, BookVolume,
Transmitters, TransmitterReliability, NarratorLayer, OpinionStatus, TransmitterOpinion, TransmitterOriginalText
)
from .serializers.serializers_admin import (
@ -42,6 +42,8 @@ from .serializers.serializers_admin import (
AdminHadisTransmitterSerializer,
AdminTransmitterOpinionSerializer,
AdminTransmitterOriginalTextSerializer,
AdminBookEditionSerializer,
AdminBookVolumeSerializer,
)
@ -634,3 +636,37 @@ class AdminTransmitterOriginalTextViewSet(ModelViewSet):
TransmitterOriginalText.objects.filter(id=ot_id).update(order=index)
return Response({"status": "success"})
class AdminBookEditionViewSet(ModelViewSet):
permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication]
serializer_class = AdminBookEditionSerializer
pagination_class = None
def get_queryset(self):
queryset = BookEdition.objects.all()
book_reference_id = self.request.query_params.get("book_reference_id")
if book_reference_id:
queryset = queryset.filter(book_reference_id=book_reference_id)
return queryset.order_by("-created_at")
class AdminBookVolumeViewSet(ModelViewSet):
permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication]
serializer_class = AdminBookVolumeSerializer
pagination_class = None
def get_queryset(self):
queryset = BookVolume.objects.all()
book_reference_id = self.request.query_params.get("book_reference_id")
edition_id = self.request.query_params.get("edition_id")
if book_reference_id:
queryset = queryset.filter(book_reference_id=book_reference_id)
if edition_id:
if edition_id in ["none", "null"]:
queryset = queryset.filter(edition__isnull=True)
else:
queryset = queryset.filter(edition_id=edition_id)
return queryset.order_by("title", "id")
Loading…
Cancel
Save