private async Task <List <HandlerServiceResult> > ConfigureOperationSum(string answer, User user) { answer = answer.Trim(); if (string.IsNullOrEmpty(answer) || !decimal.TryParse(answer, out decimal sum)) { return(new List <HandlerServiceResult> { _resultService.BuildOperationInvalidSumErrorResult() }); } var result = new List <HandlerServiceResult>(); var operation = await GetOrCreateOperationAsync(user); var category = await _categoryDocumentService.GetByIdAsync(operation.CategoryId); var sumInCents = (long)(sum * 100); if (category.Type == CategoryTypeEnum.Expense) { category.ExpenseInCents += sumInCents; category.ExpenseForThisMonthInCents += sumInCents; if (category.ExpenseForThisMonthInCents > category.SupposedToSpentThisMonthInCents) { result.Add(_resultService.BuildOperationExceededAmountForThisMonth( (float)(category.ExpenseForThisMonthInCents - category.SupposedToSpentThisMonthInCents) / 100)); } } else { category.IncomeForThisMonthInCents += sumInCents; category.IncomeInCents += sumInCents; } operation.CreditAmountInCents = sumInCents; await _operationDocumentService.UpdateAsync(operation); await _categoryDocumentService.UpdateAsync(category); user.Context.CurrentNode = user.Context.CurrentNode.Children.FirstOrDefault(); var nextQuestion = await _questionService.BuildQuestion(user); await _userDocumentService.UpdateAsync(user); result.Add(nextQuestion); return(result); }