Нужно дописать приложение для администратора сетевой ролевой игры, где он сможет редактировать параметры персонажей (игроков), и раздавать баны. Должны быть реализованы следующие возможности:
- получать список всех зарегистрированных игроков;
- создавать нового игрока;
- редактировать характеристики существующего игрока;
- удалять игрока;
- получать игрока по id;
- получать отфильтрованный список игроков в соответствии с переданными фильтрами;
- получать количество игроков, которые соответствуют фильтрам. Для этого необходимо реализовать REST API в соответствии с документацией.
- Spring Data JPA
- MySQL (база данных)
- Maven (для сборки проекта)
- Tomcat 9 (для запуска своего приложения)
В проекте должна использоваться сущность Player, которая имеет поля:
Поля | Описание |
---|---|
Long id | ID игрока |
String name | Имя персонажа (до 12 знаков включительно) |
String title | Титул персонажа (до 30 знаков включительно) |
Race race | Расса персонажа |
Profession profession | Профессия персонажа |
Integer experience | Опыт персонажа. Диапазон значений 0..10,000,000 |
Integer level | Уровень персонажа |
Integer untilNextLevel | Остаток опыта до следующего уровня |
Date birthday | Дата регистрации (диапазон значений года 2000..3000 включительно) |
Boolean banned | Забанен / не забанен |
Также должна присутствовать бизнес-логика: Перед сохранением персонажа в базу данных (при добавлении нового или при апдейте характеристик существующего), должны высчитываться:
- текущий уровень персонажа
- опыт необходимый для достижения следующего уровня и сохраняться в БД.
Текущий уровень персонажа рассчитывается по формуле: 𝐿 = (sqrt(2500 + 200·exp) − 50)/100, где: exp — опыт персонажа.
Опыт до следующего уровня рассчитывается по формуле: 𝑁 = 50 ∙ (𝑙𝑣𝑙 + 1) ∙ (𝑙𝑣𝑙 + 2) − 𝑒𝑥𝑝, где lvl — текущий уровень персонажа; exp — опыт персонажа.
- Если в запросе на создание игрока нет параметра “banned”, то считаем, что пришло значение “false”.
- Параметры даты между фронтом и сервером передаются в миллисекундах (тип Long) начиная с 01.01.1970.
- При обновлении или создании игрока игнорируем параметры “id”, “level” и “untilNextLevel” из тела запроса.
- Если параметр order не указан – нужно использовать значение PlayerOrder.ID.
- Если параметр pageNumber не указан – нужно использовать значение 0.
- Если параметр pageSize не указан – нужно использовать значение 3.
- Не валидным считается id, если он:
- не числовой
- не целое число
- не положительный
- При передаче границ диапазонов (параметры с именами, которые начинаются на «min» или «max») границы нужно использовать включительно.