diff --git a/apps/hadis/management/commands/seed_missing_interpretations.py b/apps/hadis/management/commands/seed_missing_interpretations.py new file mode 100644 index 0000000..6cc3d6d --- /dev/null +++ b/apps/hadis/management/commands/seed_missing_interpretations.py @@ -0,0 +1,61 @@ +# backend/apps/hadis/management/commands/seed_missing_interpretations.py + +from django.core.management.base import BaseCommand +from django.db import transaction +from apps.hadis.models import HadisCategory, HadisInterpretation + +class Command(BaseCommand): + help = 'Seeds a default interpretation for all categories that have hadiths but no interpretation.' + + def handle(self, *args, **options): + self.stdout.write(self.style.WARNING("Scanning for categories without interpretations...")) + + # پیدا کردن کتگوریهایی که حدیث دارند اما هنوز تفسیری ندارند + target_categories = HadisCategory.objects.filter( + hadis__isnull=False, # حداقل یک حدیث دارد + interpretations__isnull=True # تفسیری برایش ثبت نشده + ).distinct() + + count = target_categories.count() + + if count == 0: + self.stdout.write(self.style.SUCCESS("✅ All populated categories already have an interpretation.")) + return + + self.stdout.write(self.style.WARNING(f"Found {count} categories. Creating default interpretations...")) + + # متون ثابت + ARABIC_TEXT = """
الْمَسْأَلَةُ الثَّامِنَةُ : قَوْلُهُ : { أَهْلَ الْبَيْتِ }
+ +رُوِيَ عَنْ عُمَرَ بْنِ أَبِي سَلَمَةَ أَنَّهُ قَالَ : { لَمَّا نَزَلَتْ هَذِهِ الْآيَةُ عَلَى النَّبِيِّ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ : { إنَّمَا يُرِيدُ اللَّهُ لِيُذْهِبَ عَنْكُمْ الرِّجْسَ أَهْلَ الْبَيْتِ وَيُطَهِّرَكُمْ تَطْهِيرًا } فِي بَيْتِ أُمِّ سَلَمَةَ دَعَا النَّبِيُّ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ فَاطِمَةَ وَحَسَنًا وَحُسَيْنًا ، وَجَعَلَ عَلِيًّا خَلْفَ ظَهْرِهِ ، وَجَلَّلَهُمْ بِكِسَاءٍ ، ثُمَّ قَالَ : اللَّهُمَّ إنَّ هَؤُلَاءِ أَهْلَ بَيْتِي ، فَأَذْهِبْ عَنْهُمْ الرِّجْسَ وَطَهِّرْهُمْ تَطْهِيرًا . قَالَتْ أُمُّ سَلَمَةَ : وَأَنَا مَعَهُمْ يَا نَبِيَّ اللَّهِ . قَالَ : أَنْتِ عَلَى مَكَانِك وَأَنْتِ عَلَى خَيْرٍ } .
+ +وَرَوَى أَنَسُ بْنُ مَالِكٍ { أَنَّ رَسُولَ اللَّهِ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ كَانَ يَمُرُّ بِبَابِ فَاطِمَةَ سِتَّةَ أَشْهُرٍ إذَا خَرَجَ إلَى صَلَاةِ الْفَجْرِ يَقُولُ : الصَّلَاةَ يَا أَهْلَ الْبَيْتِ ، إنَّمَا يُرِيدُ اللَّهُ لِيُذْهِبَ عَنْكُمْ الرِّجْسَ أَهْلَ الْبَيْتِ وَيُطَهِّرَكُمْ تَطْهِيرًا } . خَرَّجَ هَذَيْنِ الْحَدِيثَيْنِ التِّرْمِذِيُّ وَغَيْرُهُ .
""" + + RUSSIAN_TRANSLATION = """Вопрос восьмой: (что означают) слова: Ахл аль-бейт
+ +Передают от Умар ибн Аби Саламе, что когда был ниспослан аят «Аллах хочет удалить скверну от вас, о Люди дома (Ахл аль-бейт), и очистить вас наилучшим очищением» (Сура 33, аят 33) в доме Ум Саламы, Посланник Аллаха (с) позвал к себе Фатиму, Хасана и Хусейна, затем накрыл их своей накидкой, а Али был за Пророком, Пророк и его накрыл. После того, как Пророк накрыл их всех накидкой, он изволил сказать следующее: «О, Аллах, они люди моего дома, очисти же их наилучшим очищением!». Ум Салама говорит: «Я сказала: «О, Пророк Аллаха! Я тоже с ними?» Посланник Аллаха изволил сказать: «Ты оставайся при своем положении, и ты в добре».
+ +Передают от Анас Ибн Малика: Поистине посланник Аллах (мир ему и благословение Аллаха!) шесть месяцев проходил мимо двери Фатимы, когда выходил на утреннюю молитву, и говорил: время молитвы, о Ахл аль бейт! "Аллах хочет удалить скверну от вас, о Люди дома (Ахл аль-бейт), и очистить вас наилучшим очищением" (Сура 33, аят 33).
+ +Эти два хадиса привели Тирмизи и другие.
""" + + new_interpretations = [] + for cat in target_categories: + new_interpretations.append( + HadisInterpretation( + category=cat, + slug=cat.slug, # به صورت دستی اسلاگ کتگوری را جایگذاری میکنیم (چون bulk_create متد save را صدا نمیزند) + title=[], + text=ARABIC_TEXT, + translation=[{"language_code": "ru", "text": RUSSIAN_TRANSLATION}], + priority=0 + ) + ) + + # ساخت گروهی در دیتابیس (بسیار سریع) + with transaction.atomic(): + HadisInterpretation.objects.bulk_create(new_interpretations, batch_size=500) + + self.stdout.write( + self.style.SUCCESS(f"🎉 Successfully created {len(new_interpretations)} default interpretations!") + ) \ No newline at end of file