Executando verificação de segurança...
2

O poder de começar algo sem ter a capacidade plena de concluir

No curso.dev, o Filipe traz uma pergunta interessante na abertura da Pista Rápida do dia 35:

Quantas vezes na sua vida, você deixou de perceber que você concluiu uma tarefa que estava muito além da capacidade da pessoa que você era quando iniciou a tarefa?

E isso me lembrou uma situação no meu trabalho, que representa bem a resposta pra essa frase, e pode motivar você que está com medo de começar um novo projeto ou desafio por não ter conhecimento suficiente para concluir.

Senta, que lá vem história

Estavámos desenvolvendo uma grande plataforma, que teriam 3 portais integrados: E-commerce multi-distribuidores, Plataforma de Cursos e um Sistema de Gestão. Porém, tudo estava num mesmo backend, apesar de existirem 3 projetos frontend, um para cada plataforma.

Bem... Eu estava responsável por desenvolver esse monstro (no backend) de ponta-a-ponta!! E dentre tantos desafios que surgiram nesse processo, além do próprio macro de desenvolver toda essa estrutura, me marcou bastante: precisávamos redirecionar o pedido para o distribuidor mais próximo do cliente em questão de poucos segundos, no ato do processamento do checkout.

Quando isso chegou ao meu conhecimento, eu fiquei: COMO QUE EU VOU FAZER ISSO??

Aí, depois do choque, eu dei espaço pra mente trabalhar... Já descartei a comparação de endereços, porque não existe nenhum fator numérico de comparação nessa informação. E pensei: existem coordenadas... Elas são números!

E lá vai eu fuçar a internet (ChatGPT não tinha sido lançado ainda). Ah, e algo que eu também já tinha em mente: não vou usar uma API que faça essa comparação. E decidi isso por dois motivos:

  1. Isso aumentaria a latência;
  2. Por ser algo matemático, era algo "redondo", que funcionaria da mesma forma pra sempre (esse também foi o que me motivou a não usar uma lib pra fazer o cálculo).

Enfim... Dando continuidade à minha busca, eu encontrei a menina dos olhos de ouro da Geolocalização: Fórmula de Haversine!

Ela é uma fórmula que compara a distância entre dois pontos no globo. E considerando que moramos em um, bastava fazer o cálculo, realizar algumas conversões e multiplicar pelo raio da Terra! (Não é tão simples quanto digitar essa explicação, verdade seja dita kkk).

Então já que conheci a espada que ia cortar a cabeça do monstro, vamos armar o código com ela!

Fiz a implementação, que inicialmente injetei diretamente na query SQL. Porém... Lembrei que uma outra informação era essencial para o envio dos produtos: a existência deles no estoque do distribuidor kkk.

E foi ai que eu separei, de uma certa forma, a query, da implementação das regras de negócio, para considerar essas duas perguntas: Qual o distribuidor mais próximo e que possui todos os produtos do carrinho em estoque?

Depois de ver essa lindeza funcionando, outro requisito, dessa vez não funcional, precisava ser cumprido: a agilidade no processamento! Não existia um valor máximo exigido, mas eu sabia que tinha que ser bem rápido.

Para isso, eu realizei o agrupamento por bairro, cidade e estado, para que gradualmente o raio de busca fosse expandido, e apenas se necessário. Isso amenizaria o impacto do aumento da base de distribuidores no tempo de processamento.

FIM! kkk

Carregando publicação patrocinada...