from rest_framework import serializers from django.utils.translation import gettext_lazy as _ from ..models import ( Hadis, HadisStatus, HadisTag, HadisTransmitter, HadisReference, ReferenceImage, Transmitters, HadisCollection ) from apps.library.serializers import BookSerializer class HadisCollectionListSerializer(serializers.ModelSerializer): thumbnail = serializers.SerializerMethodField() class Meta: model = HadisCollection fields = ['id', 'title', 'slug', 'thumbnail'] def get_thumbnail(self, obj): if obj.thumbnail: request = self.context.get('request') if request: return request.build_absolute_uri(obj.thumbnail.url) return obj.thumbnail.url return None class HadisSyncSerializer(serializers.ModelSerializer): """Serializer for syncing all hadis data""" translations = serializers.SerializerMethodField() hadis_status = serializers.SerializerMethodField() tags = serializers.SerializerMethodField() class Meta: model = Hadis fields = [ 'id', 'number', 'category_id', 'title', 'title_narrator', 'text', 'translations', 'explanation', 'address', 'hadis_status', 'hadis_status_text', 'share_link', 'tags', 'links' ] def get_translations(self, obj): """Get all translations""" translations_dict = {} if obj.translation and isinstance(obj.translation, list): for tr in obj.translation: if isinstance(tr, dict): lang_code = tr.get('language_code') title = tr.get('title') if lang_code: translations_dict[lang_code] = title return translations_dict def get_hadis_status(self, obj): """Get hadis status info""" if obj.hadis_status: return { 'id': obj.hadis_status.id, 'title': obj.hadis_status.title, 'color': obj.hadis_status.color } return None def get_tags(self, obj): """Get tags""" return [{'id': tag.id, 'title': tag.title} for tag in obj.tags.all()] class HadisListSerializer(serializers.ModelSerializer): """Serializer for Hadis list""" category = serializers.SerializerMethodField() translation = serializers.SerializerMethodField() class Meta: model = Hadis fields = ['id', 'number', 'title', 'text' ,'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)