public CalculationResult ProcessCalculation(string expression) { //1. run the evaluation var processingResult = calculatorProcessor.Calculate(expression); //2. parse the error if failed IEnumerable <int> failingIndex = null; if (processingResult.HasError) { failingIndex = ParseErrorForForFailingIndexes(processingResult.Error); } //3. construct response var calculationResult = new CalculationResult { Result = processingResult.Result, IsSuccessfull = !processingResult.HasError, CalculationError = processingResult.HasError ? new CalculationError { ErrorText = processingResult.Error, Indexes = failingIndex } : null }; var expressionCalculation = new ExpressionCalculation { DateGenerated = DateTime.Now, Expression = expression, CalculationResult = calculationResult }; //4. store in history calculationDataProvider.Save(expressionCalculation); return(calculationResult); }
public void Save(ExpressionCalculation expressionCalculation) { dataProvider.Save(expressionCalculation); }