private async Task <ResponseMessage> RegistrarCliente(UsuarioRegistradoIntegrationEvent message) { var clienteCommand = new RegistrarClienteCommand(message.Id, message.Nome, message.Email, message.Cpf); ValidationResult sucesso; using (var scope = _serviceProvider.CreateScope()) { var mediator = scope.ServiceProvider.GetRequiredService <IMediatorHandler>(); sucesso = await mediator.EnviarComando(clienteCommand); } return(new ResponseMessage(sucesso)); }
//abstração para chamar o Mediator que chama ClienteCommandHandler.cs private async Task <ResponseMessage> RegistrarCliente(UsuarioRegistradoIntegrationEvent message) { ValidationResult sucesso; var clienteCommand = new RegistrarClienteCommand(message.Id, message.Nome, message.Email, message.Cpf); // o escopo q estou trabalhando é singleton using (var scope = _serviceProvider.CreateScope()) //pego o container de Inj Dep, crio um scopo e busco ele com base na interface { //por BackgroundService trabalhar com singleton, não posso chamar uma instancia // de IMediatorHandler (pois é scoped), e scoped não comunica com singleton var mediator = scope.ServiceProvider.GetRequiredService <IMediatorHandler>(); //service locate sucesso = await mediator.EnviarComando(clienteCommand); } return(new ResponseMessage(sucesso)); }
private async Task <ResponseMessage> RegistrarCliete(UsuarioRegistro usuarioRegistro) { var usuario = await _userManager.FindByEmailAsync(usuarioRegistro.Email); var usuarioRegistrado = new UsuarioRegistradoIntegrationEvent(Guid.Parse(usuario.Id), usuarioRegistro.Nome, usuarioRegistro.Email, usuarioRegistro.Cpf); try { return(await _bus.RequestAsync <UsuarioRegistradoIntegrationEvent, ResponseMessage>(usuarioRegistrado)); } catch { await _userManager.DeleteAsync(usuario); throw; } }
private async Task <ResponseMessage> RegistrarCidadao(UsuarioRegistro usuarioRegistro) { var usuario = await _authenticationService.UserManager.FindByEmailAsync(usuarioRegistro.Email); var usuarioRegistrado = new UsuarioRegistradoIntegrationEvent( Guid.Parse(usuario.Id), usuarioRegistro.Nome, usuarioRegistro.Email, usuarioRegistro.Cpf); try { return(await _bus.RequestAsync <UsuarioRegistradoIntegrationEvent, ResponseMessage>(usuarioRegistrado)); } catch (Exception ex) { AdicionarErroProcessamento(ex.Message); return(new ResponseMessage(new ValidationResult())); } }
private async Task <ResponseMessage> RegistrarCliente(UsuarioRegistro usuarioRegistro) { var usuario = await _userManager.FindByEmailAsync(usuarioRegistro.Email); var usuarioRegistrado = new UsuarioRegistradoIntegrationEvent( Guid.Parse(usuario.Id), usuarioRegistro.Nome, usuarioRegistro.Email, usuarioRegistro.Cpf ); _bus = RabbitHutch.CreateBus("host=localhost:5672"); var response = await _bus.RequestAsync <UsuarioRegistradoIntegrationEvent, ResponseMessage>(usuarioRegistrado); return(response); }
//envia a mensagem que registra o cliente (envia para API de Cliente) private async Task <ResponseMessage> RegistrarCliente(UsuarioRegistro usuarioRegistro) { var usuario = await _userManager.FindByEmailAsync(usuarioRegistro.Email); var usuarioRegistrado = new UsuarioRegistradoIntegrationEvent(Guid.Parse(usuario.Id), usuarioRegistro.Nome, usuarioRegistro.Email, usuarioRegistro.Cpf); try { //só locahost tbm funciona, pois a porta 5672 é a padrão return(await _bus.RequestAsync <UsuarioRegistradoIntegrationEvent, ResponseMessage>(usuarioRegistrado)); } catch (Exception e) { await _userManager.DeleteAsync(usuario); throw; } }
private async Task <ResponseMessage> RegisterClient(RegisterRequest registerRequest) { ApplicationUser user = await _userManager.FindByEmailAsync(registerRequest.Email); UsuarioRegistradoIntegrationEvent registeredUser = new UsuarioRegistradoIntegrationEvent(Guid.NewGuid(), registerRequest.Name, registerRequest.Email, registerRequest.Cpf); UsuarioRegistradoSendMailIntegrationEvent registeredUserSendMail = new UsuarioRegistradoSendMailIntegrationEvent(Guid.NewGuid(), registerRequest.Name, registerRequest.Email, registerRequest.Cpf); try { RetryPolicy policy = Policy.Handle <Exception>() .WaitAndRetry(15, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (outcome, timespan, retryCount, context) => { Console.WriteLine($"Tentando pela {retryCount} vez!"); }); var result = await policy.Execute(async() => await _bus.RequestAsync <UsuarioRegistradoIntegrationEvent, ResponseMessage>(registeredUser)); if (result.ValidationResult.IsValid) { await policy.Execute(async() => await _bus.PublishAsync(registeredUserSendMail)); } return(result); } catch (Exception e) { await _userManager.DeleteAsync(user); throw; } }