public TransferenciaServico(ITransferenciaRepositorio transferenciaRepositorio, IOperacaoServico operacaoServico, IContaServico contaServico, ITransacaoServico transacaoServico, IProdutorOperacoesClient produtorClient) { this.transferenciaRepositorio = transferenciaRepositorio; this.contaServico = contaServico; this.transacaoServico = transacaoServico; this.operacaoServico = operacaoServico; this.produtorClient = produtorClient; realizarOperacaoPeloTipo = new Action <Conta, decimal>[] { (conta, valor) => operacaoServico.Debitar(conta, valor), (conta, valor) => operacaoServico.Creditar(conta, valor) }; }
public void Efetivar(EfetivarOperacaoUnariaDto dto) { var cashIn = cashInRepositorio.Get(dto.OperacaoId); try { var conta = contaServico.ObterConta(cashIn.ContaId); using (var transacao = transacaoServico.GerarNova()) { operacaoServico.Creditar(conta, cashIn.Valor + cashIn.ValorBonificacao); operacaoServico.MarcarEfetivada(cashIn); transacao.Finalizar(); } } catch (CarteiraDigitalException e) { operacaoServico.MarcarComErro(cashIn, e.Message); } cashInRepositorio.Update(cashIn); }