public async Task <Result <CalcAreaResponseData> > Handle(CalcAreaRequest request, CancellationToken cancellationToken) { Figure dbFigure = await _queryFactory.RetrieveFigure(request.FigureId); if (dbFigure == null) { return(Result <CalcAreaResponseData> .MakeFailMessage("figure not found")); } Result <Type> descType = _descriptionProvider.GetDescriptionType(dbFigure.Type); if (descType.Fail) { return(Result <CalcAreaResponseData> .MakeFailMessage("figure not found")); } if (!(JsonConvert.DeserializeObject(dbFigure.Description, descType.Data) is IFigureDescription description)) { return(Result <CalcAreaResponseData> .MakeFailMessage("figure not found")); } Result <double> result = _figureCalculator.Calculate(description); if (result.Success) { return(Result <CalcAreaResponseData> .MakeSucces(new CalcAreaResponseData { Area = result.Data })); } else { return(Result <CalcAreaResponseData> .MakeFail(result.Errors)); } }