التكامل بين الموديولز
جدول EcosystemEntityLinks
جدول EcosystemEntityLinks — التوثيق قيد الإعداد.
مكتمل
جدول `ecosystem_entity_links` هو المصدر القياسي المنظَّم لكل اتصال cross-module. المرحلة 1 تنشر هذا كـ manifest JSON موزون في الـ Repo (`mock-ecosystem-links.ts`). المرحلة 2 تهاجر إلى جدول قاعدة بيانات حيّ حين يتجاوز حجم الروابط اليدوية ~200 entry.
الـ Schema
- id · uuid
- معرّف مستقرّ لكل رابط.
- source_entity_type / source_entity_id
- الكيان الذي يبدأ منه الرابط. النوع واحد من قيم enum الموديولز السبعة.
- target_entity_type / target_entity_id
- الكيان الذي يشير إليه الرابط. نفس الـ enum.
- relation_type · enum
- واحد من الـ 14 نوع (انظر موضوع Relation Types). يقود اختيار قالب الـ reason.
- relation_strength · 0-100
- درجة مستقرّة. T2 اليدوي افتراضياً 90. T3 يتراوح 30-70 بناءً على مطابقة التصنيف.
- is_manual / is_auto_suggested
- flags المنشأ. اليدوي يتجاوز الآلي لنفس الـ tuple (source, target, relation_type).
- is_featured / is_hidden
- أدوات تحكّم تحريرية. `is_featured = true` يُرتَّب أولاً داخل طبقته. `is_hidden = true` يخفي اقتراحاً آلياً رفضه المحرّر.
- display_order · smallint
- فاصل ترتيب. الأقلّ = يظهر أولاً.
- editorial_reason / editorial_reason_ar
- نصّ سبب ثنائي اللغة 160 حرف. يُستخدم عند الوجود؛ وإلا يولّد القالب المُولِّد.
- created_at / updated_at / created_by / updated_by
- أعمدة تدقيق. `created_by` تكون NULL للصفوف الآلية؛ تُملأ بـ user_id المحرّر للروابط اليدوية.
لماذا جدول واحد مقابل جداول لكل موديول
- مسار query واحد للكومبوننت المشترك — الـ Resolver يجلب بـ lookup مفهرَس واحد.
- مشي ثنائي الاتجاه — "ما الذي يربط بالكيان X؟" يعمل دون جدول منفصل.
- رخيص إضافة أنواع علاقات جديدة — لا migrations.
- استراتيجية الفهرسة مباشرة (idx على source، idx على target، unique على tuple (source, target, relation_type)).
