public async Task <Companies> GetCompanyAsync(Enums.Companies companies) { Companies _companies = await _memoryCache.GetOrCreateAsync <Companies>(companies.ToString(), async entry => { entry.SlidingExpiration = TimeSpan.FromDays(30); return(await _retrieverRepository.GetFirstAsync <Companies>(x => x.Name == companies.ToString())); }); return(_companies); }
public async Task <Pair> GetPairAsync(string normalized) { Pair pair = await _memoryCache.GetOrCreateAsync <Pair>(normalized, async entry => { entry.SlidingExpiration = TimeSpan.FromDays(30); return(await _retrieverRepository.GetFirstAsync <Pair>(x => x.Normalized == normalized)); }); if (pair == null) { _memoryCache.Remove(normalized); } return(pair); }
public async Task <UserTransactionOverview> TransactionCalculate(Guid userId) { IEnumerable <Transaction> transactions = await GetByUserIdAsync(userId); UserTransactionOverview overview = new UserTransactionOverview(); var companies = await _companiesServices.GetCompaniesAsync(); var pairs = await _pairServices.GetPairsAsync(); foreach (Transaction transaction in transactions) { Currency currency = await _retrieverRepository.GetFirstAsync <Currency>(x => x.Companies == transaction.Market && x.Pairs == transaction.Coin); if (currency == null) { continue; } if (transaction.IsSold) { overview.NewPrice += transaction.SellPrice * transaction.Unit; } else { overview.NewPrice += currency.Last * transaction.Unit; } overview.OldPrice += transaction.BuyingPrice * transaction.Unit; var _pair = pairs.FirstOrDefault(x => x.Id == transaction.Coin); var _companies = companies.FirstOrDefault(x => x.Id == transaction.Market); var _overviewCoin = overview.CoinByCoin.FirstOrDefault(x => x.Coin == _pair && x.Market == _companies); if (_overviewCoin != null) { _overviewCoin.NewPrice += currency.Last * transaction.Unit; _overviewCoin.OldPrice += transaction.BuyingPrice * transaction.Unit; _overviewCoin.Profit += (transaction.BuyingPrice * transaction.Unit) - (currency.Last * transaction.Unit); _overviewCoin.ProfitRatio += (transaction.BuyingPrice * transaction.Unit) % (currency.Last * transaction.Unit); _overviewCoin.Unit += transaction.Unit; } else { overview.CoinByCoin.Add(new CoinByCoinOverview() { Coin = pairs.FirstOrDefault(x => x.Id == transaction.Coin), Market = companies.FirstOrDefault(x => x.Id == transaction.Market), NewPrice = currency.Last * transaction.Unit, OldPrice = transaction.BuyingPrice * transaction.Unit, Profit = (transaction.BuyingPrice * transaction.Unit) - (currency.Last * transaction.Unit), ProfitRatio = (transaction.BuyingPrice * transaction.Unit) % (currency.Last * transaction.Unit), Unit = transaction.Unit }); } } overview.Profit = overview.NewPrice - overview.OldPrice; return(overview); }