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