Моделирование выполняется в рамках создания сервиса начисления баллов для последующего использования в распределения эмиссии токенов между участниками экономики сообщества.
Сервис использует данные из различных источников. Функционально его можно разделить на агрегатор событий и сервис начисления баллов. На данном этапе все выполняется в рамках одного сервиса, и более того они используют одну базу данных. Разделю их в функциональном описании как Агрегатор событий и Сервис начисления баллов. Что бы отделить агрегатор событий для начисления баллов от агрегатора событий с фронтенда, они будут называться по разному: агрегатор событий (домашний) и агрегатор событий (улица).
Моделирование выполню в таблице. Что бы не усложнять этот вариант функционального моделирования на нем будут четыре основные типа объектов Сервис (источник данных), данные и Сервис (приемник данных) и способ получения данных. Данная таблица описывает граф, то-есть один и тот же узел этого графа когда он предоставляет данные для другого сервиса является источником, а когда получает данные из сервиса то является приемником.
Добавлена колонка статус, что бы отслеживать текущее состояние по реализации этих функций.
Так-же моделирование будет выполнено в “функциональном” стиле сверху вниз, начиная от поведения в надсистеме. Так оказалось проще заполнять таблицу в отличии от “императивного” стиля снизу вверх.
Статус | Сервис (источник данных) | Данные | Способ получения | Сервис (приемник данных) |
---|---|---|---|---|
В процессе. Делаются тестовые варианты. |
Сервис начисления баллов | Данные для распределения недельной эмиссии токенов. Дата начала недели, идентификатор пользователя, баллы. |
Через запрос к API получаем файл .csv, который дальше загружается вручную в криптосервис. | Криптосервис Solana |
создаются различные внешние виды расшифровки для тестирвоания | Сервис начисления баллов | Расшифровка начисления. В виде файла pdf. |
Запрос к API. | Фронтенд личного кабинета пользвоателя. |
Репозиторий проекта на Git | Правила начисления баллов. Правила в формате JSON. | Через сборку кодовой базы в работающий сервис, правила становятся частью экземпляра работающего сервиса начислений. | Сервис начисления баллов | |
Агрегатор событий (домашний) | События: ExerciseSave, SectionCompleted, ClubCommentReceived, ClubCommentWritten, ClubLike, ClubLikeReceived, ClubText |
Запрос к PostHog | Сервис начисления баллов | |
так реализовано сейчас в тестовой версии | API aisystant | Данные о квалификации участника | Запрос к API | Сервис начисления баллов |
возможный вариант | API aisystant, Агрегатор событий (домашний) |
Данные о квалификации участника | Если есть в Агрегатор событий (домашний) запись об получении квалификации то оттуда. Если нет то через запрос к API aisystant |
Сервис начисления баллов |
Сейчас | API aisystant | Данные о систематичности. День занятий без перерыва. |
Запрос к API | Сервис начисления баллов |
Если там будут все события. Вариант 1 |
Агрегатор событий (домашний) | Данные о систематичности. День занятий без перерыва. |
Запрос к PostHog. Получение записи о дне систематичности. |
Сервис начисления баллов |
Если там будут все события. Вариант 2 |
Агрегатор событий (домашний) | Данные о систематичности. День занятий без перерыва. |
Запрос к PostHog и расчет дня систематичности. |
Сервис начисления баллов |
Сейчас в тестовом начислении. Планируем отказаться. | Агрегатор событий (улица) | События: exerciseSave (ExerciseSave), sectionCompleted (SectionCompleted) |
Запрос к PostHog. И мэпинг наименований. |
Агрегатор событий (домашний) |
рассматриваем такой вариант | API aisystant | ExerciseSave, SectionCompleted |
Запрос к API | Агрегатор событий (домашний) |
реализована тестовая версия. Надо проверить временные пояса в возвращаемом времени. |
Клуб. | SectionCompleted, ClubCommentReceived, ClubCommentWritten, ClubLike, ClubLikeReceived, ClubText | Запрос к API клуба сделанному с помощью плагина Data Exploer. | Агрегатор событий (домашний) |
На данной расшифровке не отражено такое событие как Point, оно является особенностью работы “Сервис начисления баллов”. Начисленные баллы сохраняются в эти события (при этом до конца не понятен онтологический смысл - это событие или скорее запись о начислении), далее по ним подсчитываются баллы, используется ссылка из этих события что бы исключить повторные начисления по событиям по которым было начислено, даже если нулевая сумма.. Также заполненные доп. реквизиты в этих полях необходимы для формирования расшифровки начисления в формате .pdf для участника.
Это следствие того что сознательно убрал колонку, того в какие промежуточные данные заполняются сервисами. Произошло игнорирование внутренних состояний, что упростило таблицу и стало выполнено в функциональном стиле.
В будущем возможно добавить колонку “Тип эмиссии” - что бы в случае появления новых видов начислений токенов, разделить потоки данных.