public async Task <object> CalculateZscore([FromBody] CalculateZscoreCommand zscoreCommand)
        {
            var zscoreResult = await _mediator.Send(zscoreCommand, HttpContext.RequestAborted);

            if (zscoreResult.IsValid)
            {
                return(Ok(zscoreResult.Value));
            }

            return(BadRequest(zscoreResult));
        }
        public Task <Result <ZscoreCalculationResult> > Handle(CalculateZscoreCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var zscoreCalculationResult = new ZscoreCalculationResult();

                var zScoreCalculationResultType = typeof(ZscoreCalculationResult);

                foreach (var scoreType in _activeZscoreTypes)
                {
                    var zscoreCalculator = _zscoreCalculators.SingleOrDefault(x => x.IsValidScoreType(scoreType));
                    if (zscoreCalculator == null)
                    {
                        continue;
                    }

                    var lmsParameter = _zscoreLmsParametersFetcher.GetLmsParameter(scoreType,
                                                                                   new SprocSearchParams
                    {
                        DateOfBirth = request.DateOfBirth,
                        Sex         = request.Sex,
                        Height      = (int)request.Height
                    });

                    if (lmsParameter == null)
                    {
                        continue;
                    }

                    var zscore = zscoreCalculator.CalculateZscore(new ZScoreCalculationInfo
                    {
                        Height       = request.Height,
                        LmsParameter = lmsParameter,
                        Weight       = request.Weight,
                        ZscoreType   = scoreType
                    });

                    zScoreCalculationResultType.GetProperty(scoreType.ToString()).SetValue(zscoreCalculationResult, Math.Round(zscore, 2));
                }

                return(Task.FromResult(Result <ZscoreCalculationResult> .Valid(zscoreCalculationResult)));
            }
            catch (Exception ex)
            {
                Log.Error(ex, "An error occured while calculating zscore");
                return(Task.FromResult(Result <ZscoreCalculationResult> .Invalid(ex.Message)));
            }
        }