16 KiB
نقشه راه مهاجرت فیلدهای راویان و مؤلفان به مدلهای رابطهای
این سند بر اساس مستند نیازمندیهای کارفرما در فایل
کالکشنهای_راویان.mdتهیه شده است و مراحل تبدیل فیلدهای متنی (JSONField/CharField) به مدلهای رابطهای مستقل به همراه جزئیات پیادهسازی بکاند، فرانتاند و وضعیت پیشرفت را مشخص میکند.
وضعیت کلی مراحل (Overview & Checklist)
- فاز ۰: سیستم شهرها و مکانها (
City) (انجام شده) - فاز ۱: کنیهها (
Kunya/kunyas) — رابطه چندبهچند (M2M) (تکمیل شده) - فاز ۲: ویژگیها (
TransmitterFeature/features) — رابطه چندبهچند (M2M) (تکمیل شده) - فاز ۳: وضعیت صحابی بودن (
SahabiStatus/sahabi_status) — رابطه تکبهچند (ForeignKey / M2O) (تکمیل شده) - [—] فاز ۴: تفکیک و اتصال رتبهبندی و وثاقت راوی و مؤلف (
NarratorRatingوreliability_levels) — (صرفنظر شد / اسکیپ طبق تصمیم: سیستم فعلی نظرات رجالی پاسخگو است) - فاز ۵: مذاهب راویان (
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: با فیلدهایtitle(چندزبانه به ۴ زبان: fa, ar, en, ru)،slug(یکتا و خودکار)، متدهای هلپرget_title()و تایماستمپها. - اتصال به
Transmitters: افزودن کلید خارجیsahabi_status = models.ForeignKey('hadis.SahabiStatus', on_delete=models.SET_NULL, null=True, blank=True, related_name='transmitters')با حفظ و همگامسازی خودکار فیلد قدیمیcompanion_type. - مایگریشن و Seeding (۰۶۱): ساخت جدول و ایجاد خودکار ۷ رکورد استاندارد داکیومنت کارفرما به زبانهای عربی، فارسی، انگلیسی و روسی:
- صحابی (
companion/сподвижник) - رؤیت پیامبر (
saw-the-prophet/видел) - درک زمان پیامبر (
contemporary/застал) - صحابی صغیر (
minor-companion/малый) - مخضرم (
mukhadram/мухадрам) - اثباتنشده (
unproven/недоказано) - اختلافی / محل بحث (
disputed/спорный)
- صحابی (
- سریالایزرها و APIها:
- ساخت
AdminSahabiStatusSerializerوDovodiSahabiStatusViewSet. - ثبت در روتهای
/api/hadis/admin/dovodi-sahabi-statuses/و/api/hadis/admin/sahabi-statuses/. - پشتیبانی در
AdminTransmitterListSerializerوAdminTransmitterDetailSerializerهمراه با همگامسازی دوطرفه.
- ساخت
- داشبورد (فرانتاند):
- ساخت کامپوننت ماژولار تکانتخابی
SahabiStatusSelect.tsx(با کش مشترک در سطح حافظه، قابلیت جستجو و پاک کردن انتخاب، همراه با مودال ساخت سریع با هدر چندزبانه استاندارد و فوتر چسبان). - قرارگیری فیلد وضعیت صحابی در فرم راوی (
TransmitterFormPage.tsx). - افزودن تب، ستونها و دیالوگ مدیریت کامل «وضعیت صحابی» به صفحه آرشیو راویان (
TransmittersArchivePage.tsx).
- ساخت کامپوننت ماژولار تکانتخابی
- مدل
فاز ۴: تفکیک و اتصال رتبهبندی و وثاقت راوی و مؤلف (NarratorRating و reliability_levels) ⏭️
- وضعیت:
صرفنظر شد (Skipped) - علت و تصمیم اتخاذشده:
- مفهوم ارزیابیهای تفصیلی رجالی (
narrator_ratings) در حال حاضر بهصورت کامل، غنی و پیشرفته در سیستم نظرات رجالی (TransmitterOpinionوScholarlyOpinion) پیادهسازی شده و نیازی به تغییر یا مدل تکراری ندارد. - برای فیلدهای وثاقت و رتبه راوی و مؤلف (
TransmitterReliabilityوBookAuthorRutba) دست ادمین باز گذاشته شده تا بر اساس نیاز خود رتبهها را مدیریت و انتخاب کنند و نیازی به ادغام جبری آنها نیست. - بنابراین این فاز طبق تصمیم اسکیپ شده و منطق فعلی بدون تغییر حفظ گردید.
- مفهوم ارزیابیهای تفصیلی رجالی (
فاز ۵: مذاهب راویان (Madhhab / madhabs) ✅
- وضعیت:
تکمیل شده - نوع رابطه طبق داکیومنت کارفرما: Many-to-Many (M2M)
کارفرما مذهب را به عنوان یک کالکشن چندزبانه با رابطه M2M در نظر گرفته است (تا بتوان مذاهب گوناگون، انشعابات، یا نظرات متعدد درباره مذهب راوی را ثبت کرد).
- کارهای انجامشده:
- مدل
Madhhab: ایجاد درtransmitter.pyبا فیلدهایtitle(چندزبانه به ۴ زبان: fa, ar, en, ru)،slug(یکتا و خودکار)، متد هلپرget_title()و تایماستمپها. - اتصال رابطه چندبهچند به
Transmitters: افزودن فیلدmadhhabs = models.ManyToManyField('hadis.Madhhab', blank=True, related_name='transmitters')به همراه حفظ کامل فیلد متنی قدیمیmadhhabجهت سازگاری به عقب (backward compatibility). - مایگریشن و Seeding دیتابیس (۰۶۲):
- ساخت جدول و Seed کردن ۵ مذهب استاندارد داکیومنت کارفرما (شیعه، اهل سنت، زیدی، واقفی، فتحی).
- انتقال خودکار دیتای تمام ۷۹ راوی موجود در دیتابیس به رکوردهای متناظر M2M (۳۴ راوی شیعه و ۴۵ راوی سنی).
- سریالایزرها و APIها:
- ساخت
AdminMadhhabSerializerوDovodiMadhhabViewSet. - ثبت روتهای
/api/hadis/admin/dovodi-madhhabs/و/api/hadis/admin/madhhabs/. - پشتیبانی کامل در
AdminTransmitterListSerializerوAdminTransmitterDetailSerializerبا ارسال فیلدهایmadhhabs(لیست شناسهها) وmadhhabs_detailو همگامسازی دوطرفه خودکار با فیلد استرینگ قدیمیmadhhabدر توابعcreateوupdate.
- ساخت
- داشبورد (فرانتاند):
- ساخت کامپوننت ماژولار چندانتخابی
MadhhabSelect.tsx(با کش ماژولار در سطح حافظه، قابلیت افزودن سریع و ریموو بجهای مذهب، سرچ و فیلتر Popover و مودال ایجاد مذهب جدید با هدر چندزبانه، نمایش کامل توضیحات بدون برش و فوتر چسبان). - جایگزینی سلکتور استاتیک قبلی با
MadhhabSelectدر سایدبار فرم راوی (TransmitterSidebar.tsxوTransmitterFormPage.tsx) با همگامسازی داینامیک. - افزودن تب مدیریت «مذاهب»، ستونهای جدول و دیالوگ مدیریت کامل (
MadhhabDialog) در صفحه آرشیو راویان (TransmittersArchivePage.tsx). - بیلد نهایی پروژه فرانتاند با موفقیت انجام شد (بدون هیچ خطای TypeScript یا کامپایل).
- ساخت کامپوننت ماژولار چندانتخابی
- مدل
فاز ۶: داینامیکسازی انواع نسبتهای خویشاوندی (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] تبدیل شده و وضعیت آن فاز از در انتظار اجرا به تکمیل شده تغییر داده خواهد شد.