Integration refactoring
Да будет рефакторинг ядра интеграции редмайна на вебхуки! Задачку осложняет то, что редмайн не имеет поддержки хуков из коробки и для этого требуется доставлять определенный модуль от сообщества. (Если ты все же найдешь офф. модуль - пиши в комментарии и делай с ним) Я же нашел модуль на github. В наш редмайн он будет вставлен в ближайшее время.
Вкратце о требуемых изменениях:
-
Админ может использовать несколько редмайнов на разных URL-ах -
После ввода URL-а редмайна мы спрашиваем админа каким способом он собирается синхронизировать происходящее: хуки или по интервалу времени (выпадающий селектор). Не забываем предупреждать, что потребуется доставить плагин в редмайн. -
Просим админа авторизоваться в редмайне (чуть ниже опишу 2 варианта как это можно сделать) -
После авторизации сразу парсим статусы задачек и приоритеты -
После авторизации админа парсим проекты и предлагаем создать связь между проектами Кэттра и редмайна/выбрать какие именно проекты в Кэттре будут синхронизироваться (Доступна также опция "ВСЕ", которая будет синхронизировать все проекты) и, соответственно, выполняем первичную синхронизацию (старые и закрытые задачки внутри Кэттра не трогаем) Помним, что в Кэттре могут быть задачи без назначенного исполнителя. Возможный дизайн 2 этапа (сопоставление проектов из редмайна и проекта из Кэттра) я приложу ниже.
А дальше мы, соответственно, имеем два варианта развития событий: хуки и крон.
-
Если пользователь выбирает хуки, то мы рисуем селектор "Что делать с новыми проектами?" и вариантами ответа "ничего" и "создавать в Кэттре". Так как модуль от сообщества не позволяет узнавать о создании нового проекта, то мы должны парсить информацию в каждом входящем запросе и проверять наличие проекта в базе и дальше действовать в соответствии с селектом -
При получении входящего хука мы проверяем, что IP источника запроса соответствует доменному имени в URL, который мы знаем (заодно узнаем с какого именно инстанса редмайна к нам поступил запрос) -
Обновляем информацию в базе -
Если мы редактируем информацию в Кэттре, то инициируем ее изменение в API Редмайна. В базу изменения не пишем, тк они все равно прилетят с хуком -
Позволяем администратору самому выбрать время синхронизации статусов и приоритетов
Если пользователь выбирает вариант синхронизации по крону, то действуем по уже существующей схеме, только
-
Позволяем администратору самому выбрать время синхронизации каждого из элементов (проекты, задачи, статусы, приоритеты) -
Не даем возможности редактировать задачку в Кэттре
Возможные варианты авторизации (как для простых пользователей, так и для администратора):
- Авторизация логин-пароль
- Авторизация с помощью apiKey
Оба варианта существуют во всплывающем окне, появляющемся при клике на "авторизоваться в ..."
Если мы вводим логин-пароль, то, используя HTTP Basic авторизацию мы запрашиваем у редмайна apiKey вот так и дальше работаем по отработанной схеме. В любом случае, рядом с авторизацией ссылку на юзердоку. После успешной авторизации поле с заполненным apiKey нам не надо. Кнопка "Переавторизоваться в ..." + каждый раз при заходе на страничку проверяем валидность токена пользователя запросом на аккаунт и предупреждаем об ошбиках. Это надо на случай привзяки нескольких редмайнов, чтоб не теряться где какой домен и где какой инстанс и ключ.
Для уведомленек людей мы используем https://laravel.com/docs/7.x/notifications
Интерфейс связки проекта из редмайна и проекта из Кэттра может выглядеть как-то так:
From Redmine -> To Cattr
Выпадающий селектор с имеющимися проектами. Либо в самом верху <создать новый>. Если выбираем <создать новый>
То имеем инпут с автогенерируемым значеним (которое можно подправить) обозначающим имя нового проекта в Кэттре. Дизайн примерный. Может варьироваться.
Cпециально для возможности интеграции нескольких редмайнов название синхронизированного проекта должно быть:
<домен редмайна> / <имя проекта>. Пример: redmine.amazingcat.net/Cattr (ex AmazingTime)