public async Task <ServiceLink> CreateLink(string userId, IQuestradeLink questradeLink) { QuestradeCredentials questradeCredentials = await GetLinkCredentials(questradeLink); QuestradeClient client = m_clientFactory.CreateClient(questradeCredentials); AccountsResponse response = await client.FetchAccounts(); ServiceType serviceType = ServiceType.Questrade; string serviceId = response.UserId.ToString(); if (LinkExists(userId, serviceType, serviceId)) { throw new ConflictException(); } ServiceLink link = new ServiceLink(userId, ServiceType.Questrade, serviceId, questradeLink.IsPractice); using (IDbContextTransaction transaction = m_context.Database.BeginTransaction()) { m_context.ServiceLinks.Add(link); m_context.SaveChanges(); Credentials credentials = new Credentials(link, questradeCredentials); m_context.Credentials.Add(credentials); m_context.SaveChanges(); m_accountsManager.SynchronizeAccounts(link, response.Accounts); transaction.Commit(); } return(link); }
public async Task <IEnumerable <QuestradeSymbol> > FindSymbol(string userId, string query) { if (!TryFindQuestradeLink(userId, out ServiceLink link)) { throw new Exception("This account does not have a linked Questrade account"); } QuestradeClient client = m_clientFactory.CreateClient(userId, link.Id); return(await client.FindSymbols(query)); }
public async Task <IEnumerable <Account> > SynchronizeAccounts(string userId, int linkId) { ServiceLink link = m_context.ServiceLinks.Find(linkId, userId); if (link == null) { return(null); } QuestradeClient client = m_clientFactory.CreateClient(userId, linkId); AccountsResponse response = await client.FetchAccounts(); return(SynchronizeAccounts(link, response.Accounts)); }