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);
        }
Exemple #2
0
        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));
        }