private async Task <List <HandlerServiceResult> > ConfigureOperationType(CategoryTypeEnum type, User user)
        {
            HandlerServiceResult nextQuestion;

            var categories = await _categoryDocumentService.GetByUserIdAsync(user.Id);

            categories = categories.Where(c => c.Configured && c.Type == type).ToList();

            if (categories.Count > 0)
            {
                var operation = new Operation
                {
                    Configured = false,
                    Id         = _operationDocumentService.GenerateNewId()
                };

                await _operationDocumentService.InsertAsync(operation);

                user.Context = new Context
                {
                    OperationId  = operation.Id,
                    CategoryType = type,
                    CurrentNode  = _tree
                };

                nextQuestion = await _questionService.BuildQuestion(user);
            }
            else
            {
                nextQuestion = _resultService.BuildOperationTypeCleanCategoryList();
            }

            await _userDocumentService.UpdateAsync(user);

            return(new List <HandlerServiceResult> {
                nextQuestion
            });
        }
        private async Task <List <HandlerServiceResult> > ConfigureStatsAction(string answer, User user)
        {
            answer = answer.Trim();

            if (string.IsNullOrEmpty(answer) ||
                !answer.Equals("All categories") &&
                !answer.Equals("Income only") &&
                !answer.Equals("Expense only") &&
                !answer.Equals("Custom category"))
            {
                return(new List <HandlerServiceResult>
                {
                    _resultService.BuildStatsWrongArgumentErrorResult()
                });
            }

            if (answer.Equals("All categories"))
            {
                user.Context = null;
                await _userDocumentService.UpdateAsync(user);

                return(await _statsService.BuildStatistics(user));
            }

            if (answer.Equals("Income only"))
            {
                var categories = await _categoryDocumentService.GetByUserIdAsync(user.Id);

                categories = categories.Where(c => c.Configured && c.Type == CategoryTypeEnum.Income).ToList();

                if (categories.Count == 0)
                {
                    return(new List <HandlerServiceResult>
                    {
                        _resultService.BuildOperationTypeCleanCategoryList()
                    });
                }

                user.Context = null;
                await _userDocumentService.UpdateAsync(user);

                return(await _statsService.BuildStatistics(user, CategoryTypeEnum.Income));
            }

            if (answer.Equals("Expense only"))
            {
                var categories = await _categoryDocumentService.GetByUserIdAsync(user.Id);

                categories = categories.Where(c => c.Configured && c.Type == CategoryTypeEnum.Expense).ToList();

                if (categories.Count == 0)
                {
                    return(new List <HandlerServiceResult>
                    {
                        _resultService.BuildOperationTypeCleanCategoryList()
                    });
                }

                user.Context = null;
                await _userDocumentService.UpdateAsync(user);

                return(await _statsService.BuildStatistics(user, CategoryTypeEnum.Expense));
            }

            user.Context.CurrentNode = user.Context.CurrentNode.Children.FirstOrDefault();

            await _userDocumentService.UpdateAsync(user);

            return(new List <HandlerServiceResult> {
                await _questionService.BuildQuestion(user)
            });
        }