private async Task <int> GetForumNewMessages(Data.Forums.Forum forum, IEnumerable <LastForumView <TUser> > lastViewed) { var last = lastViewed.Where(l => l.Forum == forum).Select(f => f.LastView).SingleOrDefault(); var numberOfNewMessages = await session.Select <Thread <TUser> >().CountAll().From().Where(t => t.Forum == forum && t.CreationDate > last).ScalarAsync <int>(); numberOfNewMessages += await session.Select <CommentInThread <TUser> >().CountAll().From().LeftJoinOnId(x => x.Commentable).LeftJoinOnId(x => x.Comment).Where(x => x.Comment.CreationDate > last && x.Commentable.Forum == forum).ScalarAsync <int>(); return(numberOfNewMessages); }
public async Task <IHttpActionResult <ForumView> > Post([FromBody] ForumView value) { using (var transaction = session.BeginTransaction()) { var forum = new Data.Forums.Forum { Name = value.Name, ReadRole = value.ReadRole, WriteRole = value.WriteRole }; await session.SaveAsync(forum); transaction.Commit(); value = forumDataMapping.ToForumView(forum, 0); } return(Created("GetForum", value.Id, value)); }
public ForumView ToForumView(Data.Forums.Forum forum, int numberOfNewComments) { if (forum == null) { return(null); } return(new ForumView { Id = forum.Id, Name = forum.Name, NumberOfNewMessages = numberOfNewComments, ReadRole = forum.ReadRole, WriteRole = forum.WriteRole }); }