Categorygithub.com/jsGolden/frete-rapido-api
module
0.0.0-20240725185722-4d27c1017513
Repository: https://github.com/jsgolden/frete-rapido-api.git
Documentation: pkg.go.dev

# 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

# Packages

No description provided by the author
No description provided by the author
Package docs Code generated by swaggo/swag.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author