Большое спасибо всем участникам!
Итак, я планирую запускать несколько экземпляров Discourse, а также общую (не связанную с Discourse) систему администрирования и координации на заднем плане. Темы будут добавляться в Discourse двумя способами: либо пользователями через стандартный механизм создания тем в Discourse, либо системой администрирования/координации через API.
Если тема создаётся через API, она обычно представляет собой задачу или аналогичный элемент рабочего процесса, у которого уже есть свой собственный идентификатор вне Discourse — назовём его «внешним ID» (External ID).
Если же тема создаётся пользователем внутри Discourse, мы будем использовать вебхуки для запуска Azure-функции, которая создаст в центральной системе подобный «заглушечный» клон (чтобы сообщения из Discourse были связаны с более широким потоком контента, задач и т. д.). Таким образом, тема в Discourse также косвенно получит уникальный «внешний ID», который мы предлагаем обновлять в теме через API.
У нас есть собственный компонент темы Discourse, который при каждой загрузке темы с помощью Ajax запрашивает информацию, не связанную напрямую с Discourse, из центральной системы и отображает её на экране темы.
Хотя мы могли бы использовать ID темы в Discourse для параметризации Ajax-запроса и поиска соответствующих данных, эффективнее использовать «внешний ID» (это просто чище, есть несколько причин — это избегает лишних поисков и т. д.).
Мы могли бы легко хранить «внешний ID» в пользовательском поле — у нас уже есть такое поле для других данных, — но мы заметили, что в API тем есть поле «external_id», которое выглядит в точности как то, что нам нужно, и я предпочитаю использовать его по разным причинам: это упрощает включение этого важного поля в отчёты, экспорт, возможно, будущие поиски и т. д.
Смотрите скриншот с Discourse API Docs
Полагаю, это довольно новое поле — большинство советов на форуме относятся к полю User external_id, которое мне сейчас не нужно. Как уже упоминалось выше, я получаю модель Ember для темы (в рамках моего пользовательского компонента темы) и могу получить почти всю информацию о теме через неё… но не поле external_id.
(Как уже сказано выше — я получаю тему с помощью этого кода, заимствованного откуда-то с этого сайта, сейчас не помню откуда:
const topicController = api.container.lookup("controller:topic");
if (topicController) {
const thisTopic = topicController.get("model");
Итак, вопрос: поле external_id, специфичное для темы, где-то спрятано в модели («thisTopic»), или я неправильно понимаю эти концепции и мне просто следует использовать пользовательское поле для хранения этого внешнего ID (я знаю, что могу заставить этот подход работать, и как!.. Мне просто нравится чистота и готовность к будущему при использовании отдельного external_id, если он действительно доступен).
Ещё раз спасибо за помощь, я очень ценю это!