Сервис Рейтингов - ToToshka45/GameBy GitHub Wiki
Сервис Рейтингов.
Сервис Рейтингов и Отзывов. Получает ивенты о создании новых Пользователей, Событиях, о регистрации Участников в Событиях. Хранит данные, обсчитывает и возвращает другим Сервисам по запросу.
-
Реализованы сущности доменного слоя (RatingService.Domain). Разделено на Аггрегаты, Сущности и Значимые Объекты. Как отдельная сущность в базе хранятся только первые 2. Управление жизненным циклом Сущностей происходит из Аггрегатов и частично из самих Сущностей.
-
Настроено взаимодействие с базой данных PostgreSQL через ORM EF Core. Конфигурации моделей вынесены в отдельные классы DataAccess/Configurations, регистрируются в классе DbContext через рефлексию на уровне Assebly. Для проведения тестов БД развертывается контейнере. Конфигурация через appsettings.json, локальная в launchSettings.json.
-
Для тестов подключен Scalar UI (альтернатива Swagger UI).
-
Используется паттерн Репозиторий: дженериковые интерфейс IRepository и BaseRepository класс
-
В процессе реализации REST-интерфейс, для создания вышеуказанных Сущностей, обновления их состояний (состояния прохождения Мероприятия, статус Участника, например, Зарегистрирован, Ожидает участия и пр.), а также возвращения данных о рейтингах и отзывах.
-
Между Контроллерами и Репозиториями созданы интерфейсы IEventLifecycleService и IUserLifecycleService для более детальной настройки получаемых из базы данных.
-
На уровне API-слоя используются Request-Response модели, на уровне Application - Dto. Для удобства маппинга между ними сделаны классы MappingExtensions.
Описание. Система собирает данные об участии Игроков в мероприятиях и играх, формируя их личный рейтинг. Два основных типа личного рейтинга: рейтинг Игрока и рейтинг Гейм-Мастера (Организатора). При достижении определенного рейтинга Игрок получает визуальное отображение достижения нового уровня (чтобы было проще понять, какой рейтинг у игрока) в виде рамки аватарки / пластины в определенном цвете или из определенного металла. К примеру: бронза – серебро – золото – платина – бриллиант.
Рейтинг влияет на следующие аспекты:
- Личный Рейтинг игрока показывает его опыт, а также знакомство с правилами платформы. Т.е., не потребуется длительное время на погружение в правила. Опционально: для некоторых «закрытых» мероприятий может быть установлен минимальный Рейтинг игрока, который может подать заявку на участие.
- Для Гейм-мастеров: уровень доверия Игроков к Организатору будет тем выше, чем выше рейтинг. Опционально: для Организаторов с низким рейтингом могут быть установлены ограничения при создании мероприятий (кол-во в месяц, возможность установки открытой даты и пр.)
- Получение коллекционных и «косметических» бонусов, получение достижений.
Повышение рейтинга происходит при следующих условиях:
- Рейтинг будет начисляться за участие в «живых» мероприятиях, также как и за участие в онлайн-квизах. Само присутствие будет начислять Игроку некое базовое кол-во очков.
- На рейтинг будет влиять результат Игрока в мероприятии, если предполагается соревновательная система. Можно ввести понятие Hot Streak – когда участник в нескольких подряд мероприятиях занимает высокие места.
- Упоминания Игрока по итогам мероприятия (например, в Отзывах к мероприятию) также будут влиять на рейтинг (в личном профиле игрока может быть пункт «Кол-во упоминаний»). Игроку могут ставить лайки за качественное участие, за помощь в проведении или за любую полезную активность.
- Помощь в роли Подмастерья (Помощник организатора) – если игрок и участвует, и помогает, он получает удвоенное кол-во очков по сравнению с базовым значением.
Рейтинг может снижаться.
- Запись на мероприятие и отсутствие на нём могут привести к снижению рейтинга. Организатор может сделать отметку в профиле «Итогов мероприятия», указав, что участник отсутствовал и либо поставить, либо не поставить галочку «Уважительная причина» (да, тут немного субъективности).
- Негативные мнения об участнике со стороны других участников. Можно как ставить лайки, так и дизлайки. Однако рейтинг будет снижаться лишь при условии, что дизлайки поставил определенный % участников.
- В Соревновательных мероприятиях – при получении нескольких подряд низких результатов будет небольшое снижение в рейтинге.
Взаимодействие с сервисами.
- Профиль игрока / личный кабинет – передает данные для их рендеринга в профиле.
- Сервис Мероприятий – передает данные для отображения рейтинга Игрока.
- Сервис уведомлений – сообщает об изменении рейтинга по открытым каналам (почта, мессенджер).
Use-Case Диаграмма (v2)
Диаграмма классов https://lucid.app/lucidchart/11a75eb9-05e1-4268-b2a4-c01747f06a87/edit?view_items=PzEj0oE1RgcJ&invitationId=inv_53412b44-3b26-426e-ab8c-e2b32025c86a