Implementação do desafio "Pontos de Interesse por GPS", do repositório backend-br.

Overview

Points Of Interest (POIs)

License

Overview

Implementação do desafio Pontos de Interesse por GPS, do repositório backend-br.

Pontos de Interesse por GPS

A XY Inc. é uma empresa 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, de forma a flexibilizar a integração.

  1. Construa um serviço para cadastrar pontos de interesse, com 3 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.

  2. Construa um serviço para listar todos os POIs cadastrados.

  3. Construa um serviço para listar 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.

Exemplo de Base de Dados:

  • '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)

Exemplo de Uso:

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

Endpoints

URLs de acesso:

Ambiente DNS
Local http://points-of-interest.localhost:81

Cadastrar POI

Cadastrar um ponto de interesse.

[POST] {{dns}}/pois

Request

Parâmetro Tipo Descrição Obrigatório
name String Nome do ponto de interesse. Sim
point.x_coordinate int Coordenada X do ponto de interesse. Sim
point.y_coordinate int Coordenada Y do ponto de interesse. Sim
{
    "name": "Pub",
    "point": {
        "x_coordinate": 12,
        "y_coordinate": 8
    }
}

Response

HTTP/1.1 201 Created
Content-Type: application/json
{
    "name": "Pub",
    "point": {
        "x_coordinate": 12,
        "y_coordinate": 8
    }
}

Listar POIs

Listar todos os pontos de interesse cadastrados, ou, utilizando os filtros, apenas os pontos de interesse cadastrados, que estejam a uma distância menor ou igual a distance a partir do ponto de referência (x_coordinate e y_coordinate).

[GET] {{dns}}/pois?x_coordinate=20&y_coordinate=10&distance=10

Request

Parâmetro Tipo Descrição Obrigatório
distance int Distância máxima em metros. Não
x_coordinate int Coordenada X do ponto de interesse. Não
y_coordinate int Coordenada Y do ponto de interesse. Não

Response

HTTP/1.1 200 OK
Content-Type: application/json
[
    {
        "name": "Pub",
        "point": {
            "x_coordinate": 12,
            "y_coordinate": 8
        }
    }
]

Instalação

Repositório

Para clonar o repositório usando a linha de comando, execute:

git clone https://github.com/gustavofreze/points-of-interest.git

Configuração

make configure

Úteis

  • Para todos os containers do projeto:

    make stop
  • Remove todos os containers e networks criados pelo projeto:

    make clean
  • Remove todos os containers, networks e imagens criados pelo projeto:

    make clean-all

FAQ

  • Existe algum trade-off em modelar a lógica de obter os pontos de interesse, com base no ponto de referência, nos modelos?

    Sim, para uma aplicação de produção, em que o banco de dados pode crescer exponencialmente. Em uma situação em que você tem um número enorme de pontos para processar, uma limitação de memória seria inerente. Então, faria sentido, essa lógica estar no banco de dados.

You might also like...
My own implementation of the backend challenge.
My own implementation of the backend challenge.

Millions backend challenge My own implementation of the backend challenge. Implemented features Show posts paginated, and ordered by creation date wit

Backend repository of libreoupas project, fully written in PHP, using the datas provided by the University.

libreoupas-engine/fst-nancy Description libreoupas est un site Internet permettant aux étudiant de la Faculté des Strasbourg illkirsh d'avoir accès au

Learn to apply best practices as a PHP backend developer

PHP eCommerce Project Here are the things that this repo will cover: Object oriented programming principles and best practices Object oriented session

Tabler.io bundle for Symfony - a backend/admin theme for easy integration

Tabler Bundle for Symfony This repository contains a Symfony bundle, integrating the fantastic Tabler.io HTML Template into your Symfony project. It s

📦 An easy way to share the data from your backend to the JavaScript.

Laravel Shared Data ✨ Introduction Laravel Shared Data provides an easy way to share the data from your backend to the JavaScript. 🚀 Quick start Inst

Harden request headers, login interface and passwords to increase backend security.

JvMTECH.NeosHardening Package for Neos CMS Harden request headers, login interface and passwords to increase backend security. Installation composer r

Cbe frontauth - A Textpattern plugin to manage backend connections from frontend and protect content from non-logged users

cbe_frontauth This client-side plugin lets your users (or you) manage backend connection from frontend, i.e. connect and disconnect as they (you) woul

A Zend_Cache backend for Redis with full support for tags (works great with Magento)

Zend_Cache backend using Redis with full support for tags This Zend_Cache backend allows you to use a Redis server as a central cache storage. Tags ar

A challenge to develop frontend-backend forms and account creating.
A challenge to develop frontend-backend forms and account creating.

Symfony + Vue (Back/Front) Helped and assisted by Vanessa and Paulo. This project have two sides, the back-end(Symfony) and the front-end(Vue.js) for

Releases(1.0.0)
Owner
Gustavo Freze
Software Engineer in BoaCompra by PagSeguro.
Gustavo Freze
Desafio de Back-End da Alura: Crie uma API Rest funcional focada em controle financeiro.

Lumen PHP Framework Laravel Lumen is a stunningly fast PHP micro-framework for building web applications with expressive, elegant syntax. We believe d

Rejman Nascimento 0 Dec 31, 2022
Repositorio del TP final de la materia de Introduccion a la programacion

tateti Repositorio del TP final de la materia de Introduccion a la programacion Materia TECNICATURA UNIVERSITARIA EN DESARROLLO WEB INTRODUCCION A LA

Jeremias 1 Apr 12, 2022
Repositorio del Trabajo Práctico Obligatorio de la Materia Introducción a la programación en la carrera Tecnicatura en Desarrollo Web de la Universidad Nacional del Comahue

tateti Proyecto php para jugar al tateti en Introduccion a la Programación (FAI) Materia 2021 Introducción a la Programación Tecnicatura en Desarrollo

Francisco Rodriguez 2 Nov 24, 2021
Repositorio Oficial de UtSaber.com

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Run Chems 2 Dec 10, 2021
Repositório, usado para testar integração entre laravel e vercel

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

3ret 2 Dec 6, 2021
Practice-php - Repositório para praticar a sintaxe de php.

Configuração Inicial para desenvolver em PHP Instalando o PHP no Linux (Ubuntu) sudo apt install php libapache2-mod-php sudo apt-get update Utilizand

Lucas Muffato 4 Dec 29, 2022
Repositório da turma 18 de PHP

Programação Backend Professor: Thiago G. Traue ([email protected]) CLASSROOM DA DISCIPLINA: NESTE LINK Preparação do ambiente de desenvolviment

Prof. Thiago G. Traue 5 Mar 22, 2022
Este Repositório guarda arquivos dos meus primeiros passos utilizando o Framework Laravel. Curso: Matheus Battisti.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

null 1 Jun 12, 2022
Repositorio del código fuente utilizado en la página web Lifo.es durante los años 2017 a 2022

Lifo.es Código fuente del juego de rol online Lifo modificado por mi (Sora) durante los años 2017 a 2022. Este código es una modificación del código b

null 5 Dec 28, 2022
Um repositório com classes, interfaces para padronizar os projetos de PHP da empresa

php-utils PHP Utilities for Laravel/Lumen Installation cd /path/to/your/project composer require logcomex/php-utils Utilities Packages Contracts Excep

LogComex 1 Oct 10, 2022