Ejemplo n.º 1
0
        private IUsuario ObterUsuarioResponsavel(NovaTransacaoRequest request)
        {
            var usuario = usuarioRepositoryFactory.Create().Get(request.Usuario);

            if (usuario == null)
            {
                throw new DomainException("Usuário não encontrado.");
            }
            return(usuario);
        }
 public IActionResult Post([FromBody] NovaTransacaoRequest request)
 {
     try
     {
         var id = transacaoService.NovaTransacao(request);
         ExecAsync(() => logger.LogInformation("Transação efetuada com sucesso", request));
         return(Ok(id));
     }
     catch (DomainException ex)
     {
         ExecAsync(() => logger.LogError(ex, $"Transação falhou: {ex.Message}", request));
         return(BadRequest(ex.Message));
     }
     catch (Exception e)
     {
         ExecAsync(() => logger.LogError(e, $"Transação falhou: {e.Message}", request));
         throw e;
     }
 }
Ejemplo n.º 3
0
        public Guid NovaTransacao(NovaTransacaoRequest request)
        {
            var contaOrigem = ObterConta(request.ContaOrigem);

            if (contaLockService.PegarLock(request.ContaOrigem))
            {
                try
                {
                    var usuario       = ObterUsuarioResponsavel(request);
                    var contasDestino = ObterContasDestino(request.ContasDestino);
                    var transacao     = CriarTransacao(usuario, contaOrigem, contasDestino, request.Valor);
                    Salvar(transacao);
                    return(transacao.Id);
                }
                catch (Exception e) { throw e; }
                finally { contaLockService.LiberarLock(request.ContaOrigem); }
            }
            else
            {
                throw new DomainException("Não foi possível concluir a operação pois a conta está bloqueada em outra operação");
            }
        }