Exemplo n.º 1
0
        public ActionResult <CalculatorValue> ResolveSwitch([FromBody] SwitchPayload payload)
        {
            if (payload == null)
            {
                return(BadRequest($"{nameof(ConditionPayload)} cannot be null."));
            }

            if (payload.ReferenceData == null || !payload.ReferenceData.Any())
            {
                return(BadRequest($"{nameof(payload.ReferenceData)} cannot be null or empty."));
            }

            if (_nullValidator.Validate(payload.ComparingValue))
            {
                return(BadRequest($"{nameof(payload.ComparingValue)} cannot be null."));
            }


            var switchData = GetSwitchData(payload);

            ISwitch <CalculatorValue> resolver = new Switch <int>(switchData, payload.DefaultValue);
            var result          = resolver.Evaluate(payload.ComparingValue);
            var operationResult = new Result <decimal>()
            {
                CorrelationId = payload.CorrelationId, Value = result
            };

            return(Ok(operationResult));
        }
Exemplo n.º 2
0
        private Dictionary <IOrderedCondition <int, CalculatorValue>, decimal> GetSwitchData(SwitchPayload payload)
        {
            var result = new Dictionary <IOrderedCondition <int, CalculatorValue>, decimal>();

            foreach (var item in payload.ReferenceData)
            {
                if (item.Conditions == null || !item.Conditions.Any())
                {
                    continue;
                }

                var conditions = item.Conditions
                                 .Where(condition => condition?.ReferenceValue != null)
                                 .Select(mConditionItem => new Condition(mConditionItem.ReferenceValue, mConditionItem.Operator))
                                 .Cast <ICondition <CalculatorValue> >();

                var multiCondition   = new MultiCondition(conditions, BooleanOperator.And);
                var orderedCondition = new OrderedCondition(multiCondition, item.Order);
                result.Add(orderedCondition, item.Value);
            }

            return(result);
        }