[عمل مدفوع] متطلبات إضافة 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 إعجابات

تحديث:

لقد أكملت (الإصدار التجريبي) وبدأت في الاختبار الحي لأول ملحق لي.

الحالة:

  • اختبار حي

المهام المتبقية

  • هذا هو أول ملحق لديسكورس. الرابط إلى المنتدى القديم مثبت بشكل ثابت في المكون. أحتاج إلى جعل هذا إعدادًا قابلًا للتكوين.
  • تحسين الملحق مع مرور الوقت لجعل الكود يتوافق مع “المعايير القياسية لديسكورس”، لأنه بعيد عن ذلك الآن.
  • نشر رسالة في فئة Customization > Plugin عندما ينتهي الاختبار.

شكر وتقدير

شكر خاص لـ @spirobel لتوجيهي أمس ومساعدتي في جعل المُصنِّف (serializer) يعمل وهيكل المكون الأساسي يعمل.

تحذير

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

ملاحظات

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

7 إعجابات

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