コード例 #1
0
        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));
            }
        }