Open kulakovt opened 6 years ago
Могу позаниматься интеграцией, посмотрел пока доку timepad. У timepad есть swagger и swagger ui, так что с помощью NSwag можно сгенерировать клиент.
access_status
, которое в документации указано как string
, судя по всему, с помощью него можно управлять видимостью события;Я по солюшену не нашёл, где пишутся интеграции, создать под них отдельный проект?
В предыдущей версии создавался проект в infrastructure layer, использующий domain context сейчас наверное также. @AnatolyKulakov или Егор может уточнить.
не интерактивное выполнение всех действий
Означает что вся работа должна быть только через API, без UI Timepad'а
возможность указания Друзей в Анонсе
У каждого митапа есть Друзья (т.е. спонсоры). Вот их и надо уметь указывать. Пример: 52-й митап - см. раздел "Партнеры" - там указана Intermedia. Их список есть у нас в Аудите.
Про расположение проекта лучше скажет @egorikas . Но интеграций будет много, поэтому лучше отдельную папку для них завести где-нибудь.
Я годик назад уже делал попытку интеграции. Рабочий прототип (на PowerShell) есть в моём репозитории. Может быть будет чем-то полезен. Несколько неочевидных моментов в API при создании нового события я решил только с помощью саппорта. Кстати, у них был публичный чатик, где сидели сами разработчики и отвечали мгновенно. Очень отзывчивые и добрые люди.
Все Token'ы, адреса, настройки и шаблоны нужно держать в рамках Сообщества. У разных сообществ будут свои страницы на TimePad и в будущем свои настройки. У нас сейчас нет авторизации и пользователей. Как нам сейчас в это не упираться, а сделать как-то грубо и быстро? Вот это надо обсудить, нужны идеи.
Задача: предоставить набор секретных настроек (Access Token) для нужд интеграции. Настроек может быть много. Интеграций будет много. Настройки зависят от сообщества. Настройки никто не должен уметь читать (ибо тайна), кроме самого сервера. Но хочется их удобно изменять (добавлять новые сообщества). Желательно это делать без перезапуска сервера.
Мы уже поднимали вопрос хранения API ключей в обсуждении интеграции с VK (#1) и Телеграмом (#4). Я заведу для этого отдельную задачу. Пока можно принимать зависимостью стандартный Configuration и надеяться что в нём находятся все нужные настройки.
@rafaelldi как мне кажется есть смысл сделать DotNetRuServer.Integration проект или External APis нам на первое время точно достаточно будет, но все up to you как говорится, если есть какие-то мысли, озвучивай, будем рады
Кажется, что нам нужна страница в wiki по каждой интеграции. В которой как минимум будет:
Интеграция позволяет создавать private
событие из объекта Meetup
в сервисе TimePad и в дальнейшем переводить его в состояние public
.
Токен можно получить на этой странице.
Необходимые права: Редактировать события (edit_events)
, Создавать события (add_events)
, Видеть скрытые события своих организаций (view_private_events)
, Доступ к непубличным свойствам событий организации (view_private_organizations)
.
Далее токен необходимо указать в конфигурации:
"Community.Id": {
"TimePad": {
"Token": "11111111"
}
}
Токен принимается в сервисе как IOptionsSnapshot<TimePadConfiguration>
, так что необходимо зарегистрировать конфигурацию в DI (сейчас это не сделано). В ишью #93 создаётся ConfigurationProvider для таких целей. Возможно, дополнить TimePadServiceCollectionExtension -> AddTimePadIntegration
.
Для включения интеграции необходимо зарегестрировать через метод расширения IServiceCollection
AddTimePadIntegration()
.
Для тестовой работы был добавлен TimePadController
, который имеет метод:
POST api/timepad/create/{meetupId}
Данный метод создаёт событие на TimePad из существуещего meetup из БД.
Шаблоны событий лежат в проекте DotNetRuServer.Integration
в папке Templates
->Community.Id
->TimePad.cshtml
{Meetup.Day} {Meetup.Month} в гостях у компании {Friend.Name} состоится встреча {Community.Name}
(ишью #111);public
события, если такое есть, иначе используется дефолтный;DotNetRuServer.Integration
с параметром /p:GenerateCode=True
, клиент будет сгенерирован по этой документации https://api.timepad.ru/doc/interactive/swagger.json
;public
нужное TimePad-событие ищется среди последних 10 private
событий по совпадению названия с Meetup.Name
;TimePadConfiguration
никак не регестрируется в DI, без токена из этой конфигурации сервис работать не будет.@rafaelldi , давай оформим документацию, создадим issue на сценарии, которые не удалось реализовать по разным причинам и закроем эту задачу?
Ок, а что ты понимаешь под "оформим документацию"?
Наверное нужно сделать на Wiki отдельную страницу "Интеграция с TimePad" и туда занести как минимум:
Ну получается перенести примерно то, что я выше написал. Я, кстати, не могу создавать страницы на вики. Видимо, мне нужна помощь @egorikas
@rafaelldi По-сути, да, перенести. А редактировать уже созданные можешь?
Нет, не могу
@rafaelldi Тогда посмотри ещё раз документацию, которую ты оформил в комментарии. И я позже сам перенесу её в wiki.
@AnatolyKulakov Дополнил и создал ещё ишью #111.
@rafaelldi , просмотри пожалуйста этот issue и коментарии к твоему pull request и убедись что мы ничего не забыли. Что текущая документация полна, а все необходимые issue заведены.
Оформил wiki: https://github.com/DotNetRu/Server/wiki/TimePad-Integration
Для включения интеграции необходимо...
Так он сейчас не зарегистрирован? Почему?
В данный момент конфигурация
TimePadConfiguration
никак не регестрируется в DI, без токена из этой конфигурации сервис работать не будет.
Давай всё зарегистрируем и сделаем так чтобы он работало. Если в момент вызова метода "Создания События" Токен не зарегистрирован в конфигурации, то нужно бросить исключение (сейчас должно так и быть, пока не сделаем конфигурацию).
Просмотрел всё, вроде бы ничего не забыли.
Нужно будет только дополнить информацией из PR, как в конфигах добавлять сообществу интеграцию с таймпадом.
Можно, наверное, ещё указать, что событие добавляется как private
, и необходимо через таймпад его опубликовать (если мы не будем делать это через наш ui).
Про private
и public
есть в самом начале
Необходимо найти или разработать компонент, который предоставит возможность взаимодействовать с TimePad. Возможностей интеграции должно хватить для создания полноценных анонсов
Обязательные требования: