Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/stokito/player-level-service


https://github.com/stokito/player-level-service

assignment spring-boot

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

        

# Player experience level service

## Build

The project uses Java 13 and Maven so run:

mvn clean package

to build it.

## Running

The repo already contains configured IntelliJ project. You can start it as a Spring Boot app.

Then you can run the [PlayerLevelApp.http](./PlayerLevelApp.http) file from IntelliJ with the `development` env as described [here](https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html).

## Тестовое задание на позицию Sr Java Developer

Необходимо разработать RESTful веб-сервис с использованием Spring Boot для воображаемой компании из сферы разработки онлайн-игр.
Сервис хранит в in-memory структуре внутри JVM данные о набранных на текущем уровне очках опыта (поле exp, тип int) и уровне (поле level, тип int) пользовательских персонажей.
Персонаж идентифицируется целым 32-битным числом больше нуля.

Сервис должен обслуживать такие запросы:
1. Добавить указанное количество очков опыта указанному персонажу, и вернуть уровень персонажа и количество очков опыта набранных на текущем уровне после обновления
2. Для указанного персонажа вернуть уровень и количество очков опыта набранных на текущем уровне

Ответы ожидаются в формате JSON.

Персонаж создается с level=1, exp=0.
Конфигурация того сколько опыта нужно набрать чтобы перейти на следующий уровень читается из отдельного файла конфигурации (формат можно выбирать самостоятельно).
Product owner в качестве начальной конфигурации предоставил такую таблицу, и добавил что количество уровней и необходимый опыт для перехода на следующий уровень могут меняться.

| Уровень | Нужно опыта для levelup |
|---------|-------------------------|
| 1 | 100 |
| 10 | 110 |
| 20 | 120 |
| 30 | 150 |
| 40 | 190 |
| 50 | 240 |
| 60 | 300 |
| 70 | 370 |
| 80 | 450 |
| 90 | 540 |
| 100 | - |

Мы не можем быть уверены что product owner в процессе последующих правок не наделает ошибок в конфигурации, поэтому неплохо бы иметь от этого защиту в виде завершения процесса в случае невалидной конфигурации.

Дополнительные вводные данные:
1. Мы предполагаем что у нас идеальная сеть без обрывов соединений
2. Предполагаемый уровень нагрузки на сервис очень высокий, запросы на добавление
опыта одному и тому же персонажу могут приходить одновременно
3. У заказчика высокие требования к качеству. Сделать нужно настолько качественно насколько можете.

> Идет ли накопление опыта при достижении максимального уровня?

да

> Возможна ли конфигурация без указания максимального уровня?

нет, максимальный уровень должен быть

> Вне зависимости от формата конфигурации (json/xml/plain), она
обязательно представляет из себя набор пар “уровень+“-”опыт” и не
может быть другой. Так ли это?

да, это так.
в конфигурации не будет промежуточных уровней.
Символов "+" после номера уровня тоже не будет.

> Допустим, product owner в указанном примере поменял местами две
строчки (нарушил порядок сортировки по уровням). Считать ли такую
конфигурацию валидной?

да, это валидная конфигурация.

> В примере необходимое кол-во опыта не убывает с ростом уровня. Если
это условие нарушится, считать ли конфигурацию валидной?

да, такая конфигурация валидна.

> Каким образом происходит обновление конфигурации?

конфигурация загружается при старте сервиса, и на запущенном сервисе не обновляется.

> Каким образом должны быть обработаны ситуации, когда персонаж по новой конфигурации должен получить level up?

этой ситуации не случится, т.к. на запущенном сервисе конфигурация не обновляется.

> Что делаем при попытке превысить ограничение опыта по int?
Скажем, у нас макс уровень и уже почти переполнение, а приходит запрос на +1000 exp.

в таком случае бросаем эксепшн

> Делаем ли ошибки чтения конфигурации читаемыми для пользователя (product owner)?
Делаем ли тесты в каком-либо виде?

на Ваше усмотрение