Акция - это контентная единица с обучающими материалами.
Акции отображаются в мобильном приложении пользователя в виде обучающих презентаций.
Все доступные обучающие акции находятся на главном экране раздела “Акции”. Все акции разделены на 4 блока:
- “Новые акции”. В блоке отображаются акции, созданные в течение последних 7 дней, независимо от участия пользователя в них. При тапе на кнопку “Все” открывается полный список новых акций.
- “Доступные акции”. В блоке отображаются акции, которые доступны пользователю, но в которых он ещё не принимает участие. При тапе на кнопку “Все” открывается полный список акций, доступных пользователю.
- “Акции с вашим участием”. В блоке отображаются акции, в которых пользователь участвует в данный момент. При тапе на кнопку “Все” открывается полный список акций, в которых участвует пользователь.
- “Завершенные акции”. В блоке отображаются акции, у которых исчерпан бюджет, завершился срок или которые были деактивированы вручную через панель администрирования. При тапе на кнопку “Все” открывается полный список завершенных акций пользователя.
Мобильное приложение не может менять состояние акции самостоятельно, кроме промежуточного.
Состояние акций клиент получает с сервера посредством синхронизации агрегата QuestProgress или получения событий типа QuestProgress через SignalR, при этом синхронизируя локальное состояние с серверным.
Каждая сущность QuestProgress имеет набор атрибутов которые доступны в контенте через StoryBridge. При обновлении агрегата QuestProgress, идентификаторы этих сущностей добавляются в синхронизатор атрибутов.
Контент меняет атрибуты на устройстве, в свою очередь, синхронизируясь, устройство отправляет их на сервер. На сервере срабатывает логика и изменятся QuestProgress - акция пользователя меняет свое новое состояние и об этом уведомляется устройство. Происходит синхронизация и, например, акция переключается на новый stage или завершается итд.
Таким образом, реализуется подход CQRS, разделяя каналы команд и событий. Получается однонаправленный поток изменений. Переход на такой подход вызван тем, что состояние акции может менять не только мобильное приложение, посредством атрибутов, но и сторонние участники такие как интеграционные решения или другие приложения, например тайный покупатель, любое время переводя акцию в нужное состояние.