14 KiB
نقشه راه مهاجرت فیلدهای راویان و مؤلفان به مدلهای رابطهای
این سند بر اساس مستند نیازمندیهای کارفرما در فایل
کالکشنهای_راویان.mdتهیه شده است و مراحل تبدیل فیلدهای متنی (JSONField/CharField) به مدلهای رابطهای مستقل به همراه جزئیات پیادهسازی بکاند، فرانتاند و وضعیت پیشرفت را مشخص میکند.
وضعیت کلی مراحل (Overview & Checklist)
- فاز ۰: سیستم شهرها و مکانها (
City) (انجام شده) - فاز ۱: کنیهها (
Kunya/kunyas) — رابطه چندبهچند (M2M) (تکمیل شده) - فاز ۲: ویژگیها (
TransmitterFeature/features) — رابطه چندبهچند (M2M) (تکمیل شده) - فاز ۳: وضعیت صحابی بودن (
SahabiStatus/sahabi_status) — رابطه تکبهچند (ForeignKey / M2O) - فاز ۴: تفکیک و اتصال رتبهبندی و وثاقت راوی و مؤلف (
NarratorRatingوreliability_levels) — رابطه ForeignKey / M2O - فاز ۵: مذاهب راویان (
Madhhab/madhabs) — رابطه چندبهچند (M2M) - فاز ۶: داینامیکسازی انواع نسبتهای خویشاوندی (
RelationType/relatives) — رابطه ForeignKey درTransmitterRelative - فاز ۷: مکانهای چندگانه راوی (
narrators_locations) — اتصال چندبهچند با ترتیب (sort_order) و نوع (residence/death)
جزئیات کامل هر فاز
فاز ۰: سیستم شهرها و مکانها (City) ✅
- وضعیت:
تکمیل شده - کارهای انجامشده:
- ایجاد مدل
Cityدرtransmitter.pyبا فیلد چندزبانهtitleوslug. - اتصال
origin_city،lived_in_cityوdied_in_cityدرTransmittersوBookAuthor. - اتصال
city_of_publication_cityدرBookEdition. - اعمال مایگریشن و استخراج ۲۲ شهر از رکوردهای قبلی.
- ساخت سریالایزر و ویوست
AdminCitySerializerوDovodiCityViewSet. - ساخت کامپوننت اختصاصی
CitySelectبا کش ماژولار و جلوگیری از درخواست تکراری در داشبورد.
- ایجاد مدل
فاز ۱: کنیهها (Kunya / kunyas) ✅
- وضعیت:
تکمیل شده - نوع رابطه طبق داکیومنت کارفرما: Many-to-Many (M2M)
یک راوی ممکن است چند کنیه داشته باشد (مثلاً «أبو سعید»، «أبو خالد») و همچنین یک کنیه میتواند متعلق به چندین راوی باشد.
- مراحل پیادهسازی بکاند:
- مدل
Kunya:- فیلد
title: عنوان چندزبانه (JSONFieldشامل زبانهای fa, ar, ru, en) - فیلد
slug: اسلاگ خودکار با قابلیت حروف عربی/فارسی - زمانهای
created_atوupdated_at
- فیلد
- اتصال به
Transmitters:- افزودن رابطه
kunyas = models.ManyToManyField('Kunya', blank=True, related_name='transmitters') - حفظ فیلد متنی قدیمی
kunyaجهت پشتیبانی از کدهای گذشته (Backward Compatibility) - همگامسازی خودکار در متد
save()مدل: پر شدن خودکار متنkunyaاز روی کنیههای متصل شده.
- افزودن رابطه
- دیتامایگریشن (Data Migration):
- اسکریپت استخراج مقادیر یکتای موجود از فیلدهای
Transmitters.kunya. - ایجاد رکوردهای
Kunyaو اتصال M2M آنها به راویان مربوطه بدون از دست رفتن هیچ دادهای.
- اسکریپت استخراج مقادیر یکتای موجود از فیلدهای
- سریالایزرها و APIها:
- ساخت
AdminKunyaSerializerوDovodiKunyaViewSet(با اکشنهای استانداردlist,create,update,deleteو سرچ متنی). - ثبت در روتهای API ادمین (
/api/hadis/admin/kunyas/). - بروزرسانی
AdminTransmitterDetailSerializerوAdminTransmitterListSerializerجهت ارسال و دریافت لیست شناسهها و آبجکتهای کنیه.
- ساخت
- مدل
- مراحل پیادهسازی داشبورد (فرانتاند):
- ساخت کامپوننت
KunyaSelect(چندانتخابی با تگ / Dropdown Multi-Select + مودال ساخت کنیه جدید با هدر چندزبانه مشابه شهر). - جایگزینی فیلد متنی کنیه در فرم ویرایش/ایجاد راوی با کامپوننت جدید.
- ساخت کامپوننت
فاز ۲: ویژگیها (TransmitterFeature / features) ✅
- وضعیت:
تکمیل شده - نوع رابطه طبق داکیومنت کارفرما: Many-to-Many (M2M)
ویژگیهای جسمی یا توصیفی راویان و مؤلفان (مانند «أعرج»، «أعمى فی عین واحدة»، «صاحب سر النبی» و...).
- کارهای انجامشده:
- مدل
TransmitterFeature: با فیلدهایtitle(چندزبانه)،slug(یکتا و خودکار)، متدهای کمکی و تایماستمپها درtransmitter.py. - روابط M2M: اتصال
features_listدر مدلTransmittersو مدلBookAuthorبا حفظ فیلد قدیمیfeaturesجهت backward compatibility. - دیتامایگریشن (۰۶۰): مهاجرت و اتصال خودکار تمام ویژگیهای راویان و مؤلفان موجود در دیتابیس به رکوردهای
TransmitterFeature. - سریالایزرها و APIها:
- تعریف
AdminTransmitterFeatureSerializerو ویوستDovodiTransmitterFeatureViewSet. - ثبت مسیرهای
/api/hadis/admin/dovodi-transmitter-features/و/api/hadis/admin/transmitter-features/. - پشتیبانی از
features_listوfeatures_detailبه همراه سینک خودکار دوطرفه درAdminTransmitterListSerializer,AdminTransmitterDetailSerializerوAdminBookAuthorSerializer.
- تعریف
- داشبورد (فرانتاند):
- ساخت کامپوننت ماژولار و کششده
FeatureSelect.tsxبا قابلیت چندانتخابی نشانها (badges) و مودال ایجاد سریع ویژگی با هدر استاندارد (آیکون کره چندزبانه) و فوتر چسبان. - ادغام در صفحه ویرایش/ساخت راوی (
TransmitterFormPage.tsx). - ادغام در صفحه ویرایش/ساخت مؤلف کتاب (
ReferenceAuthorFormPage.tsx). - افزودن تب، ستونها و دیالوگ مدیریت کامل ویژگیها به صفحه آرشیو راویان (
TransmittersArchivePage.tsx).
- ساخت کامپوننت ماژولار و کششده
- مدل
فاز ۳: وضعیت صحابی بودن (SahabiStatus / companion_type) 🔲
- وضعیت:
در انتظار اجرا - نوع رابطه طبق داکیومنت کارفرما: Many-to-One / ForeignKey
راوی دارای یک وضعیت مشخص صحابی بودن است.
- مراحل پیادهسازی بکاند:
- مدل
SahabiStatus:- فیلد
codeیاslug: کد شناسه (مانندsahabi,saw_prophet,contemporary,minor_sahabi,mukhadram,unproven,disputed) - فیلد
title: چندزبانه (JSONField) به ۴ زبان بر اساس ۷ رکورد استاندارد داکیومنت کارفرما:- صحابی (сподвижник)
- رؤیت پیامبر (видел)
- درک زمان پیامبر (застал)
- صحابی صغیر (малый)
- مخضرم (мухадрам)
- اثباتنشده (недоказано)
- اختلافی / محل بحث (спорный)
- فیلد
- اتصال به
Transmitters:- فیلد
sahabi_status = models.ForeignKey(SahabiStatus, null=True, blank=True, on_delete=models.SET_NULL, related_name='transmitters') - سینک خودکار با فیلد متنی قدیمی
companion_type.
- فیلد
- مایگریشن و Seeding:
- اعمال مایگریشن و ایجاد خودکار ۷ رکورد پیشفرض فوق به همراه ترجمه عربی، فارسی، انگلیسی و روسی.
- API و سریالایزر:
- اندپوینت
/api/hadis/admin/sahabi-statuses/و پوشش در جزئیات راوی.
- اندپوینت
- مدل
- مراحل پیادهسازی داشبورد:
- افزودن دراپداون تکانتخابی وضعیت صحابی به فرم راوی با امکان پاک کردن یا تغییر وضعیت.
فاز ۴: تفکیک و اتصال رتبهبندی و وثاقت راوی و مؤلف (NarratorRating و reliability_levels) 🔲
- وضعیت:
در انتظار اجرا - نوع رابطه طبق داکیومنت کارفرما: ForeignKey (M2O) برای هر دو فیلد
در معماری کارفرما دو مفهوم متمایز وجود دارد: ۱.
reliability_levels(۱۱ سطح کلی اعتبار: ثقه، صدوق، ضعیف، کذاب و...) ۲.narrator_ratings(عبارت دقیق ارزیابی رجالی: ثقة ثبت، صدوق له أوهام و...) - مراحل پیادهسازی بکاند:
- بررسی و یکپارچهسازی مدل
TransmitterReliabilityفعلی با ۱۱ سطح استاندارد کارفرما. - استفاده از مدل
BookAuthorRutbaیا ایجاد مدل عمومیNarratorRating(با ترجمه چندزبانه) و اتصال آن به عنوانratingهم به راوی (Transmitters.narrator_rating) و هم به مؤلف (BookAuthor.rutba_status). - تبدیل فیلد
BookAuthor.scholarityبه کلید خارجی بهTransmitterReliability. - سریالایزرها و مایگریشن دادهها.
- بررسی و یکپارچهسازی مدل
- مراحل پیادهسازی داشبورد:
- نمایش هر دو دراپداون «سطح وثاقت کلی» و «عبارت ارزیابی نهایی» در فرم راوی و مؤلف.
فاز ۵: مذاهب راویان (Madhhab / madhabs) 🔲
- وضعیت:
در انتظار اجرا - نوع رابطه طبق داکیومنت کارفرما: Many-to-Many (M2M)
کارفرما مذهب را به عنوان یک کالکشن چندزبانه با رابطه M2M در نظر گرفته است (تا بتوان مذاهب گوناگون، انشعابات، یا نظرات متعدد درباره مذهب راوی را ثبت کرد).
- مراحل پیادهسازی بکاند:
- ساخت مدل
Madhhabبا فیلد چندزبانهname/titleوslug. - ایجاد رابطه M2M روی
Transmitters.madhhabs = models.ManyToManyField('Madhhab', blank=True, related_name='transmitters'). - حفظ فیلد
madhhabقبلی (shia/sunni) و سینک مقدار پیشفرض با آن. - ساخت Seed دادههای مذاهب و ثبت API ادمین.
- ساخت مدل
- مراحل پیادهسازی داشبورد:
- تبدیل سلکتور دو گزینهای به دراپداون داینامیک چندزبانه.
فاز ۶: داینامیکسازی انواع نسبتهای خویشاوندی (RelationType / relatives) 🔲
- وضعیت:
در انتظار اجرا - نوع رابطه طبق داکیومنت کارفرما: ForeignKey در جدول خویشاوندان راوی
- مراحل پیادهسازی بکاند:
- ساخت مدل
RelationTypeشامل فیلد کلیدی وtitleچندزبانه (برای جایگزینی دیکشنری هاردکد شدهRELATION_TYPE_MAP). - متصل کردن
TransmitterRelative.relation_type_ref = models.ForeignKey(RelationType, ...)به مدل جدید. - دیتامایگریشن برای انتقال ۲۹ نسبت خویشاوندی موجود به رکوردهای جدول جدید.
- اندپوینتهای مدیریت نسبتها در پنل ادمین.
- ساخت مدل
- مراحل پیادهسازی داشبورد:
- دریافت داینامیک لیست نسبتهای خویشاوندی از API به جای گزینههای استاتیک در فرم خویشاوندان راوی.
فاز ۷: مکانهای چندگانه راوی (narrators_locations) 🔲
- وضعیت:
در انتظار اجرا - نوع رابطه طبق داکیومنت کارفرما: رابطه چندبهچند با متادیتا (
sort_order,type)برای مواردی که راوی در طول حیات خود در چند شهر مختلف سکونت داشته است.
- مراحل پیادهسازی بکاند:
- ایجاد مدل واسط
TransmitterLocationRecordبا فیلدهایtransmitter,city,type(residence/death),sort_order. - سینک دوطرفه با فیلدهای
origin_city,lived_in_city,died_in_cityفعلی. - سریالایزرها و پشتیبانی در داشبورد.
- ایجاد مدل واسط
راهنمای بروزرسانی این سند
پس از انجام هر مرحله توسط هوش مصنوعی، تیک چکباکس مربوطه در بخش بالا از [ ] به [x] تبدیل شده و وضعیت آن فاز از در انتظار اجرا به تکمیل شده تغییر داده خواهد شد.