# Общая структура ![](_resources/Архитектура%20-%20общая%20схема.png) Основной код приложения написан на TypeScript и фреймворке NestJS (это такой Angular для backend-а) Монолитное приложение включает в своём составе: - основная функциональность - кеш и промежуточный коллектор для данных на couchdb - http api для внешних интеграций - webhook-и и websocket-ы - telegram-бот - есть возможность для реализации новых интеграций с другими чат-ботами - cron-task-и для выполнения повторяющихся задач - frontend server-side на простой шаблонизации - frontend на react - специальный плагин для lowcode платформы n8n # Основной процесс ![](_resources/Архитектура%20-%20основной%20процесс.png) Двигателем приложения служит redmine-issue-event-emitter - это основной процесс поступления данных в Pinkmine. 1. Подписка на источники событий - по email, через cron-таски, через rss. Позволяет обнаруживать факты изменений в задачах в redmine. ([подробнее](Как%20это%20работает/Как%20работают%20стратегии%20синхронизации%20redmine%20и%20pinkmine.md)) 2. Redmine Issue Event Emitter - это очередь для синхронизации данных из redmine. На выход кладётся номер задачи, на выходе данные полученные с помощью redmine api. Очередь обеспечивает бережное отношение к боевому redmine, так как позволяет выполнять выгрузки не выходя за выставленный лимит обращений. ([подробнее про работу очереди](Как%20это%20работает/Как%20работает%20очередь%20загрузки%20задач.md) и [подробнее про загрузку задач из redmine](Как%20это%20работает/Как%20происходит%20загрузка%20задачи%20из%20Redmine.md)) 3. Преобразование задачи - это набор вспомогательных обработчиков. Позволяет при получении данных произвести попутно полезные изменения, например, привести текстовые теги к массиву, определить текущего ответственного за задачу, обнаружить в описании или в комментариях ссылки на gitlab на MR-ы, в т.ч. можно реализовать специализированный обработчик. ([подбронее](./Как%20это%20работает/Как%20происходит%20преобразование%20задачи.md)) 4. Сохранение задачи в кеш в CouchDB ([подробнее](./Как%20это%20работает/Сохранение%20задачи%20в%20кеш%20CouchDB.md)) 5. Анализ изменений в задаче - это сравнение предыдущего состояния задачи с новым. Позволяет организовать процессы связанные с жизненным циклом самой задачи и, например, разослать уведомления с учётом происходящих изменений ([подробнее](./Как%20это%20работает/Анализ%20изменений%20в%20задаче.md)) 6. Сохранение событий изменения в журнал - вспомогательная коллекция данных ([подробнее](./Как%20это%20работает/Анализ%20изменений%20в%20задаче.md)) # Точки расширения Платформа Pinkmine предполагает в т.ч. реализацию конкретных задач в рамках основного кода. Допускается реализация специализированных внутренних сервисов. В рамках ядра redmine-issue-event-emitter: - новые стратегии получения задач из Redmine - специализированные обработчики задач для отдельных проектов - интеграция событий в новые процессы - чат-боты или простая передача данных с помощью webhook-ов и websocket-ов В рамках расширенной платформы pinkmine: Благодаря CouchDB стало возможным предоставить api для поиска задач с более гибкими условиями для выборки чем во встроенном в redmine api. Можно использовать в выборках комбинированные выражения через "и"/"или". Богатый набор операторов - "есть значение", "нет значения", "больше", "меньше", "равно", "поиск по регулярному выражению". Для поиска можно пользоваться расширенными данными. CouchDB позволяет выгружать для работы и анализа больший объём данных чем основной api redmine. Webhook-и и websocket-ы могут сделать api ещё более гибким. В рамках реализованного telegram chat бота можно дописывать логику работы под узкоспециализированные задачи. С помощью фреймворка NestJS можно сделать сервисы для решения узких задач. Например, сделать cron-task-у с аналитической выгрузкой с сохранением промежуточных результатов во вспомогательную коллекцию в CouchDB и предостатить уже к ней доступ через http api и сделать человеко-читаемое представление с помощью шаблона.