Skip to content

GolosChain/notify-service

Repository files navigation

NOTIFY-SERVICE

NOTIFY-SERVICE является сервисом рассылки уведомлений для golos.io и приложений. Сервис извлекает из блокчейна необходимые данные, определяет произошедшие события и группирует их, сохраняя в базе данных. Историю можно выгрузить по запросу, указав тип интересуемого события. Если пользователь онлайн - он получает уведомления в реальном времени через связанный сервис ONLINE-NOTIFY-SERVICE. Также происходят уведомления через push для пользователей мобильных устройств и web-push для браузеров, используется PUSH-SERVICE. Данные хранятся ограниченное время, после чего удаляются из базы данных.

API JSON-RPC
history:                                      // Получение истории пользователя
    fromId <number>(null)                     // ID последнего события после которого формировать выдачу, если нужно
    limit <number>(10) [1..100]               // Количество событий, которое нужно получить
    markAsViewed <boolean>(true)              // Пометить полученные эвенты как уже просмотренные. 
    types <'all'|[string(eventType)]>('all')  // Массив типов необходимых событий или строка 'all' для всех сразу
         [
           vote               // лайк (голос)
         | flag               // флаг (дизлайк, жалоба)
         | transfer           // перевод средств
         | reply              // ответ на пост или комментарий
         | subscribe          // подписка на блог
         | unsubscribe        // отписка от блога
         | mention            // упоминание в посте, заголовке поста или в комменте (через @)
         | repost             // репост
         | reward             // награда пользователю 
         | curatorReward      // награда куратору     
         | message            // личное сообщение     (не реализованно в данной версии)
         | witnessVote        // голос за делегата
         | witnessCancelVote  // отмена голоса за делегата
         ]   
             
historyFresh:        // Возвращает количество непрочитанных уведомлений из истории уведомлений
    <empty>
    
markAsViewed:        // Помечает указанные эвенты пользователя как прочитанные
    ids <[string]>   // Массив ID эвентов.

markAllAsViewed:     // Помечает все эвенты пользователя как прочитанные
    <empty>   
    
getBlackList:         // Возвращает черный список пользователя
    owner <string>    // Имя пользователя-инициатора 
    
addToBlackList:       // Добавляет пользователя в черный список
    owner <string>    // Имя пользователя-инициатора
    banned <string>   // Имя пользователя для добавления

removeFromBlackList:  // Исключает пользователя из черного списка                   
    owner <string>    // Имя пользователя-инициатора
    banned <string>   // Имя пользователя для исключения
Формат данных
// Общий вид ответа

total <number>                         // Общее число хранимых эвентов
totalByTypes <{string(type): number}>  // Число хранимых эвентов по типу
                                       // Также содержит summary - сумму всех полей
fresh <number>                         // Общее число непросмотренных эвентов
freshByTypes <{string(type): number}>  // Число непросмотренных эвентов по типу
                                       // Также содержит summary - сумму всех полей
data: <[object]>                       // Данные эвентов в виде массива объектов

// Общий вид данных эвента

eventType <string>  // Тип эвента
fresh <boolean>     // Пометка того является ли эвент не просмотренным
counter <number>    // Значение группировки, указывает на сквошинг эвентов в один эвент
(concrete data)     // Данные, относящиеся к конкретному эвенту (смотри ниже)

// Формат каждого конкретного типа эвента

vote:                        // лайк (голос)
    permlink <string>        // ссылка на целевой пост/комментарий
    fromUsers <[string]>     // юзеры-источники эвента

flag:                        // флаг (дизлайк, жалоба)
    permlink <string>        // ссылка на целевой пост/комментарий
    fromUsers <[string]>     // юзеры-источники эвента

transfer:                    // перевод средств
    fromUsers <[string]>     // юзеры-источники эвента
    amount <string>          // количество и тип токенов через пробел

reply:                       // ответ на пост или комментарий
    permlink <string>        // ссылка на целевой пост/комментарий
    parentPermlink <string>  // родительский пост/комментарий целевого поста/комментария
    fromUsers <[string]>     // юзеры-источники эвента

subscribe:                   // подписка на блог
    fromUsers <[string]>     // юзеры-источники эвента

unsubscribe:                 // отписка от блога
    fromUsers <[string]>     // юзеры-источники эвента

mention:                     // упоминание в посте, заголовке поста или в комменте (через @)
    permlink <string>        // ссылка на целевой пост/комментарий
    parentPermlink <string>  // родительский пост целевого поста/комментария
    fromUsers <[string]>     // юзеры-источники эвента

repost:                      // репост
    permlink <string>        // ссылка на целевой пост
    fromUsers <[string]>     // юзеры-источники эвента

reward:                      // награда пользователю
    permlink <string>        // ссылка на целевой пост/коммент
    reward: <object>         // награда
        golos <number>       // в голосах
        golosPower <number>  // в силе голоса
        gbg <number>         // в голос/золоте
 
curatorReward:                    // награда куратору
    permlink <string>             // ссылка на целевой пост/коммент
    curatorReward <number>        // награда в силе голоса
    curatorTargetAuthor <string>  // автор поста/коммента, за который получена награда

message:                     // личное сообщение
    fromUsers <[string]>     // юзеры-источники эвента
                   
witnessVote:                 // голос за делегата
    fromUsers <[string]>     // юзеры-источники эвента

witnessCancelVote:           // отмена голоса за делегата
    fromUsers <[string]>     // юзеры-источники эвента
Возможные переменные окружения ENV
  • GLS_ONLINE_NOTIFY_CONNECT (обязательно) - адрес подключения к микросервису онлайн нотификаций.

  • GLS_PUSH_CONNECT (обязательно) - адрес подключения к микросервису рассылки push-уведомлений.

  • EVENT_EXPIRATION - время в миллисекундах, после которого эвент будет удален из истории.
    Дефолтное значение - 1000 * 60 * 60 * 24 * 30 (1 месяц)

  • GLS_GATE_HOST (обязательно) - адрес, который будет использован для входящих подключений связи микросервисов.
    Дефолтное значение при запуске без докера - 127.0.0.1

  • GLS_GATE_PORT (обязательно) - адрес порта, который будет использован для входящих подключений связи микросервисов.
    Дефолтное значение при запуске без докера - 3000

  • GLS_METRICS_HOST (обязательно) - адрес хоста для метрик StatsD.
    Дефолтное значение при запуске без докера - 127.0.0.1

  • GLS_METRICS_PORT (обязательно) - адрес порта для метрик StatsD.
    Дефолтное значение при запуске без докера - 8125

  • GLS_MONGO_CONNECT - строка подключения к базе MongoDB.
    Дефолтное значение - mongodb://mongo/admin

  • GLS_DAY_START - время начала нового дня в часах относительно UTC, используется для таких вещей как валидация "1 пост в сутки".
    Дефолтное значение - 3 (день начинается в 00:00 по Москве).

  • GLS_BLOCKCHAIN_SUBSCRIBE_TIMEOUT - таймаут подписки на новые блоки, срабатывает если за это время от блокчейн-ноды не пришло ни единого блока.
    Дефолтное значение - 60000, что равно одной минуте.

  • GLS_BLOCKCHAIN_CONNECT - адрес блокчейн-ноды для прослушивания.
    Дефолтное значение - wss://ws.golos.io

Запуск

Для запуска сервиса достаточно вызвать команду docker-compose up в корне проекта, предварительно указав необходимые ENV переменные.

Примечания
  • В случае удаления поста/комментария - он будет удален и из истории нотификаций, однако оповещение удаления не рассылается.
  • В случае снятия голоса или флага (значение голоса выставляется в 0) оповещение не рассылается.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published