PRISM-SERVICE является сервисом дисперсии данных блокчейна CyberWay, которые после вторичной обработки другими микросервисами могут быть использованы в golos.io и приложениях.
Запуск:
Установить docker и docker-compose
Установить необходимые ENV-переменные в .env файл (шаблон есть в .env.example)
Вызвать команду docker-compose up --build в корне проекта
API JSON-RPC:
search: // Поиск по данным из призмы
type <string>('matchPrefix') // Тип поиска. Принимает значения "matchPrefix" и "match"
[
match // Ищет по вхождениям слов. Например, на запрос `app` найдет только `app`
| matchPrefix // Ищет по вхождениям частей слов. Например, на запрос `app` найдет и `app`, и `apple`
]
where <string>('all') // Модель, в которой нужно искать
[
all // Ищет везде
| comment // Ищет только в комментах
| post // Ищет только в постах
]
text <string> // Текст, который требуется найти
field <string>('all') // Поле, по которому требуется выполнить поиск
[
all // Ищет по всем полям
| title // Ищет только в `title` (доступно для `comments` и `posts`)
| preview // Ищет только в `preview` (доступно для `comments` и `posts`)
| raw // Ищет только в `raw` (доступно для `comments` и `posts`)
| full // Ищет только в `full` (доступно для `comments` и `posts`)
| permlink // Ищет только в `permlink` (доступно для `comments` и `posts`)
]
limit <number>(10) // Ограничение на размер найденных результатов
offset <number>(0) // Количество результатов, которое надо "пропустить"
getProfile: // Получение профиля пользователя
requestedUserId <string> // Идентификатор пользователя
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
@deprecated
type <string>('cyber') // Тип профиля (устарело)
[
cyber // CyberWay
| gls // Golos
]
getPost: // Получение конкретного поста
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string> // Идетификатор запрошенного пользователя
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
permlink <string> // Пермлинк поста
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
getComment: // Получение конкретного комментария
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string/null> // Идетификатор запрошенного пользователя
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
permlink <string> // Пермлинк поста
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
getFeed: // Получение ленты постов
type <string>('community') // Тип ленты
[
community // Лента комьюнити, требует communityId
| subscriptions // Лента подписок пользователя, требует requestedUserId
| byUser // Лента постов самого пользователя, требует requestedUserId
]
sortBy <string>('time') // Способ сортировки
[
time // Сначала старые, потом новые
| timeDesc // Сначала новые, потом старые
| popular // По популярности (только для community)
]
timeframe <string>('day') // Область выборки сортировки (только для community + popular)
[
day // За день
| week // За неделю
| month // За месяц
| year // За год
| all // За всё время
| WilsonHot // Aлгоритм Вилсона, актуальный контент сейчас
| WilsonTrending // Aлгоритм Вилсона, в целом популярный контент
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number> // Количество элементов
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string/null> // Идетификатор запрошенного пользователя
communityId <string/null> // Идентификатор комьюнити
tags <string[]/null> // Теги для фильтрации (только для community и сортировкой по времени)
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getComments: // Получение ленты комментариев
sortBy <string>('time') // Способ сортировки
[
time // Сначала старые, потом новые
| timeDesc // Сначала новые, потом старые
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
type <string>('post') // Тип ленты
[
user // Получить комментарии пользователя, требует requestedUserId
| post // Получить комментарии для поста, требует requestedUserId, permlink
| replies // Получить комментарии, которые были оставлены пользователю, требует userId
]
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string/null> // Идетификатор запрошенного пользователя
permlink <string/null> // Пермлинк поста
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getNotifyMeta: // Получение мета-данных для отображения нотификации
userId <string> // Получить данные пользователя по идентификатору
communityId <string> // Получить данные комьюнити по идентификатору
postId: // Получить данные поста по идентификатору
userId <string> // Идентификатор пользователя-автора
permlink <string> // Пермлинк контента
commentId: // Получить данные комментария по идентификатору
userId <string> // Идентификатор пользователя-автора
permlink <string> // Пермлинк контента
contentId: // Получить данные поста/комментария по идентификатору
userId <string> // Идентификатор пользователя-автора
permlink <string> // Пермлинк контента
getPostVotes: // Получение списка голосов за пост
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
userId <string> // Идентификатор пользователя
permlink <string> // Пермлинк поста
type <string> // Тип запрашиваемых голосов
[
like // Лайки
| dislike // Дизлайка
]
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getCommentVotes: // Получение списка голосов за коммент
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
userId <string> // Идентификатор пользователя
permlink <string> // Пермлинк комментария
type <string> // Тип запрашиваемых голосов
[
like // Лайки
| dislike // Дизлайка
]
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
resolveProfile: // Резолв идентификатора пользователя и аватара по имени с доменом
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getSubscriptions: // Получить подписки пользователя
userId <string> // Идентификатор пользователя
type <string>('user') // Тип подписки
[
user // Подписчики-пользователи
| community // Подписчики-сообщества
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getSubscribers: // Получить подписчиков пользователя
userId <string> // Идентификатор пользователя
type <string>('user') // Тип подписки
[
user // Подписчики-пользователи
| community // Подписчики-сообщества
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getHashTagTop: // Получение топа хеш-тегов
communityId <string> // Идентификатор комьюнити
limit <number>(10) // Количество элементов
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
getLeadersTop: // Получить топ лидеров
currentUserId <string/null> // Идентификатор текущего пользователя
communityId <string> // Идентификатор комьюнити
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getProposals: // Получить список предлагаемых изменений параметров сообществ
communityId <string> // Идентификатор комьюнити
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
waitForBlock // Дождаться и получить ответ когда призма обработает указанный блок
blockNum <number> // Номер блока
waitForTransaction // Дождаться и получить ответ когда призма обработает указанную транзакцию
transactionId <string> // Идентификатор транзакции
Возможные переменные окружения ENV:
GLS_CONNECTOR_HOST(обязательно) - адрес, который будет использован для входящих подключений связи микросервисов.
Дефолтное значение - 127.0.0.1
GLS_CONNECTOR_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.
Дефолтное значение - 3 (день начинается в 00:00 по Москве)
GLS_MAX_FEED_LIMIT - максимальное количество постов отдаваемое в ленту на 1 запрос за 1 раз.
Дефолтное значение - 100
GLS_DELEGATION_ROUND_LENGTH - количество раундов подписи блока в блокчейне.
Дефолтное значение - 21
GLS_REVERT_TRACE_CLEANER_INTERVAL - интервал запуска клинера неактуальных записей восстановления в случае форков.
Дефолтное значение - 300000(5 минут)
GLS_FEED_CACHE_INTERVAL - интервал перерассчета кешей для кешируемых типов лент (но полное удаление старого происходит по GLS_FEED_CACHE_TTL).
Дефолтное значение - 300000(5 минут)
GLS_FEED_CACHE_TTL - время жизни каждого кеша ленты.
Дефолтное значение - 28800000(8 часов)
GLS_FEED_CACHE_MAX_ITEMS - максимальное количество элементов, кешированных для каждого типа ленты. Дефолтное значение - 10000(10 000)
GLS_FACADE_CONNECT(обязательно) - адрес подключения к микросервису фасаду.
GLS_META_CONNECT(обязательно) - адрес подключения к микросервису мета.
GLS_MAX_HASH_TAG_SIZE - максимальный размер хеш-тега для контента.
Дефолтное значение - 32
GLS_RECENT_TRANSACTION_ID_TTL - интервал хранения идентификаторов обработанных транзакций.
Дефолтное значение - 180000(3 минуты)
GLS_MAX_WAIT_FOR_BLOCKCHAIN_TIMEOUT - максимальное время, которое может ждать waitForBlock и подобные методы API.
Дефолтное значение - 20000(20 секунд)
GLS_SEARCH_SYNC_TIMEOUT - интеравал синхронизации новых записей в призме с поисковым индексом. Дефолтное значение - 1000(1 секунда)
GLS_SEARCH_DELETE_TIMEOUT - интеравал синхронизации удаленных записей из призмы с поисковым индексом. Дефолтное значение - 3600000(1 час)
GLS_SEARCH_CONNECTION_STRING(обязательно) - строка подключения к поисковому индексу
GLS_SEARCH_ENABLED - определяет, должно ли происходить индексирование для полнотекстого поиска. Дефолтное значение - true
GLS_USE_GENESIS - необходимо ли ожидать загрузки генезис-данных. Дефолтное значение - true