Пример #1
0
        private void ValidatePlayersWinningsRules(Guid withdrawalId, Guid playerId)
        {
            if (!_configuration.HasWinnings)
            {
                return;
            }

            var allWinningRules = _configuration.WinningRules.ToList();

            foreach (var rule in allWinningRules)
            {
                var startDate = GetStartDate(rule, playerId);
                var endDate   = GetEndDate(rule);

                var actualTransactions = _gameQueries.GetWinLossGameActions(rule.ProductId)
                                         .Where(o => o.Round.PlayerId == playerId)
                                         .Where(o => o.Timestamp >= startDate && o.Timestamp <= endDate);

                var wonAmount      = actualTransactions.Where(o => o.GameActionType == GameActionType.Won).Sum(o => o.Amount);
                var lostAmount     = actualTransactions.Where(o => o.GameActionType == GameActionType.Lost).Sum(o => o.Amount);
                var winningsAmount = wonAmount - lostAmount;

                var productForThatRule = _gameQueries.GetGameProviders().FirstOrDefault(x => x.Id == rule.ProductId);

                var productName = productForThatRule != null ? productForThatRule.Name : string.Empty;

                var metadataForRule = GenerateFullRuleDescriptionAndValue(
                    VerificationStep.HasWinnings,
                    ComparisonEnum.For,
                    rule.WinningRuleDescription(productName),
                    winningsAmount.ToString(CultureInfo.InvariantCulture));

                if (!IsRulePassed(rule.Comparison, rule.Amount, winningsAmount))
                {
                    OnRuleFinish(false, withdrawalId, VerificationStep.HasWinnings, metadataForRule);
                    break;
                }
                OnRuleFinish(true, withdrawalId, VerificationStep.HasWinnings, metadataForRule);
            }
        }