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)); }
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"); }
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); }
private async Task <BankScrapeResult> GetBankDataAsync(IBankConnectionData connectionData) { BankScrapeResult result; using (var provider = GetBankProvider(connectionData)) { result = await provider.GetResultAsync(); } return(result); }