public async Task<HttpResponseMessage> PostToGroupById(AddGroupPostBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return await this.BadRequest(this.ModelState).ExecuteAsync(new CancellationToken());
            }

            var group = this.Data.Groups.Find(model.groupId);

            if (group == null)
            {
                return await this.NotFound().ExecuteAsync(new CancellationToken());
            }

            var currentUserId = User.Identity.GetUserId();
            var currentUser = this.Data.Users.FirstOrDefault(x => x.Id == currentUserId);
            if (currentUser == null)
            {
                return await this.BadRequest("Invalid user token! Please login again!").ExecuteAsync(new CancellationToken());
            }

            if (!group.Members.Contains(currentUser) && group.Owner != currentUser)
            {
                return await this.BadRequest("Not allowed. User is not member of group.")
                    .ExecuteAsync(new CancellationToken());
            }

            var newPost = new GroupPost()
            {
                Content = model.postContent,
                Author = currentUser,
                PostedOn = DateTime.Now
            };

            group.Posts.Add(newPost);
            this.Data.SaveChanges();

            var dbPost = this.Data.GroupPosts.FirstOrDefault(p => p.Id == newPost.Id);
            var postReturnView = new
            {
                Id = dbPost.Id,
                AuthorId = dbPost.Author.Id,
                AuthorUsername = dbPost.Author.UserName,
                AuthorProfileImage = dbPost.Author.ProfilePicture,
                GroupId = group.Id,
                PostContent = dbPost.Content,
                Date = dbPost.PostedOn,
                LikesCount = 0,
                Liked = false,
                TotalCommentsCount = 0,
                Comments = new List<CommentViewModel>()
            };

            return await this.Ok(postReturnView).ExecuteAsync(new CancellationToken());
        }
 public static object CreateGroupPostPreview(ApplicationUser currentUser, GroupPost post)
 {
     return new
     {
         Id = post.Id,
         AuthorId = post.Author.Id,
         AuthorUsername = post.Author.UserName,
         AuthorProfileImage = post.Author.ProfilePicture,
         WallOwnerId = post.Owner.Id,
         PostContent = post.Content,
         Date = post.PostedOn,
         LikesCount = post.Likes.Count,
         Liked = post.Likes.Any(l => l.Author == currentUser),
         TotalCommentsCount = post.Comments.Count,
         Comments = post.Comments
             .OrderByDescending(c => c.PostedOn)
             .AsQueryable()
             .Select(c => CommentViewModel.CreatePreview(currentUser, c))
             .ToList()
     };
 }
        public static void PostToGroup(int fromUserId, int toGroupId, string content)
        {
            var context = new SocialNetworkContext();

            var sender = context.Users.Find(fromUserId);
            var recipient = context.Groups.Find(toGroupId);
            var post = new GroupPost()
            {
                Content = content,
                Author = sender,
                PostedOn = DateTime.Now,
            };
            recipient.Posts.Add(post);
            context.SaveChanges();
        }