// ToDo: More additional parameters which can be passed to the constructor of Thread/Post class
        public async Task <VBThread> CreateThreadAsync(VBUser author, string authorIpAddress, int forumId, string title, string text)
        {
            // We check the forum first so that no thread is created when Forum id doesn't exist
            var forum = db.Forums.Find(forumId);

            if (forum == null)
            {
                throw new Exception($"No forum with id #{forumId.ToString()} exists!");
            }

            var post = new VBPost(author, title, text, authorIpAddress);

            db.Posts.Add(post);
            await db.SaveChangesAsync();

            var thread = new VBThread(post.AuthorId.Value, post.AuthorName, post.Id, post.Id, forumId, post.AuthorId.Value, post.AuthorName, DateTime.Now, DateTime.Now, title);

            db.Threads.Add(thread);
            await db.SaveChangesAsync();

            post.ThreadId = thread.Id;
            await db.SaveChangesAsync();

            forum.LastPostId      = post.Id;
            forum.LastThreadId    = thread.Id;
            forum.LastThreadTitle = thread.Title;
            forum.PostCount++;
            forum.ThreadsCount++;
            forum.LastPostDate = DateTime.UtcNow;
            await db.SaveChangesAsync();

            await userManager.IncrementPostCounterAsync(author.Id, post.Id, post.CreatedTime);

            return(thread);
        }
Exemple #2
0
        static void WarmUpManagers(VBThreadManager threadManager, VBSessionManager sessionManager, VBSettingsManager settingsManager, VBForumManager forumManager, VBUserManager userManager, VBThread thread, VBUser user, VBSession session)
        {
            var managerThread = threadManager.GetThreadAsync(thread.Id, writeable: true).Result;
            var replys        = threadManager.GetReplysAsync(thread.Id, start: 0, count: 1).Result;
            var settings      = settingsManager.GetCommonSettings();

            if (session != null)
            {
                // Do not update last activity since we're not in a http context => No request path avaliable
                var managerSession = sessionManager.GetAsync(session.SessionHash, updateLastActivity: false).Result;
            }

            if (user != null)
            {
                var forum = forumManager.GetCategoriesWhereUserCanAsync(user.UserGroup).Result;
                var randomUserFromManager = userManager.GetUserAsync(user.Id).Result;
            }
        }