Hoje eu fui aprender um pouco mais sobre URL dispatch https://actix.rs/docs/url-dispatch/, eu fiquei incomodado com a repetição de prefixos que eu fiquei fazendo nas minhas rotas, como por exemplo:

todos estes “/caldinhos” tava me incomodando bastante, até pq é passível de erro da minha parte e eu poderia acabar tendo testes falhando simplesmente porque tinha um typo.
Foi ai que eu fui atrás de tentar resolver isso, como eu não posso usar o “format!” dentro das chamadas das MACROS (patch, post, get), eu fui pesquisar e achei o link do doc acima, e lá tem este exemplo que me abriu os olhos:

O link dele tá aqui: https://actix.rs/docs/url-dispatch/#using-an-application-prefix-to-compose-applications.
Isso ficou muito massa!.
Mas tem uma coisa que me incomoda no código que to criando ( que em outras linguagens é entregue fácil), que é “Error Handling”(https://dev.to/krowemoh/a-web-app-in-rust-14-error-handling-2kmg) . Mas isso ainda vai demorar, eu quero deixar as coisas básicas funcionando mas deixar o código com a estrutura certa. (Por exemplo, to sempre retornando Result [https://doc.rust-lang.org/std/result/] de quase todas as funções, assim consigo tratar os erros sem problemas).
Hoje eu consegui terminar as rotas da API para o modelo “PendingReview”, contudo, ainda to apanhando para achar materiais que ensinem como testar um web app actix-web sem muita frescura. Eu só quero enviar os dados para uma rota, receber o meu Response ou json bonitinho e a partir dai tratar o que eu tiver de tratar e validar nos testes.
Eu gosto de testes automatizados mas o trade-off de morrer pra aprender pra fazer isso em actix-web não vale minha paciência.
E pra acabar a primeira rodada de coding de hoje: criei um container para rodar o servidor seguindo os passos deste artigo aqui https://devpress.csdn.net/cloudnative/62f3aca37e66823466187615.html.
A princípio eu só queria conseguir rodar o web server utilizando um container mas ainda bem que no artigo já falava sobre stages [https://docs.docker.com/build/building/multi-stage/] e como economizar no tamanho da imagem final voltado pra Rust. (Eu aprendi um pouco sobre o Cargo mas não tanto).
O que eu achei legal, a imagem ficou com maravilhosos 19MB de tamanho!

Outro rolê que aconteceu: eu passei horas tentando fazer meu container rodar, infelizmente apanhei com vários erros, um deles foi o problema de buildar o meu container utilizando meu Mac M1.
Quando você faz:
docker build -t nome_da_imagem .
em um M1, você vai pegar uma imagem que roda em ARM64, sendo que várias das máquinas de clouds não serão ARM (GKE incluso, por exemplo).
Mas como a vida é uma caixinha de surpresas, por algum motivo, quando eu copiava o executável do step de build e colocava no Stage pra poder chamar docker run
, eu recebia a mensagem que o executável não existia mas ele funciona ao rodar a partir da imagem “rust”.

Se eu só colocar até a página 6 no Dockerfile, eu consigo executar os testes que preciso contra o container.
E no final de tudo ainda passei uns 5 minutos pra corrigir este mesmo problema: https://stackoverflow.com/questions/44098209/running-rust-on-docker-empty-reply-from-server. Pra não ficar sofrendo com isso, coloquei uma environment variable no código pra especificar o HOST.
E meu docker-compose ficou assim:
