A api to find points of interests based on X and Y parameters
Seu desafio será implementar um serviço para a empresa XY Inc., especializada na produção de excelentes receptores GPS (Global Positioning System). A diretoria está empenhada em lançar um dispositivo inovador que promete auxiliar pessoas na localização de pontos de interesse (POIs), e precisa muito de sua ajuda. Você foi contratado para desenvolver a plataforma que fornecerá toda a inteligência ao dispositivo. Esta plataforma deve ser baseada em serviços REST, para flexibilizar a integração.
- Cadastrar pontos de interesse, com 03 atributos: nome do POI, coordenada X (inteiro não negativo) e coordenada Y (inteiro não negativo).
- Os POIs devem ser armazenados em uma base de dados.
- Listar todos os POIs cadastrados.
- Listar os POIs por proximidade. Este serviço receberá uma coordenada X e uma coordenada Y, especificando um ponto de referência, bem como uma distância máxima (d-max) em metros. O serviço deverá retornar todos os POIs da base de dados que estejam a uma distância menor ou igual a d-max a partir do ponto de referência.
Considere a seguinte base de dados de POIs:
- 'Lanchonete' (x=27, y=12)
- 'Posto' (x=31, y=18)
- 'Joalheria' (x=15, y=12)
- 'Floricultura' (x=19, y=21)
- 'Pub' (x=12, y=8)
- 'Supermercado' (x=23, y=6)
- 'Churrascaria' (x=28, y=2)
Dado o ponto de referência (x=20, y=10) indicado pelo receptor GPS, e uma distância máxima de 10 metros, o serviço deve retornar os seguintes POIs:
- Lanchonete
- Joalheria
- Pub
- Supermercado
O quadrado pontilhado se resumirá na query para o banco de dados através da busca baseada no ponto de interesse e na distância de 10 metros. Sendo assim, o x mínimo é = 10, o x máximo é igual a 30, o y mínimo é igual a 10 e o y máximo é igual a 20.
Neste caso, a query retornará a churrascaria, porém, para o refinamento da distância máxima dentro de um raio de 10 metros, deve-se aplicar a seguinte fórmula:

Com isso, somente os pontos de interesse serão retornados.
1 - Executar o projeto
2 - Listar pontos de interesse
curl --request GET \
--url http://localhost:8080/points-of-interests \
--header 'content-type: application/json'
3 - Buscar pontos de interesse próximos
curl --request GET \
--url 'http://localhost:8080/near-me?x=20&y=10&dmax=6'
4 - Adicionar novos pontos de interesse
curl --request POST \
--url http://localhost:8080/points-of-interests \
--header 'content-type: application/json' \
--data '{
"name": "Mercado",
"x": 10,
"y": 0
}'
