Skip to content

Feature/tar 1 criar api motorista#51

Open
phillrog wants to merge 83 commits into
wappamobile:masterfrom
phillrog:feature/TAR-1-Criar-API-Motorista
Open

Feature/tar 1 criar api motorista#51
phillrog wants to merge 83 commits into
wappamobile:masterfrom
phillrog:feature/TAR-1-Criar-API-Motorista

Conversation

@phillrog

@phillrog phillrog commented Mar 10, 2021

Copy link
Copy Markdown

✍🏼 EXPLICAÇÂO

⏱️ Inicialmente

Foi criado a branch feature/TAR-1-Criar-API-Motorista como se existisse gitflow e jira para receber os comentários do commit com #comment.

🏢 Estrutura

A solução para o cadastro de motorista e consulta das coordenadas geográficas do endereço dele foi criada utilizando os conceitos de DDD. Foi começado pela modelagem de domínios ricos. Suas camadas foram segregadas de forma lógica e não física.

Então sua estrutura ficou algo:

  • Building Blocks

    • Core - abstrações, servicebus
    • MessageBus - abstrações e implementações para publicar eventos, assinar, enviar request, publicar mensagens
    • Wappa.WebAPI.Core - segregação para abstrações aplicadas nas apis nesse caso o maincontroller
  • Services

    • Wappa.CoordenadasGeograficas.API
    • Wappa.Motoristas.API

Os microserviços foram criados de forma a trabalhar distribuídos, cada api trabalho com seu contexto ficou muito simples.

  • Application ->Comandos, Eventos e Queries funcionalidades para implementar o CQRS no cadastro do motorista
  • Configuration -> COnfigurações separadas da api para deixar o código mais enxuto
  • Controllers -> endpoints
  • Data -> Para mappings, repositorios, DbContext, Migrations
  • Models -> Entidades e interfaces

🏢 Padrões

Foi implementado CQRS com Mediator no cadastro de motorista. Foi criado :

Os comandos para adicionar, atualizar, deletar e a query para buscar todos.

Foi utilizado padrão de menssageria RPC Request/Response para quando adicionar/atualizar um motorista fazer um request na API de CoordenadasGeograficas .

Foi utilizado padrão CircuitBreaker com Polly no serviço que faz o request a api do google, fica fechado se estiver funcionando e aberto (falha) se algo acontecer. E também WaitAndRetry para se concetar com RabbitMQ

🚀 Bibliotecas

  • ORM Dapper / EF
  • Polly
  • Documentação com Swashbuckle.AspNetCore

As APIS foram criadas na versão .NET Core 3.1.

📦 Docker

Foi dockerizado toda a aplicação. Foi criado as apis com dockerfile e construido o dockercompose para subir o container do :

  • MSSQL na porta 1435:1433
  • RabbitMQ 5672:5672 e 15672:15672
  • Portainer só para ver as imagens, na porta 9000:9000
  • wappa.motoristas.api na porta 4001:4001 (http) 5001:5001 (https)
  • wappa.coordenadasgeograficas.api na 4002:4002 (http) 5002:5002 (https)

💉 Google Maps API

No Google Cloud Platform:

  • Foi estudado para ver como utilizar , foi criado uma conta com cartão de crédito dados cpf etc...
  • Foi criado a Key
  • Foi ativado a Geocoding API e a Geolocation API

Depois foi criado um serviço na Wappa.CoordenadasGeograficas.API chamado GoogleGeocondingService ele faz o request com HttpClient passando os dados de endereço e a Key.

📝 Documentação

Foi implementado uma documentação simples com Swagger.

⌚ Tempo de execução

O projeto foi iniciado ás 21:46 do dia 08/03, fui até às 03:57 do dia 09/03. Eesse período foi a etapa primordial onde tive que entender, refletir e dar os primeiros passos no projeto, criando a api Wappa.Motoristas.API, o banco, modelando a entidades, dockerização do projeto, ocorreram problemas com docker, com bibliotecas, namespaces rsrs. Mas foi possível criar e implementar os enpoinst a adição (POST), atualização (PUT) e o deletar (DELETE) da api motorista.

Depois voltei as 20:43 do dia 09/03 e comecei a pensar nas coisas que faltavam, deu desespero rsrs, levantei que faltava fazer a querie (GET), consulta a api do google, documentar as apis, retornar a consulta para a api motorista, conseguir uma chave para consultar a api e se desce tempo criar algum teste unitário (o que não aconteceu). Iniciei o dia e fui fazendo a query com Dapper, documentei a api com swagger isso era 22:01.

Comecei a criar Wappa.CoordenadasGeograficas.API com os mesmos padrões da Wappa.Motoristas.API, configs, documentação, etc..., depois fui atrás de como usar a api do google mais ou menos 00:59 já estava fazendo a consulta do google maps mas não estava implementado certo, em um serviço registrando como AddHttpClient etc....

Em seguinda quando finalizeu a api Wappa.CoordenadasGeograficas.API, apenas o GET recebedn o endereço para consulta, comecei a implementar o RPC Request/Response, as abstrações e testar se quando mandava SolicitouCadastroMotoristaIntegrationEvent pela api motorista, a Wappa.CoordenadasGeograficas.API estava pegando no serviço CoordenadasIntegrationHandler. FOi até mais ou menos até as 02:59 do dia 10:03 para fazer isso funcionar. Só que surgiu um problema, tinha que devolver a consulta com as coordenadas de volta para Wappa.Motoristas.API, e só dava erro até que por volta das 4:50 consegui retornar os dados e comecei a implementar os mapeamentos para gravar na base ( colocar as propriedades nas DTO dos comandos, nas DTOS, etc...), mapear na entidade, criar o migrations, acerta o migrations pois havia digitado o nome errado da propriedade. E por fim acho que a partir das 5:00 testando o crud de motorista e a consulta. Infelizmente não deu tempo de criar testes. E sigo desde então nesta documentação.
Foi um grande desafio pois comecei no dia 08/03 no fim da noite, enfrentei a jornada de trabalho durante o dia 09/03, e também dando atenção a família, brincando com minha filha fui voltar quase no fim da noite de ontem 09/03 e seguindo até agora 07:37.
Enfim foi legal agradeço a oportunidade.

🏃‍♂️ Como rodar ?

  • Primeiro rode a aplicação setando o projeto Docker Compose como principal. Obs: Aguarde um instante até os contêineres subirem e pare.
  • Vá no console de Gerenciamento de pacotes e execute update-database -StartupProject Services\Motorista\Wappa.Motoristas.API para executar o migrations
  • Agora rode novamente F5 e faça e use
  • Deixei a chave para algumas consultas

❤️ APIs

👍 Resultado

👏 👏 👏 Wappa.Motoristas.API

Gif

👏 👏 👏 Wappa.CoordenadasGeograficas.API

Gif2

phillrog added 30 commits March 8, 2021 21:46
…ção dos mappings, criação do repositorio, criação do contexto
… compose e adicionado banco MSSQL, rabbitmq e portainer
Foi refatorado para usar o método extendido
…tica para usar o método de extensão que mapea o comando atualizar
FOi implementado o handler do comando deletar
phillrog added 30 commits March 10, 2021 01:14
…transmitira o endereço para consultar no handler
…ration handler para consultar as coordenadas ao receber request
…lta das coordeandas ao adicionar e atualizar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant