Сервис Рейтингов - ToToshka45/GameBy GitHub Wiki

Сервис Рейтингов.

Сервис Рейтингов и Отзывов. Получает ивенты о создании новых Пользователей, Событиях, о регистрации Участников в Событиях. Хранит данные, обсчитывает и возвращает другим Сервисам по запросу.

  1. Реализованы сущности доменного слоя (RatingService.Domain). Разделено на Аггрегаты, Сущности и Значимые Объекты. Как отдельная сущность в базе хранятся только первые 2. Управление жизненным циклом Сущностей происходит из Аггрегатов и частично из самих Сущностей.

  2. Настроено взаимодействие с базой данных PostgreSQL через ORM EF Core. Конфигурации моделей вынесены в отдельные классы DataAccess/Configurations, регистрируются в классе DbContext через рефлексию на уровне Assebly. Для проведения тестов БД развертывается контейнере. Конфигурация через appsettings.json, локальная в launchSettings.json.

  3. Для тестов подключен Scalar UI (альтернатива Swagger UI).

  4. Используется паттерн Репозиторий: дженериковые интерфейс IRepository и BaseRepository класс

  5. В процессе реализации REST-интерфейс, для создания вышеуказанных Сущностей, обновления их состояний (состояния прохождения Мероприятия, статус Участника, например, Зарегистрирован, Ожидает участия и пр.), а также возвращения данных о рейтингах и отзывах.

  6. Между Контроллерами и Репозиториями созданы интерфейсы IEventLifecycleService и IUserLifecycleService для более детальной настройки получаемых из базы данных.

  7. На уровне API-слоя используются Request-Response модели, на уровне Application - Dto. Для удобства маппинга между ними сделаны классы MappingExtensions.


Описание. Система собирает данные об участии Игроков в мероприятиях и играх, формируя их личный рейтинг. Два основных типа личного рейтинга: рейтинг Игрока и рейтинг Гейм-Мастера (Организатора). При достижении определенного рейтинга Игрок получает визуальное отображение достижения нового уровня (чтобы было проще понять, какой рейтинг у игрока) в виде рамки аватарки / пластины в определенном цвете или из определенного металла. К примеру: бронза – серебро – золото – платина – бриллиант.

Рейтинг влияет на следующие аспекты:

  1. Личный Рейтинг игрока показывает его опыт, а также знакомство с правилами платформы. Т.е., не потребуется длительное время на погружение в правила. Опционально: для некоторых «закрытых» мероприятий может быть установлен минимальный Рейтинг игрока, который может подать заявку на участие.
  2. Для Гейм-мастеров: уровень доверия Игроков к Организатору будет тем выше, чем выше рейтинг. Опционально: для Организаторов с низким рейтингом могут быть установлены ограничения при создании мероприятий (кол-во в месяц, возможность установки открытой даты и пр.)
  3. Получение коллекционных и «косметических» бонусов, получение достижений.

Повышение рейтинга происходит при следующих условиях:

  1. Рейтинг будет начисляться за участие в «живых» мероприятиях, также как и за участие в онлайн-квизах. Само присутствие будет начислять Игроку некое базовое кол-во очков.
  2. На рейтинг будет влиять результат Игрока в мероприятии, если предполагается соревновательная система. Можно ввести понятие Hot Streak – когда участник в нескольких подряд мероприятиях занимает высокие места.
  3. Упоминания Игрока по итогам мероприятия (например, в Отзывах к мероприятию) также будут влиять на рейтинг (в личном профиле игрока может быть пункт «Кол-во упоминаний»). Игроку могут ставить лайки за качественное участие, за помощь в проведении или за любую полезную активность.
  4. Помощь в роли Подмастерья (Помощник организатора) – если игрок и участвует, и помогает, он получает удвоенное кол-во очков по сравнению с базовым значением.

Рейтинг может снижаться.

  1. Запись на мероприятие и отсутствие на нём могут привести к снижению рейтинга. Организатор может сделать отметку в профиле «Итогов мероприятия», указав, что участник отсутствовал и либо поставить, либо не поставить галочку «Уважительная причина» (да, тут немного субъективности).
  2. Негативные мнения об участнике со стороны других участников. Можно как ставить лайки, так и дизлайки. Однако рейтинг будет снижаться лишь при условии, что дизлайки поставил определенный % участников.
  3. В Соревновательных мероприятиях – при получении нескольких подряд низких результатов будет небольшое снижение в рейтинге.

Взаимодействие с сервисами.

  1. Профиль игрока / личный кабинет – передает данные для их рендеринга в профиле.
  2. Сервис Мероприятий – передает данные для отображения рейтинга Игрока.
  3. Сервис уведомлений – сообщает об изменении рейтинга по открытым каналам (почта, мессенджер).

Use-Case Диаграмма (v2) image


ER-Диаграмма Ratings Service (GameBy) https://lucid.app/lucidchart/93664716-16eb-43a6-8e75-1231591740e4/edit?view_items=z9Fg31J6kVlR&invitationId=inv_75e29981-3167-48bf-a37d-e5877e0daae8


Диаграмма классов Class diagramm for RatingsService (GameBy) https://lucid.app/lucidchart/11a75eb9-05e1-4268-b2a4-c01747f06a87/edit?view_items=PzEj0oE1RgcJ&invitationId=inv_53412b44-3b26-426e-ab8c-e2b32025c86a