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.
144 lines
4.3 KiB
144 lines
4.3 KiB
from rest_framework import serializers
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from ..models import (
|
|
Hadis, HadisStatus, HadisTag, HadisTransmitter,
|
|
HadisReference, ReferenceImage, Transmitters
|
|
)
|
|
from apps.library.serializers import BookSerializer
|
|
|
|
|
|
class HadisListSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Hadis list"""
|
|
category = serializers.SerializerMethodField()
|
|
translation = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Hadis
|
|
fields = ['id', 'number', 'title', 'category', 'translation']
|
|
|
|
def get_category(self, obj):
|
|
"""Get category id and title"""
|
|
if obj.category:
|
|
return {
|
|
'id': obj.category.id,
|
|
'title': obj.category.title
|
|
}
|
|
return None
|
|
|
|
def get_translation(self, obj):
|
|
"""Get translation based on request language"""
|
|
request = self.context.get('request')
|
|
language_code = getattr(request, 'LANGUAGE_CODE', 'en')
|
|
return obj.get_translation(language_code)
|
|
|
|
|
|
class HadisStatusSerializer(serializers.ModelSerializer):
|
|
"""Serializer for HadisStatus"""
|
|
|
|
class Meta:
|
|
model = HadisStatus
|
|
fields = ['id', 'title', 'color']
|
|
|
|
|
|
class HadisTagSerializer(serializers.ModelSerializer):
|
|
"""Serializer for HadisTag"""
|
|
|
|
class Meta:
|
|
model = HadisTag
|
|
fields = ['id', 'title']
|
|
|
|
|
|
class TransmitterSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Transmitters"""
|
|
|
|
class Meta:
|
|
model = Transmitters
|
|
fields = [
|
|
'id', 'full_name', 'birth_year_hijri', 'death_year_hijri',
|
|
'description'
|
|
]
|
|
|
|
|
|
class HadisTransmitterSerializer(serializers.ModelSerializer):
|
|
"""Serializer for HadisTransmitter with transmitter details"""
|
|
transmitter = TransmitterSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = HadisTransmitter
|
|
fields = [
|
|
'id', 'transmitter', 'order', 'is_gap'
|
|
]
|
|
|
|
|
|
class ReferenceImageSerializer(serializers.ModelSerializer):
|
|
"""Serializer for ReferenceImage"""
|
|
thumbnail = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = ReferenceImage
|
|
fields = ['id', 'thumbnail', 'priority']
|
|
|
|
def get_thumbnail(self, obj):
|
|
"""Get thumbnail URL"""
|
|
if obj.image:
|
|
request = self.context.get('request')
|
|
if request:
|
|
return request.build_absolute_uri(obj.image.url)
|
|
return obj.image.url
|
|
return None
|
|
|
|
|
|
class HadisReferenceSerializer(serializers.ModelSerializer):
|
|
"""Serializer for HadisReference with book and images"""
|
|
book = BookSerializer(read_only=True)
|
|
images = ReferenceImageSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = HadisReference
|
|
fields = [
|
|
'id', 'book', 'page_number', 'hadis_number_in_book',
|
|
'description', 'images'
|
|
]
|
|
|
|
|
|
class HadisDetailSerializer(serializers.ModelSerializer):
|
|
"""Detailed serializer for Hadis with all related objects"""
|
|
hadis_status = HadisStatusSerializer(read_only=True)
|
|
tags = HadisTagSerializer(many=True, read_only=True)
|
|
transmitters = HadisTransmitterSerializer(
|
|
source='hadistransmitter_set',
|
|
many=True,
|
|
read_only=True
|
|
)
|
|
references = HadisReferenceSerializer(
|
|
source='hadisreference_set',
|
|
many=True,
|
|
read_only=True
|
|
)
|
|
category = serializers.SerializerMethodField()
|
|
translation = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Hadis
|
|
fields = [
|
|
'id', 'number', 'title', 'text', 'translation', 'explanation',
|
|
'address', 'hadis_status_text', 'links', 'status',
|
|
'category', 'hadis_status', 'tags', 'transmitters', 'references'
|
|
]
|
|
|
|
def get_category(self, obj):
|
|
"""Get category details"""
|
|
if obj.category:
|
|
return {
|
|
'id': obj.category.id,
|
|
'title': obj.category.title,
|
|
'category_type': obj.category.category_type
|
|
}
|
|
return None
|
|
|
|
def get_translation(self, obj):
|
|
"""Get translation based on request language"""
|
|
request = self.context.get('request')
|
|
language_code = getattr(request, 'LANGUAGE_CODE', 'en')
|
|
return obj.get_translation(language_code)
|