Skip to content

Cервис, обрабатывающий запросы о географических метках пользователей

License

Notifications You must be signed in to change notification settings

stackflow/onefactor-geo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

onefactor-geo

Разработать сервис, обрабатывающий запросы о географических метках пользователей

Сборка

Сборка осуществляется с помошью 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  // кол-во пользователей в ячейке
}

About

Cервис, обрабатывающий запросы о географических метках пользователей

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages