private async Task <List <HandlerServiceResult> > ConfigureCategoryCreating(string answer, User user)
        {
            answer = answer.Trim();

            if (string.IsNullOrEmpty(answer) || !answer.Contains("Yes") && !answer.Contains("No"))
            {
                return(new List <HandlerServiceResult>
                {
                    _resultService.BuildYouShouldTypeOnlyYesOrNoErrorResult()
                });
            }

            if (answer.Equals("Yes"))
            {
                var category = new Category
                {
                    Id         = _categoryDocumentService.GenerateNewId(),
                    UserId     = user.Id,
                    Configured = false
                };

                await _categoryDocumentService.InsertAsync(category);

                user.Context.CurrentNode = user.Context.CurrentNode.Children[0].Children[2];
                user.Context.CategoryId  = category.Id;

                await _userDocumentService.UpdateAsync(user);

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

            return(new List <HandlerServiceResult>
            {
                _resultService.BuildCategoryActionsResult()
            });
        }
        public async Task <List <HandlerServiceResult> > Handle(Message message)
        {
            var user = await _userDocumentService.GetByChatId(message.UserInfo.ChatId);

            if (user == null)
            {
                user = new User
                {
                    Id        = _userDocumentService.GenerateNewId(),
                    ChatId    = message.UserInfo.ChatId,
                    FirstName = message.UserInfo.FirstName,
                    LastName  = message.UserInfo.LastName
                };

                var chat = new Chat
                {
                    Id             = _chatDocumentService.GenerateNewId(),
                    TelegramCharId = message.ChatInfo.Id,
                    Type           = message.ChatInfo.Type,
                    UserName       = message.ChatInfo.UserName
                };

                var defaultIncomeCategory = new Category
                {
                    Id                              = _categoryDocumentService.GenerateNewId(),
                    UserId                          = user.Id,
                    Name                            = "Default Income Category",
                    ExpenseInCents                  = 0,
                    ExpenseForThisMonthInCents      = 0,
                    SupposedToSpentThisMonthInCents = 0,
                    Type                            = CategoryTypeEnum.Income,
                    Configured                      = true,
                    Currency                        = "BYN"
                };

                var defaultExpenseCategory = new Category
                {
                    Id                              = _categoryDocumentService.GenerateNewId(),
                    UserId                          = user.Id,
                    Name                            = "Default Expense Category",
                    ExpenseInCents                  = 0,
                    ExpenseForThisMonthInCents      = 0,
                    SupposedToSpentThisMonthInCents = 0,
                    Type                            = CategoryTypeEnum.Expense,
                    Configured                      = true,
                    Currency                        = "BYN"
                };

                var userStatus = new UserStatus
                {
                    Id = _userStatusDocumentService.GenerateNewId(),
                    IsActiveLastThirtyDays = true,
                    UpdatedAt = DateTime.UtcNow,
                    UserId    = user.Id
                };


                await _userStatusDocumentService.InsertAsync(userStatus);

                await _chatDocumentService.InsertAsync(chat);

                await _userDocumentService.InsertAsync(user);

                await _categoryDocumentService.InsertAsync(defaultExpenseCategory);

                await _categoryDocumentService.InsertAsync(defaultIncomeCategory);
            }

            return(new List <HandlerServiceResult>
            {
                new HandlerServiceResult
                {
                    Message = HelpText,
                    StatusCode = StatusCodeEnum.Ok
                }
            });
        }