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