Visão geral
Três telas no mesmo app, conversando na hora. O cliente monta o pedido, marca o endereço no mapa e vê a taxa e o tempo antes de pedir. A loja recebe o pedido no instante, aceita, prepara e avisa quando fica pronto. O entregador pega a entrega e segue a rota mais curta, e o cliente vê ele andando no mapa com o tempo que falta.
Tudo escrito em C#, sem nenhum arquivo JavaScript próprio. Dá pra adicionar à tela inicial do celular como app, sem loja de aplicativos.
Como funciona
Rota: o caminho é calculado pelas ruas com o algoritmo A*, não em linha reta. Um rio no meio do bairro dobra o caminho, e a taxa e o prazo acompanham. Um teste confere que o caminho achado é o mais curto possível em todas as ruas do mapa.
Taxa: fixa até 2 km e depois por quilômetro começado, sem valor quebrado. Acima de 6 km pelas ruas, o endereço fica fora da área de entrega.
Pedido: cada etapa tem dono. Só a loja aceita, só o entregador marca entregue, e o cliente só cancela antes da loja aceitar. Recusar ou cancelar exige um motivo, que aparece pro cliente.
Tempo real: cada mudança aumenta a versão do pedido, e quando duas telas mudam o mesmo pedido, vale a versão maior. Aviso atrasado ou repetido nunca desfaz uma etapa. E se duas telas gravarem ao mesmo tempo e uma apagar o pedido da outra, a dona do pedido percebe e grava de novo.
Testes
34 testes automatizados (rota, taxa, etapas do pedido, rastreio e junção entre telas). O fluxo inteiro também foi testado no navegador com três abas abertas ao mesmo tempo, do pedido à entrega. Esse teste achou um problema que os testes de unidade não pegavam: a tela do cliente só atualizava depois de recarregar. Já está corrigido.
Stack
C# 12, .NET 8, Blazor WebAssembly, System.Text.Json com geração em tempo de compilação, xUnit. Mapa em SVG desenhado à mão.