Code Monkey home page Code Monkey logo

resolu-o-teste-fullstack's Introduction

🚀 Resolução de Teste Full Stack

Bem vindo(a)!

Resumo do Projeto Este projeto consiste no desenvolvimento de uma aplicação web onde é possível cadastrar clientes com suas coordenadas geográficas (latitude e longitude) e, em seguida, calcular a menor rota possível entre esses clientes, retornando ao ponto inicial.

Solução Utilizada

Para resolver esse desafio, recorri a duas principais soluções encontradas online:

Fórmula de Haversine:

Encontrei essa fórmula no Stack Overflow em C#, e a adaptei para JavaScript. A fórmula de Haversine é utilizada para calcular a distância entre dois pontos geográficos em uma esfera, como a Terra, considerando suas coordenadas de latitude e longitude.

Algoritmo do Vizinho Mais Próximo (Nearest Neighbor):

Este algoritmo é uma heurística simples e eficaz para encontrar uma solução aproximada para o problema do caixeiro-viajante. Ele me permitiu determinar a ordem dos clientes na rota, escolhendo iterativamente o cliente mais próximo do ponto atual.

Para resolver esse desafio, utilizei as seguintes tecnologias:

  • Node.js: Plataforma de execução de JavaScript utilizada para desenvolver o backend da aplicação.
  • NestJS: Um framework para construir aplicativos da Web eficientes e escaláveis em Node.js.
  • PostgreSQL: Banco de dados relacional usado para armazenar informações dos clientes e calcular rotas.
  • Class Validator e Class Transformer: Utilizados para validar e transformar os DTOs (Data Transfer Objects) utilizados na comunicação entre o frontend e o backend.
  • Styled Components: Biblioteca para estilizar componentes React com CSS em JavaScript.
  • Bootstrap: Framework front-end para desenvolvimento ágil de interfaces responsivas e mobile-first.
  • Axios: Cliente HTTP baseado em Promise para o navegador e Node.js. Foi utilizado para fazer requisições AJAX no frontend.
  • Beekeeper Studio: Utilizado como ferramenta de interface gráfica para facilitar a consulta e gerenciamento do banco de dados PostgreSQL.

💻 Instalação

Antes de começar, certifique-se de ter o Node.js instalado em sua máquina.

# Clone esse repositório
- $ git clone https://github.com/gabrielAnacletoo/Resolu-o-teste-FullStack

# Vá para o repositório Back-end
- $ cd Resolu-o-teste-FullStack

# Instale as dependencias
- $ npm install

# Rode a aplicação
- $ npm run start:dev

👨‍💻 Entidades utilizadas no projeto

- # Clients
- $ Responsavel pelo cadastros dos clientes.

🛣️ Rotas da API

🔵 GET /routes

  • Descrição: Retorna a menor rota calculada entre todos os clentes.

🔵 GET /clients

  • Descrição: Retorna todos os clientes, porém com paginação, Também é possivel pesquisar utiliando filtros como (name, email, phone), além de paginar o resultando enviando page, e limit, onde pagina é a pagina que quer receber e limite o total de registro por pagina. Por padrão eu defini como page 1 e limit 10. isso por ser ajustado como quiser na requisição.

  • Exemplo: /clients?name=cross%20fit**

  • Retorno:

{
id: 13,
name: "Cross fit Iron Fox",
email: "[email protected]",
phone: "123456789",
latitude: "-22.33114798",
longitude: "-49.04693552",
createdat: "2024-03-07T14:39:57.229Z",
updatedat: "2024-03-07T14:39:57.229Z",
deletedat: null
}

ou

  • Exemplo: clients?phone=14991302799

  • Retorno:

{
id: 17,
name: "zoo",
email: "[email protected]",
phone: "14991302799",
latitude: "-22.34065002",
longitude: "49.01996372",
createdat: "2024-03-07T17:02:32.468Z",
updatedat: "2024-03-07T17:02:32.468Z",
deletedat: null
}
  • Exemplo de paginação: clients?page=1&limit=12
Retorna a pagina 1 com 12 registros.

🟢 POST /clients

  • Descrição: Cria um novo cliente no banco de dados, se já existe um email cadastrado um erro vai ser retornado.
  • Corpo da Requisição:
{
name: "Cross fit Iron Fox",
email: "[email protected]",
phone: "123456789",
latitude: -22.33114798042712,
longitude: -49.04693551889008
}
  • Exemplo de erro:
{
message: "There is already a client with this email.",
error: "Bad Request",
statusCode: 400
}

Detalhes Adicionais

resolu-o-teste-fullstack's People

Contributors

gabrielanacletoo455 avatar

Watchers

Gabriel Anacleto  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.