public async Task AddAccounts(AddAccounts command) { try { var exchangeTokenResponse = await _plaid.ExchangeToken(command.PublicToken, _tokenSource.Token); if (exchangeTokenResponse != null && !string.IsNullOrEmpty(exchangeTokenResponse.AccessToken)) { List <IEvent> events = new List <IEvent>(); var bankAddedEvent = new BankAdded(command.BankId, command.BankName, exchangeTokenResponse.AccessToken, command.BoardId); events.Add(bankAddedEvent); var config = _settings.Get <TransactionWebhookConfig>(TransactionWebhookConfig.SettingsPrefix); var url = config.Url.Replace("{boardid}", command.BoardId); var webhookResponse = await _plaid.UpdateWebhook(exchangeTokenResponse.AccessToken, url, _tokenSource.Token); var bankWebhookAdded = new BankWebhookAdded(command.BankId, webhookResponse?.Item?.Webhook, command.BoardId); events.Add(bankWebhookAdded); var authResponse = await _plaid.RetrieveBalances(exchangeTokenResponse.AccessToken, _tokenSource.Token); if (authResponse?.Accounts?.Any() ?? false) { var accountAddedEvents = authResponse.Accounts.Select(a => new AccountAdded(command.BoardId, exchangeTokenResponse.AccessToken, a.AccountId, command.BankName, command.BankId, a.Name, a.Type, a.OfficialName, a.SubType, a.Balances.Available, a.Balances.Current, a.Balances.Limit) ); events.AddRange(accountAddedEvents); RaiseEvents(events); } } } catch (Exception ex) { throw; } }
public void Apply(BankWebhookAdded e) { Banks[e.BankId].AddWebhook(e.Url); }