public async Task <Result <AddFigureResponseData> > Handle(AddFigureRequest request, CancellationToken cancellationToken)
        {
            if (String.IsNullOrWhiteSpace(request.FigureType) || request.FigureDescription == null)
            {
                return(Result <AddFigureResponseData> .MakeFailMessage("error figure"));
            }

            IFigureDescription description = request.FigureDescription;

            Result <Empty> result = _validator.Validate(description);

            if (result.Fail)
            {
                return(Result <AddFigureResponseData> .MakeFail(result.Errors));
            }

            long figureId = await _queryFactory.SaveFigure(new Figure
            {
                Description = JsonConvert.SerializeObject(request.FigureDescription),
                Type        = request.FigureType
            });

            var responseData = new AddFigureResponseData {
                FigureId = figureId
            };

            return(Result <AddFigureResponseData> .MakeSucces(responseData));
        }
Example #2
0
        internal virtual ProxyFigureProcessors GetProxyFigureProcessor(IFigureDescription description)
        {
            if (_typeMap.TryGetValue(description.GetType(), out ProxyFigureProcessors value))
            {
                return(value);
            }

            return(null);
        }
Example #3
0
        private static AddFigureRequest MakeRequest(string type, IFigureDescription typedDescription)
        {
            var request = new AddFigureRequest
            {
                FigureDescription = typedDescription,
                FigureType        = type
            };

            return(request);
        }
        public virtual Result <Empty> Validate(IFigureDescription request)
        {
            ProxyFigureProcessors processor = _storage.GetProxyFigureProcessor(request);

            if (processor == null)
            {
                return(Result <Empty> .MakeFailMessage("error figure"));
            }

            ValidationResult result = processor.Validate(request);

            if (result.IsValid)
            {
                return(Result <Empty> .MakeSucces(Empty.Instance));
            }

            return(Result <Empty> .MakeFail(result.ErrorsToListString()));
        }
Example #5
0
        public async Task BindModelAsync(ModelBindingContext bindingContext)
        {
            JObject jObject = await ParseJson(bindingContext.HttpContext);

            if (jObject == null || !jObject.ContainsKey("type"))//it should be processed in handler
            {
                bindingContext.Result = ModelBindingResult.Success(MakeRequest(null, null));
                return;
            }

            string type = jObject["type"].Value <string>();

            if (String.IsNullOrWhiteSpace(type))//it should be processed in handler
            {
                bindingContext.Result = ModelBindingResult.Success(MakeRequest(null, null));
                return;
            }

            Result <Type> descriptionTypeResult = _descriptionProvider.GetDescriptionType(type);

            if (descriptionTypeResult.Fail)//it should be processed in handler
            {
                bindingContext.Result = ModelBindingResult.Success(MakeRequest(type, null));
                return;
            }

            Type descriptionType = descriptionTypeResult.Data;

            if (!jObject.ContainsKey("description"))//it should be processed in handler
            {
                bindingContext.Result = ModelBindingResult.Success(MakeRequest(null, null));
                return;
            }

            string description = jObject["description"].ToString();

            IFigureDescription typedDescription = JsonConvert.DeserializeObject(description, descriptionType)
                                                  as IFigureDescription;

            AddFigureRequest request = MakeRequest(type, typedDescription);

            bindingContext.Result = ModelBindingResult.Success(request);
        }
Example #6
0
        public Result <double> Calculate(IFigureDescription request)
        {
            var processor = _storage.GetProxyFigureProcessor(request);

            if (processor == null)
            {
                return(Result <double> .MakeFailMessage("error figure"));
            }

            Result <Empty> validateResult = _validator.Validate(request);

            if (validateResult.Fail)
            {
                return(Result <double> .MakeFail(validateResult.Errors));
            }

            double result = processor.Calculate(request);

            return(Result <double> .MakeSucces(result));
        }