コード例 #1
0
        private async Task <CurrencyRate> GetCurrencyRate(Currency currency)
        {
            if (!dbContext.CurrencyRates.Any(cur => cur.Base == currency.ShortName))
            {
                var rate = await coinApi.GetCurrencyRateToUsd(currency.ShortName);

                if (rate == null)
                {
                    return(null);
                }
                dbContext.CurrencyRates.Add(rate);
                dbContext.SaveChanges();
            }
            var priceCurrency = dbContext.CurrencyRates.Last(cur => cur.Base == currency.ShortName);

            return(priceCurrency);
        }
コード例 #2
0
        private async Task UpdateInfoFromApi()
        {
            using (var scope = _scopeFactory.CreateScope())
            {
                _loggerFactory.AddFile(Path.Combine(Directory.GetCurrentDirectory(), "logger.txt"));
                var logger = _loggerFactory.CreateLogger("FileLogger");

                var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
                var coinApi = new CoinApi(_configuration);
                var assets  = context.Assets.Where(a => a.Name != "USD").GroupBy(al => al.ShortName).Select(an => an.First()).ToList();
                foreach (var asset in assets)
                {
                    try
                    {
                        var rate = await coinApi.GetCurrencyRateToUsd(asset.ShortName);

                        asset.Price = rate.Rate;
                        context.Assets.Update(asset);
                        var currency = context.Currencies.FirstOrDefault(c => c.ShortName == asset.ShortName);
                        if (currency != null)
                        {
                            currency.Rate = rate.Rate;
                            context.Currencies.Update(currency);
                        }
                        context.CurrencyRates.Add(rate);
                        logger.LogInformation(String.Format("========= {0} =========== {1} =========", DateTime.Now,
                                                            "Update rate for " + currency.ShortName));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        logger.LogInformation(String.Format("========= {0} =========== {1} =========", DateTime.Now, "Failed to update rates!"));
                    }
                }
                context.SaveChanges();
            }
        }
コード例 #3
0
        public async Task <ActionResult> InsertInvestor([FromBody] InvestorViewModel viewModel)
        {
            try
            {
                var investor = new Investor(viewModel);
                var invCnt   = dbContext.Investors.Count();
                dbContext.Investors.Add(investor);
                var usd = dbContext.Assets.FirstOrDefault(a => a.Name == "USD");
                if (usd != null)
                {
                    usd.Quantity += investor.AmountInvested;
                    dbContext.Assets.Update(usd);

                    if (invCnt == 0)
                    {
                        var time = DateTime.Now;
                        var nav  = new NavHistory
                        {
                            Date  = time,
                            Value = usd.Quantity / investor.SharesReceived
                        };

                        var rate = await coinApi.GetCurrencyRateToUsd("BTC");

                        var btc = new BtcHistory
                        {
                            Date  = time,
                            Value = rate.Rate
                        };

                        dbContext.NavHistories.Add(nav);
                        dbContext.BtcHistories.Add(btc);

                        //if (!dbContext.Assets.ToList().Exists(a => a.ShortName == "BTC"))
                        //{
                        //    try
                        //    {
                        //        var rate = await coinApi.GetCurrencyRateToUsd("BTC");
                        //        var currency = dbContext.Currencies.FirstOrDefault(c => c.ShortName == "BTC");
                        //        if (currency != null)
                        //        {
                        //            currency.Rate = rate.Rate;
                        //            dbContext.Currencies.Update(currency);
                        //        }
                        //        dbContext.CurrencyRates.Add(rate);
                        //    }
                        //    catch (Exception e)
                        //    {
                        //        Console.WriteLine(e);
                        //    }
                        //}
                    }
                }

                dbContext.SaveChanges();
                return(this.Json(new MetaResponse <object> {
                    StatusCode = 200
                }));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(this.Json(new MetaResponse <object> {
                    StatusCode = 200
                }));
            }
        }
コード例 #4
0
        private async Task UpdateDatabase()
        {
            using (var scope = _scopeFactory.CreateScope())
            {
                var coinApi   = new CoinApi(_configuration);
                var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();

                var navs = dbContext.NavHistories.ToList();

                if (navs.Count > 0)
                {
                    var latestNav = navs.Last();
                    var timeDiff  = latestNav.Date - DateTime.Now;
                    if (Math.Abs(timeDiff.Hours) < 3)
                    {
                        return;
                    }
                }

                var assets    = dbContext.Assets.ToList();
                var investors = await dbContext.Investors.ToListAsync();

                if (investors.Count == 0)
                {
                    return;
                }

                var sum         = assets.Sum(a => a.Price * a.Quantity);
                var totalShares = investors.Sum(investor => investor.SharesReceived);
                var time        = DateTime.Now;


                var nav = new NavHistory
                {
                    Date  = time,
                    Value = sum / totalShares
                };

                var rate = await coinApi.GetCurrencyRateToUsd("BTC");

                var btc = new BtcHistory
                {
                    Date  = time,
                    Value = rate.Rate
                };

                dbContext.NavHistories.Add(nav);
                dbContext.BtcHistories.Add(btc);
                dbContext.SaveChanges();

                //if (!assets.Exists(a => a.ShortName == "BTC"))
                //{
                //    try
                //    {


                //        var currency = dbContext.Currencies.FirstOrDefault(c => c.ShortName == "BTC");
                //        if (currency != null)
                //        {
                //            currency.Rate = rate.Rate;
                //            dbContext.Currencies.Update(currency);
                //        }
                //        dbContext.CurrencyRates.Add(rate);
                //    }
                //    catch (Exception e)
                //    {
                //        Console.WriteLine(e);
                //    }
                //}
            }
        }