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