frete-rapido-api

module
v0.0.0-...-4d27c10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 25, 2024 License: MIT

README

☁️🚚📦 Frete Rápido - Teste técnico!

Frete Rapido Logo

Projeto   |    Tecnologias   |    Fundamentos e estratégias   |    Documentação   |    Clonando e executando   |    Rotas   |    Licença

📌 Projeto

Esta aplicação foi desenvolvida entre os dias 16 à 23 de julho de 2024, com base no teste técnico fornecido pela @Frete Rapido!

Para ficar dentro de todas especificações e requisitos, clique aqui

O objetivo desta aplicação é construir uma API HTTPs que utiliza a API Frete Rapido para realizar simulações de cota de frete, além de persistir os dados no banco de dados para a retidada de métricas.

👩‍💻 Tecnologias

Esse projeto foi desenvolvido utilizando as seguintes tecnologias:

  • Golang - Linguagem escolhida pela sua robustez no processamento de dados de forma concorrente.
  • Go-chi - Biblioteca super leve e performática para construção de servidores HTTP utilizando handlers nativos do Go!
  • Docker - Criação de imagens e conteiners para melhor orquestração e execução do aplicativo em especificos contextos.
  • MongoDB - Banco de dados não relacional para persistência dos dados.
  • Swagger - Para construção da documentação da API.

👨‍🏫 Fundamentos e estratégias abordadas

Esta API foi desenvolvida com o propósito de entrega performática e escalável.

Neste projeto, foram abordados patterns de código, entre eles, estão:

  • Single responsibility principle (SPR);
  • Dependecy inversion principle (DIP);
  • Keep it simple, Silly (KISS);
  • You aren’t gonna need it (YAGNI);
  • Interface segregation principle (ISP);
  • Distroless Docker Image to a maximum compressed size

📚 Documentação

A documentação dessa API foi construída utilizando um toolset famoso para a construção de documentações, chamado de Swagger.
Para conseguir acessar a mesma, basta se redirecionar para a rota /docs depois de iniciar o servidor.

📥 Clonando e executando

Para conseguir executar o projeto sem nenhuma interferência, certifique-se de ter os requisitos mínimos:

Passo a passo:

  1. Clone o repositório localmente usando o seguinte comando no seu terminal de preferência:
    git clone https://github.com/jsGolden/frete-rapido-api    # Clonar repositório
    cd frete-rapido-api                                       # Entrar no repositório clonado
  1. Para que seja possível a configuração das variavéis de ambiente, será necessário criar um arquivo .env utilizando o arquivo .env.example como base
  cp .env.example .env    # caso esteja no Linux
            -- ou --
  copy .env.example .env  # caso esteja no Windows

  1. Suba os containers (API e MongoDB) para a integração total dos serviços
  docker-compose up

  # é possível também parar os containers assim que quiser usando:
  # docker-compose down
  1. Pronto! Por padrão, o seu servidor estará rodando na URI http://localhost:8080

🛣️ Rotas

  • [GET] /docs
    • Responsável por renderizar a documentação Swagger
  • [POST] /quote
    • Responsável por simular a cotação com a FreteRapido e salvar o dado no banco Exemplo de requisição cURL:
      curl --request POST \
        --url http://localhost:8080/quote \
        --header 'Content-Type: application/json' \
        --header 'User-Agent: insomnia/9.3.2' \
        --data '{
        "recipient": {
          "address": {
            "zipcode": "01311000"
          }
        },
        "volumes": [
          {
            "category": -7,
            "amount": 1,
            "unitary_weight": 5,
            "price": 349,
            "sku": "abc-teste-123",
            "height": 0.2,
            "width": 0.2,
            "length": 0.2
          },
          {
            "category": 7,
            "amount": 2,
            "unitary_weight": 4,
            "price": 556,
            "sku": "abc-teste-527",
            "height": 0.4,
            "width": 0.6,
            "length": 0.15
          }
        ]
      }'
    
    Exemplo de resposta:
    [
      {
        "name": "JADLOG",
        "service": ".PACKAGE",
        "deadline": 3,
        "price": 35.99
      },
      {
        "name": "AZUL CARGO",
        "service": "Convencional",
        "deadline": 2,
        "price": 43.56
      },
      {
        "name": "PRESSA FR (TESTE)",
        "service": "Normal",
        "deadline": 0,
        "price": 60.74
      },
      {
        "name": "BTU BRASPRESS",
        "service": "Normal",
        "deadline": 5,
        "price": 93.35
      }
    ]
    
  • [POST] /metrics
    • Responsável por utilizar os dados persistidos para calcular métricas Exemplo de requisição cURL:
    curl --request GET \
      --url http://localhost:8080/metrics \
      --header 'Content-Type: application/json' \
      --header 'User-Agent: insomnia/9.3.2'
    
    Exemplo de resposta:
    {
      "cheapest_quote": 251.93,
      "most_expensive_quote": 1010.58,
      "services": [
        {
          "average_price": 35.99,
          "carrier": "JADLOG",
          "count": 7,
          "total_price": 251.93
        },
        {
          "average_price": 65.94,
          "carrier": "PRESSA FR (TESTE)",
          "count": 9,
          "total_price": 593.5
        },
        {
          "average_price": 86.47,
          "carrier": "AZUL CARGO",
          "count": 9,
          "total_price": 778.31
        },
        {
          "average_price": 112.28,
          "carrier": "BTU BRASPRESS",
          "count": 9,
          "total_price": 1010.58
        }
      ]
    }
    

📑 Licença

Este projeto está sobre a licença MIT.


Desenvolvido com 💜 por Wagner Rodrigues

Directories

Path Synopsis
Package docs Code generated by swaggo/swag.
Package docs Code generated by swaggo/swag.
handlers

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL