public static CalculateProbabilityInput FromCalculateProbabilityRequest(CalculateProbabilityRequest request)
 {
     return(new CalculateProbabilityInput {
         ProbabilityOfA = request.ProbabilityOfA,
         ProbabilityOfB = request.ProbabilityOfB,
     });
 }
        public ActionResult Calculate([FromQuery] CalculateProbabilityApiRequest request)
        {
            var calculationRequest = new CalculateProbabilityRequest
            {
                ProbabilityOfA  = request.ProbabilityOfA,
                ProbabilityOfB  = request.ProbabilityOfB,
                CalculationType = request.CalculationType
            };

            try
            {
                var result = probabilityCalculator.CalculateProbability(calculationRequest);

                return(Ok(new CalculateProbabilityApiResponse
                {
                    IsSuccess = true,
                    Probability = result
                }));
            }
            catch (InvalidCalculateProbabilityRequest exc)
            {
                // log WARN exc
                //return BadRequest(new { errors=exc.Errors });
                return(Ok(new CalculateProbabilityApiResponse
                {
                    IsSuccess = false,
                    Errors = exc.Errors
                }));
            }
            catch (Exception exc)
            {
                // log ERROR exc
                return(new StatusCodeResult(500));
            }
        }
Ejemplo n.º 3
0
        public decimal CalculateProbability(CalculateProbabilityRequest request)
        {
            ValidateRequest(request);

            var input = CalculateProbabilityInput.FromCalculateProbabilityRequest(request);
            var calculatedProbability = calculatorFactory.GetCalculator(request.CalculationType).Calculate(input);

            var executedCalculation = CreateExecutedCalculation(input, request.CalculationType, calculatedProbability);

            calculationsStorer.StoreCalculation(executedCalculation);

            return(calculatedProbability);
        }
Ejemplo n.º 4
0
        private void ValidateRequest(CalculateProbabilityRequest request)
        {
            var errors = new List <string>(3);

            if (request.ProbabilityOfA < 0 || request.ProbabilityOfA > 1)
            {
                errors.Add("Probability of A must be in the range 0-1");
            }

            if (request.ProbabilityOfB < 0 || request.ProbabilityOfB > 1)
            {
                errors.Add("Probability of B must be in the range 0-1");
            }

            if (!validProbabilityTypes.Contains(request.CalculationType))
            {
                errors.Add($@"Calculation type ""{request.CalculationType}"" is not valid");
            }

            if (errors.Count > 0)
            {
                throw new InvalidCalculateProbabilityRequest(errors.ToArray());
            }
        }