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)); }