السلام عليكم ورحمة الله وبركاته
سُعدت بالمشاركة في العمل على https://github.com/Itqan-community/cms-backend/issues/226
وسأشارك هنا توضيحًا للمشكلة التي عملت عليها والحل الذي اعتمدته، ليستفيد منه بقية المطورين.
المشكلة: كان المستخدمون في منصة إدارة المحتوى يعتمدون على التصفح والبحث اليدوي فقط لاكتشاف المحتوى، دون وجود نظام توصيات ذكي يستفيد من بيانات الاستخدام المتوفرة أصلًا. وكان المطلوب إضافة أربع نقاط وصول (endpoints) للتوصيات: المحتوى المشابه (similar)، والمحتوى الرائج (trending)، والتوصيات الشخصية (personalized)، والمجموعات التحريرية المنسَّقة من الإدارة (editorial)، على أن تحترم كل نقطة منها قواعد الظهور والوصول المعتمدة، وأن تكون محسوبة مسبقًا لضمان سرعة الاستجابة وقت الطلب.
طريقة الحل التي اتبعتها:
- المحتوى المشابه (similar): بناء نظام تقييم يعتمد على الخصائص المشتركة (القارئ، والرواية، والقراءة، والتصنيف)، يُحسَب ليلًا عبر Celery، ويُخزَّن في Redis على هيئة مجموعات مرتَّبة (sorted sets).
- المحتوى الرائج (trending): الاعتماد على المبدأ ذاته لبناء قائمة تصدُّر مبنية على أحداث الاستخدام الأخيرة، مع إعطاء وزن أكبر لعمليات التنزيل مقارنةً بالمشاهدات، ويُعاد حسابها كل خمس عشرة دقيقة، على المستوى العام وعلى مستوى كل تصنيف.
- التوصيات الشخصية (personalized): قياس الأوزان نفسها مقابل سجل التنزيل والمشاهدة الخاص بالمستخدم، مع رجوع تلقائي إلى توصيات المحتوى الرائج عند عدم توفر بيانات كافية عنه.
- المجموعات التحريرية (editorial): إضافة نموذج جديد للمجموعات المنسَّقة من فريق الإدارة (كالمجموعات الموسمية في شهر رمضان)، تُدار مباشرةً من لوحة تحكم Django.
التزمت جميع نقاط الوصول بقواعد الظهور المعتمدة (حالة الجاهزية، وعدم التقييد)، واشترطت التوصياتُ الشخصية مفتاحَ API صالحًا.
خلال المراجعة، اكتشفتُ وأصلحتُ عددًا من المشكلات الفعلية: تعارضًا في الدمج (merge) أدى إلى كسر بنية الشيفرة دون قصد، وخللًا في اتصال الاختبارات بخادم Redis كان يعمل في البيئة المحلية فحسب دون بيئة Docker المستخدمة في التكامل المستمر (CI)، وتعارضًا في ملفات الترحيل (migrations)، وترجمة عربية ناقصة. وتحققتُ من صحة الحل كاملًا داخل البيئة ذاتها المستخدمة في التكامل المستمر، بدلًا من الاكتفاء بالتشغيل المحلي.
النتيجة النهائية بعد حل المشكلة: أصبح لدى المشروع نظام توصيات محتوى متكامل بأربع نقاط وصول، مع إحدى وخمسين اختبارًا جديدًا، ونجاح واحد وأربعين وتسعمائة اختبار من مجموع الاختبارات كافة دون أي تراجع في الوظائف القائمة، والتحقق الفعلي من نجاح التكامل المستمر (فحص الشيفرة واختبارات الوحدة) لا افتراض نجاحه فحسب. وقد تمّ دمج (merge) طلبَي الدمج كليهما في الفرع الرئيسي (staging) بعد مراجعتهما واعتمادهما من قِبل أحد المراجعين.
روابط طلبات الدمج (Pull Requests):
https://github.com/Itqan-community/cms-backend/pull/458
https://github.com/Itqan-community/cms-backend/pull/459