Разработать сервис, обрабатывающий запросы о географических метках пользователей
Сборка осуществляется с помошью sbt (simple build tool)
Генератор сделан в виде отдельного sbt модуля
Чтобы сгенерировать файлы, нужно выполнить следующую команду:
sbt producer/run
Будет создано 2 файла .tsv (tab separated values):
geo-users.tsv - файл с метками пользователей, кол-во пользователей можно задать с исходном коде модуля
geo-cells.tsv - файл с координатами сетки, кол-во ячеек также можно задать в исходном коде модуля.
При сборке основного сервиса используемся assembly (sbt plugin):
sbt assembly
После выполнения команды будет создан jar-файл: onefactor-geo.jar
Для запуска приложения используется след. команда:
java -jar onefactor-geo.jar
Также возможно передать в сервис пути к файлам с координатами пользователей и ячейками сетки:
java -jar onefactor-geo.jar geo-users.tsv geo-cells.tsv
или
java -jar onefactor-geo.jar "some/path/users-file.tsv" "some/path/cells-file.tsv"
Первым идет файл с метками пользователей
После старта приложения, сервис доступен по адресу:
http://localhost:8080
Сервис поддерживает следующие запросы:
POST /users HTTP/1.1
Host: localhost:8080
Content-Type: application/json
{
"lon": (Double(-180, 180)),
"lat": (Double[-90, 90])
}
где lon и lat, координаты пользователя
Ответ сервиса:
{
"id": "fed07d92-6af6-4387-93d6-b949cb82bfa0", // идентификатор нового пользователя
"lon": 45.001, // долгота
"lat": 69.002, // широта
"isNextToLabel": false // близко или нет расположен к ячейке сетки
// необязательный параметр
// если ячейки с такими tile нет, то параметр отсутствует
}
PUT /users/${userId} HTTP/1.1
Host: localhost:8080
Content-Type: application/json
{
"lon": (Double(-180, 180)),
"lat": (Double[-90, 90])
}
где lon и lat, новые координаты пользователя
${userId} - идентификатор пользователя
Ответ сервиса:
{
"id": "fed07d92-6af6-4387-93d6-b949cb82bfa0", // идентификатор пользователя
"lon": 43.401, // долгота
"lat": 56.745, // широта
}
GET /users/${userId} HTTP/1.1
Host: localhost:8080
где ${userId} - идентификатор пользователя
Ответ сервиса:
{
"id": "fed07d92-6af6-4387-93d6-b949cb82bfa0", // идентификатор пользователя
"lon": 45.001, // долгота
"lat": 69.002, // широта
"isNextToLabel": true // близко или нет расположен к ячейке сетки
// необязательный параметр
// если ячейки с такими tile нет, то параметр отсутствует
}
DELETE /users/${userId} HTTP/1.1
Host: localhost:8080
где ${userId} - идентификатор пользователя
Ответ сервиса:
User is deleted: fed07d92-6af6-4387-93d6-b949cb82bfa0
GET /users?lon=${lon}&lat=${lat} HTTP/1.1
Host: localhost:8080
где ${lon} - долгота, ${lat} - широта
Ответ сервиса:
{
"tileX": 40, // координаты ячейки сетки
"tileY": 50, // (целочисленная часть от lon и lat)
"count": 10 // кол-во пользователей в ячейке
}