# README
☁️🚚📦 Frete Rápido - Teste técnico!
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:
- 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
- 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
- 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
- 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:
Exemplo de resposta: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 } ] }'
[ { "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:
Exemplo de resposta:curl --request GET \ --url http://localhost:8080/metrics \ --header 'Content-Type: application/json' \ --header 'User-Agent: insomnia/9.3.2'
{ "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