public IActionResult BuyProduct(PaymentCcViewModel model)
        {
            Dictionary <int, UchNoActiveField> result = null;

            _dbProvider.Transaction(transaction =>
            {
                var user = _gameUserService.GetCurrentGameUser(transaction.Connection, User);
                result   = _storeService.BuyProductForCc(transaction, model, user.Id);
            });

            return(Json(result));
        }
        public Dictionary <int, UchNoActiveField> BuyProductForCc(IDbTransaction transaction, PaymentCcViewModel model, int currentUserId)
        {
            var random   = new Random();
            var quantity = model.Quantity;

            var ps        = GetStoreItemsByType(transaction.Connection, model.ProductType);
            var storeItem = ps.StoreList.First(i => i.ProductStoreId == model.ProductStoreId);

            if (storeItem == null)
            {
                throw new ArgumentNullException(Error.InputDataIncorrect, nameof(storeItem));
            }
            var totalCost = (int)Math.Ceiling(storeItem.ProductCost * quantity);

            if ((int)Math.Floor(Math.Abs(model.TotalCost - totalCost)) > 0)
            {
                throw new ValidationException(Error.InputDataIncorrect);
            }

            var canBuy = false;

            BalanceEnoughCc(transaction.Connection, currentUserId, totalCost, b => { canBuy = b; });
            if (!canBuy)
            {
                throw new ValidationException(Error.NotEnoughCc);
            }


            var transactionItem = new TransacationCcDataModel
            {
                UserId         = currentUserId,
                ProductStoreId = storeItem.ProductStoreId,
                Quantity       = quantity,
                TotalCost      = totalCost,
                Source         = (sbyte)SourceCcChange.BuyStoreItem,
                Token          = DateTime.UtcNow.ToString("yyMMddHHmmssffffff") + random.Next(1000, 9999),
                FormToken      = model.__RequestVerificationToken,
                DateCreate     = DateTime.UtcNow
            };

            return(TransactionBuyItemCc(transaction, transactionItem, storeItem));
        }