- Sobre o desafio
- Endpoints da API
- Baixar e executar
- Testes
- LICENÇA
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.
Request
path: /points
method: GET
Response
status: 200
body: Array<{
id: string,
name: string,
xCoord: number,
yCoord: number
}>
Request
Parâmetros da QueryString
distance
: Número positivoxCoord
: Número positivoyCoord
: 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
}>
Request
name
: TextoxCoord
: Número inteiro positivoyCoord
: 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 }
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
- Node.js 18.x LTS ou superior.
# git clone <repo-url> <dist>
git clone https://github.com/viniciuscosmome/points-of-interest points-of-interest
Depois de clonar e sempre que atualizar o repositório, execute o comando abaixo para manter as dependências atualizadas.
yarn install
O comando abaixo serve para configurar o banco de dados executando as migrações.
yarn prisma:migrate:dev
#ou
npx prisma migrate dev
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
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
Unitários
yarn test
Points Of Interest
com licença MIT.