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)); }
internal virtual ProxyFigureProcessors GetProxyFigureProcessor(IFigureDescription description) { if (_typeMap.TryGetValue(description.GetType(), out ProxyFigureProcessors value)) { return(value); } return(null); }
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())); }
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); }
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)); }