public async Task <IHttpActionResult> Scrape([FromUri] Bank bank, [FromBody] JObject body)
        {
            if (body == null)
            {
                return(BadRequest("Dados de conexão precisam ser informados"));
            }

            IBankConnectionData connectionData = null;

            switch (bank)
            {
            case Bank.BancoDoBrasil:
                connectionData = body.ToObject <BancoDoBrasilConnectionData>();
                break;

            case Bank.Nubank:
                connectionData = body.ToObject <NubankConnectionData>();
                break;

            case Bank.Unknown:
            default:
                return(BadRequest($"Banco não suportado: \"{bank.GetDescription()}\""));
            }

            await _appService.ScrapeBankDataAsync(connectionData);

            return(Ok(true));
        }
Beispiel #2
0
        private IBankProvider GetBankProvider(IBankConnectionData connectionData)
        {
            if (connectionData == null)
            {
                throw new Exception("É necessário informar os dados de acesso de algum banco");
            }

            if (connectionData.IsValid())
            {
                switch (connectionData.Bank)
                {
                case Bank.BancoDoBrasil:
                    if (connectionData is BancoDoBrasilConnectionData bbConnectionData)
                    {
                        return(new BancoDoBrasilProvider(new BancoDoBrasilApiRepository(bbConnectionData)));
                    }

                    break;

                case Bank.Nubank:
                    if (connectionData is NubankConnectionData nubankConnectionData)
                    {
                        return(new NubankProvider(new NubankApiRepository(nubankConnectionData)));
                    }

                    break;

                case Bank.Unknown:
                default:
                    throw new Exception($"Banco não suportado: {connectionData.Bank.GetDescription()}");
                }
            }

            throw new Exception($"Os dados de acesso ao \"{connectionData.Bank.GetDescription()}\" são inválidos");
        }
Beispiel #3
0
        public async Task ScrapeBankDataAsync(IBankConnectionData connectionData)
        {
            var bankData = await GetBankDataAsync(connectionData);

            if (bankData == null)
            {
                return;
            }

            var account = _mapper.Map <Account>(bankData.Account);

            account.Bank = bankData.Bank;

            if (bankData.Customer != null)
            {
                var customer = _mapper.Map <Customer>(bankData.Customer);
                await _customersService.AddAsync(customer);

                account.Customer   = customer;
                account.CustomerId = customer.Id;
            }

            await _accountsService.AddAsync(account);

            await SaveBillsAsync(bankData.Bills, account);
            await SaveCardsAsync(bankData.Cards, account);
            await SaveTransactionsAsync(bankData.Transactions, account);
        }
Beispiel #4
0
        private async Task <BankScrapeResult> GetBankDataAsync(IBankConnectionData connectionData)
        {
            BankScrapeResult result;

            using (var provider = GetBankProvider(connectionData))
            {
                result = await provider.GetResultAsync();
            }

            return(result);
        }