[عمل مدفوع] متطلبات إضافة Discourse لمصنف عرض الموضوع

ماذا تود أن يُنفَّذ؟

RE: https://community.unix.com/

لقد أتممنا للتو الانتقال إلى Discourse، لكننا سنحتفظ بالوصول إلى منتدياتنا القديمة حتى عام 2021، لأن لدينا عقدين من الزمن من الكود القديم الذي يفخر به كل عضو من أعضائنا (وقد بذلنا فيه الكثير من الجهد).

نريد لموظفينا الذين يرغبون في التحقق من سلامة الكود المُهاجر بين الحين والآخر، إضافة مكون إضافي صغير يفصل قيمة value من topic_custom_fields، ويضيف فقط الرقم الصحيح (وهو معرف الخيط في المنتدى القديم) إلى TopicViewSerializer، بحيث يحتوي مُسلسل JSON على زوج مفتاح-قيمة إضافي:

"import_id": <معرف_الخيط_في_المنتدى_القديم>

انظر الاستعلام أدناه كمثال، بحيث تكون القيمة المضافة إلى TopicViewSerializer (لهذا معرف الموضوع في Discourse) هي:

"import_id": 284071
postgres=# \c discourse
أنت الآن متصل بقاعدة البيانات "discourse" كمستخدم "postgres".
discourse=# select * from topic_custom_fields where name like '%import_id%' and topic_id = 377947;
   id   | topic_id |   name    |     value     |         created_at         |         updated_at         
--------+----------+-----------+---------------+----------------------------+----------------------------
 239520 |   377947 | import_id | thread-284071 | 2020-04-22 03:20:03.968513 | 2020-04-22 03:20:03.968513
(1 row)

نريد استخدام هذه الخاصية في مكون قالب على النحو التالي:

{{import_id}}

لأننا نريد مكون قالب صغير من نوع <span> لمخرج topic-category في plugin-outlet، والذي سيبدو كالتالي (ويكون مرئيًا فقط لمستوى الثقة المحدد لدينا):

<span class='import-id'>خيط المنتدى القديم <a class='import-id-link' href='https://www.unix.com/showthread.php?t={{import_id}}'>{{import_id}}</a></span>

متى تحتاج إلى إنجازه؟

أي وقت خلال الأسابيع القليلة القادمة مقبول. لا يوجد عجلة كبيرة.

ما هو ميزانيتك، بالدولار الأمريكي، التي يمكنك تقديمها لهذه المهمة؟

نرحب بجميع العروض المعقولة لهذا المكون الإضافي الصغير.

معلومات إضافية

نخطط لجعل هذا الكود متاحًا مجانًا للجميع ممن قاموا بهجرة مماثلة. ومع ذلك، من الممكن جدًا أن لا تكون لمنتديات قديمة أخرى مثل هذه المخاوف العالية بشأن سلامة البيانات للكود القديم، وبالتالي فقد يكون منتدى المنتدى الوحيد الذي يستخدم هذا المكون الإضافي.

لقد قمت أمس بكتابة وصف “معقد للغاية” وربما “غير دقيق” لهذا المتطلب؛ لذا أعتقد أن الوصف أعلاه أبسط وأسهل في الفهم (أتمنى ذلك):

ملاحظة

عملتُ بنفسي على هذا المكون الإضافي الصغير لعدة أيام، في أول محاولة لي لمكون إضافي في Discourse، واستمررت في الحصول على قيمة null لـ import_id في TopicViewSerializer.

تحديث

بفضل بعض اللطف والتوجيه، أصبحت الآن جزء المُسلسل من هذه المهمة يعمل بشكل صحيح.

3 إعجابات

تحديث:

يتقدم العمل على هذه الإضافة بفضل التوجيه اللطيف والتشجيع والمساعدة من @spirobel.

ما زلت أعمل على الكود خطوة بخطوة، وسأقوم بتحسينه وجعله متاحًا لأي شخص يقوم بالهجرة وقد يكون لديه متطلب مماثل في المستقبل.

كان من الرائع العمل مع @spirobel، حيث سمح لي بالقيام بمعظم العمل وتصحيح الأخطاء بنفسي، لكنه قدم لي النصائح والكود ومشاريع السحب (PRs) الأولية والتلميحات عندما أواجه طريقًا مسدودًا.

شكرًا لك يا @spirobel!

6 إعجابات

تحديث:

أتممت للتو (الإصدار التجريبي) وبدأت الاختبار المباشر لإضافتي الأولى.

الحالة:

  • اختبار مباشر

ما تبقى

  • هذه هي إضافتي الأولى لمنصة Discourse. رابط المنتدى القديم مُدمج بشكل ثابت في المكون. يجب تحويله إلى إعداد قابل للتكوين.
  • تحسين الإضافة تدريجيًا لرفع مستوى البرمجة إلى “المعيار الخاص بـ Discourse”، حيث إنها بعيدة جدًا عن ذلك حاليًا.
  • النشر في فئة #plugin عند الانتهاء من الاختبار.

شكر وتقدير

شكرًا خاصًا إلى @spirobel على تدريبه لي أمس ومساعدتي في جعل المُسلسل يعمل، وكذلك في جعل البنية الأساسية للمكون تعمل.

تحذير

جميع ممارسات البرمجة “غير القياسية أو السيئة” هي من مسؤوليتي وحدي.

ملاحظات

معلومات المنتدى القديم هذه مرئية فقط (قابلة للتكوين) لأعضاء مستوى الثقة 4 في منتدياتنا؛

7 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.