Процесс автоматического уведомления системы о достижении участником нового уровня в системе геймификации.
Назначение процесса
Когда энергия участника достигает 100%, происходит автоматический переход на следующий уровень. Система отправляет inline action уведомление, которое:
- Фиксирует факт перехода в истории блокчейна
- Может быть перехвачено контроллером для отправки push-уведомлений
- Содержит информацию о предыдущем и новом уровне для аналитики
sequenceDiagram
participant Contributor
participant Capital_Contract
participant External_System
Note over Contributor: Вносит вклад в проект
Contributor->>Capital_Contract: Действие приема результата
Capital_Contract->>Capital_Contract: Обновление энергии
alt Энергия >= 100%
Capital_Contract->>Capital_Contract: level += 1
energy = 0
Capital_Contract->>Capital_Contract: inline action: lvlnotify
Capital_Contract->>External_System: Уведомление о переходе уровня
External_System->>Contributor: Push-уведомление
"Поздравляем! Новый уровень!"
end
Пошаговое описание процесса
Шаг 1: Обнаружение перехода уровня
Триггер: Функция Capital::Contributors::add_energy_and_check_levelup
При добавлении энергии система проверяет условие перехода:
if (energy >= 100.0) {
level += 1;
energy = 0.0;
}
Шаг 2: Отправка inline action
Действие: Уведомление о переходе уровня
Система автоматически вызывает inline action с параметрами:
coopname - кооператив участника
username - имя участника
prev_level - предыдущий уровень
new_level - новый уровень
Шаг 3: Обработка внешними системами
Интеграция: Контроллер и система уведомлений
Внешние системы могут:
- Слушать действие
lvlnotify в истории блокчейна
- Отправлять push-уведомления пользователям
- Обновлять статистику и достижения в интерфейсе
- Начислять дополнительные бонусы или награды
Данные уведомления
| Параметр | Тип | Описание |
coopname | name | Кооператив, в котором произошел переход |
username | name | Участник, достигший нового уровня |
prev_level | uint32_t | Предыдущий уровень участника |
new_level | uint32_t | Новый достигнутый уровень |
Пример использования в контроллере
Контроллер может обрабатывать это событие следующим образом:
// Подписка на действие lvlnotify
contract.on('lvlnotify', async (data) => {
const { coopname, username, prev_level, new_level } = data;
// Отправка push-уведомления
await notificationService.send(username, {
title: '🎉 Поздравляем!',
message: `Вы достигли ${new_level} уровня!`,
type: 'level_up',
data: { prev_level, new_level }
});
// Обновление достижений
await achievementService.unlock(username, `level_${new_level}`);
});
Когда происходит уведомление
Уведомление отправляется автоматически в следующих случаях:
- При приеме результата проекта:
- Участник вносит результат интеллектуальной деятельности
- Обновляются его рейтинги и вклады
- Рассчитывается прирост энергии
- Если энергия >= 100%, происходит переход уровня
Особенности реализации
- Inline action: Вызывается автоматически из контракта, не требует отдельной транзакции.
- Авторизация: Требуется от аккаунта контракта (_capital), не может быть вызвано извне напрямую.
- Логирование: Информация записывается в историю блокчейна и доступна для аудита.
- Асинхронность: Обработка уведомления внешними системами происходит асинхронно и не влияет на выполнение основного действия.
- Постусловие
- Отправлено уведомление о переходе уровня
- Информация записана в историю блокчейна
- Внешние системы могут обработать событие
- См. также
- Capital::Contributors::add_energy_and_check_levelup
-
Capital::Contributors::update_gamification_from_segment