Skip to content

viniciuscosmome/points-of-interest

Repository files navigation

Sumário

  1. Sobre o desafio
  2. Endpoints da API
  3. Baixar e executar
  4. Testes
  5. LICENÇA

Pontos de Interesse por GPS

O desafio: 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.

Exemplo

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
Funcionalidades da API
  • 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.

version license main tool Database

Endpoints da API

Pegar todos os pontos

Request

path: /points
method: GET

Response

status: 200
body: Array<{
  id: string,
  name: string,
  xCoord: number,
  yCoord: number
}>

Pegar pontos por proximidade

Request

Parâmetros da QueryString

  • distance: Número positivo
  • xCoord: Número positivo
  • yCoord: Número positivo
path: /points/search
query string: distance=NUMBER&xCoord=NUMBER&yCoord=NUMBER
method: GET

Response

status: 200
body: Array<{
  id: string,
  name: string,
  xCoord: number,
  yCoord: number
}>

Criar ponto de interesse

Request

  • name: Texto
  • xCoord: Número inteiro positivo
  • yCoord: Número inteiro positivo
path: /points
method: POST
header: { 'Content-Type': 'application/json' }
body: { name: string, xCoord: number, yCoord: number }

Response

status: 201
body: { message: string }

Deletar pontos de interesse

Request

path: /points
method: DELETE
header: { 'Content-Type': 'application/json' }
body: { ids: Array<string> }

Response

status: 200
body: { message: string }

Descrição em pt-BR

Requisitos

  1. Node.js 18.x LTS ou superior.

Instalação

Crie um fork e então clone

# git clone <repo-url> <dist>
git clone https://github.com/viniciuscosmome/points-of-interest points-of-interest

Dependências

Depois de clonar e sempre que atualizar o repositório, execute o comando abaixo para manter as dependências atualizadas.

yarn install

Migrações

O comando abaixo serve para configurar o banco de dados executando as migrações.

yarn prisma:migrate:dev
#ou
npx prisma migrate dev

Seed

O arquivo seed.ts contém Pontos de interesse pré-configurado que você pode usar para criar dados iniciais na base de dados.

yarn prisma:seed
# ou
npx prisma db seed

Inicializando a API

Note

Ao acessar a API no navegador você terá acesso a uma documentação das rotas construida com o Swagger

Modo: desenvolvimento

Este comando inicia o aplicativo com o servidor HTTP. Abra seu navegador e navegue até http://localhost:3000/.

yarn start

Modo: desenvolvimento (--watch)

Este comando irá monitorar seus arquivos, recompilando e recarregando automaticamente o servidor

yarn start:dev

Modo: produção

Esse comando inicia a aplicação no modo de produção.

yarn build # compila a API
yarn start:prod # inicializa a versão de produção

Testes

Unitários

yarn test

Licença

Points Of Interest com licença MIT.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published