コード例 #1
0
        public Task <Domain.ContaCorrente.ContaCorrente> Obter(ContaModel conta)
        {
            if (conta == null)
            {
                return(Task.FromResult <Domain.ContaCorrente.ContaCorrente> (null));
            }

            Domain.ContaCorrente.ContaCorrente fakeConta = null;

            if (StaticValues.ContaCorrenteInterna(conta.Banco))
            {
                // Gerando dados de saldos, limites, status e etc, devido a aplicação não estar persistindo dados
                fakeConta = new Domain.ContaCorrente.ContaCorrente()
                {
                    Agencia      = conta.Agencia,
                    Conta        = conta.Conta,
                    DigitoConta  = conta.DigitoConta,
                    DataAbertura = DateTime.Now,
                    Limite       = new Random().Next(0, 30000),
                    Saldo        = new Random().Next(-5000, 50000),
                    Status       = StatusContaCorrente.ATIVA,
                    Tipo         = TipoContaCorrente.PESSOA_FISICA
                };
            }
            return(Task.FromResult <Domain.ContaCorrente.ContaCorrente> (fakeConta));
        }
コード例 #2
0
        public async Task <ServiceResult> Transferir(ContaModel ccOrigem, ContaModel ccDestino, decimal valor)
        {
            Domain.ContaCorrente.ContaCorrente contaDestino = null;

            if (valor <= 0)
            {
                return(Criticas.Transferencia.ValorInvalido);
            }

            var contaOrigem = await this.ContaCorrenteService.Obter(ccOrigem);

            if (contaOrigem == null)
            {
                return(Criticas.ContaCorrente.ContaInvalida);
            }

            var contaOrigemAtiva = await this.ContaCorrenteService.ValidarContaAtiva(contaOrigem);

            if (!contaOrigemAtiva)
            {
                return(Criticas.Transferencia.ContaOrigemInvalida);
            }

            if (StaticValues.ContaCorrenteInterna(ccDestino.Banco))
            {
                contaDestino = await this.ContaCorrenteService.Obter(ccDestino);

                if (contaDestino == null)
                {
                    return(Criticas.ContaCorrente.ContaInvalida);
                }

                var contaDestinoAtiva = await this.ContaCorrenteService.ValidarContaAtiva(contaDestino);

                if (!contaDestinoAtiva)
                {
                    return(Criticas.Transferencia.ContaDestinoInvalida);
                }
            }

            var debitoResult = await this.ContaCorrenteService.Debitar(contaOrigem, valor);

            if (!debitoResult.Ok)
            {
                return(debitoResult);
            }

            if (StaticValues.ContaCorrenteInterna(ccDestino.Banco))
            {
                await this.ContaCorrenteService.Creditar(contaDestino, valor);
            }
            else
            {
                await this.SPBQueueService.EnviarTransferenciaSPB(ccDestino, valor);
            }

            return(ServiceResult.Processado());
        }