[ОПЛАЧИВАЕМАЯ ЗАДАЧА] Требования к плагину Discourse для сериализатора просмотра темы

Что бы вы хотели сделать?

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

Мы только что завершили миграцию на Discourse, но оставим доступ к нашим старым форумам до 2021 года, поскольку у нас есть два десятилетия унаследованного кода, которым каждый из наших участников гордится (и над которым много работал).

Для наших сотрудников, которые хотели бы время от времени проверять целостность мигрированного кода, нам нужен небольшой плагин, который будет разделять value из topic_custom_fields и добавлять только целое число (которое является идентификатором потока на старом форуме) в TopicViewSerializer, чтобы в JSON-сериализаторе появилась дополнительная пара ключ-значение:

"import_id": <thread_id_of_legacy_forum>

См. запрос ниже в качестве примера, поэтому значение, добавленное в 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 было очень приятно: он позволял мне самостоятельно выполнять основную работу и отлаживать код, но при этом давал советы, предоставлял код, черновые варианты PR и подсказки, когда я упирался в тупик.

Спасибо, @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.