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; } }
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"); } }