public IActionResult select(int?themeId)
        {
            if (themeId == null)
            {
                var themes = db.themes.OrderBy(t => t.creationTime).Take(10);
                foreach (var t in themes)
                {
                    terminalResultBuilder.AddJSFuncInline("addTextToConsole", t.name + ", id: " + t.id.ToString());
                }
                var result = terminalResultBuilder.Build();
                return(Json(result));
            }

            if (db.themes.Any(t => t.id == themeId))
            {
                var          themeModel = db.themes.First(t => t.id == themeId);
                List <Theme> themeList  = HttpContext.Session.Get <List <Theme> >("themes");
                if (themeList == null)
                {
                    themeList = new List <Theme> {
                        themeModel
                    };
                }
                else if (themeList.Contains(themeModel))
                {
                    return(null);
                }
                else
                {
                    themeList.Add(themeModel);
                }
                HttpContext.Session.Set <List <Theme> >("themes", themeList);
                var messages = (from m in db.messages
                                join t in db.themes on m.themeId equals t.id
                                join u in db.users on m.userSenderId equals u.id
                                where themeList.Select(t => t.id).Contains(t.id)
                                orderby m.time
                                select new { userSender = u.login, m.id, m.themeId, m.time, m.text }).ToArray(); //later
                var session = HttpContext.Session.SessionInfo();
                session.Add("messages", JsonSerializer.Serialize(messages));
                terminalResultBuilder.AddJSFuncModel("updateChats", session);
                return(Json(terminalResultBuilder.Build()));
            }
            else
            {
                HttpContext.Session.SetInt32("currentThemeId", -1);
                terminalResultBuilder.AddJSFuncInline("addTextToConsole", "theme not found");
                return(Json(terminalResultBuilder.Build()));
            }
        }
        public async Task <IActionResult> Registration(UserRegistrationVM registrationVM)
        {
            if (db.users.Any(u => u.login == registrationVM.login))
            {
                ModelState.AddModelError(nameof(registrationVM.login), "This login is already in use");
            }

            if (registrationVM.email != null && db.users.Any(u => u.email == registrationVM.email))
            {
                ModelState.AddModelError(nameof(registrationVM.email), "This email is already in use");
            }

            if (registrationVM.password != registrationVM.confirmPassword)
            {
                ModelState.AddModelError(nameof(registrationVM.password), "Passwords are not same");
            }

            if (ModelState.IsValid)
            {
                UserModel user = registrationVM.GetDbModel();
                db.users.Add(user);
                db.SaveChanges();
                await Authenticate(user.login);

                HttpContext.Session.SetString("login", user.login);
                var session = HttpContext.Session.SessionInfo();
                resultBuilder.AddJSFuncModel("updateUserInfo", session);
                resultBuilder.AddJSFuncInline("reloadHubConnection");
                return(Json(resultBuilder.Build()));
            }
            else
            {
                resultBuilder.AddAspView(this, "Registration", registrationVM);
                return(Json(resultBuilder.Build()));
            }
        }