public TeamDetailModel RemovePost(TeamDetailModel teamModel, PostDetailModel postModel)
        {
            using (var dbContext = _dbContextFactory.CreateTeamChatDbContext())
            {
                var teamEntity = dbContext.Teams
                                 .Include(p => p.Posts)?
                                 .ThenInclude(c => c.Comments)
                                 .ThenInclude(a => a.Author)
                                 .Include(m => m.Members)
                                 .ThenInclude(u => u.User)
                                 .First(t => t.Id == teamModel.Id);


                var postEntity = dbContext.Posts
                                 .Include(a => a.Author)
                                 .Include(c => c.Comments)
                                 .ThenInclude(a => a.Author)
                                 .First(p => p.Id == postModel.Id);

                teamEntity.Posts.Remove(postEntity);
                dbContext.SaveChanges();

                return(TeamMapper.MapToDetailModel(teamEntity));
            }
        }
Exemple #2
0
        private void AddNewPost()
        {
            try
            {
                var team = _teamRepository.GetById(SelectedTeam.Id);
            }
            catch
            {
                Title   = "";
                Content = "";
                return;
            }

            var newPost = new PostDetailModel();

            newPost.Title   = Title;
            newPost.Content = Content;
            var returnedPost = _postRepository.Create(newPost, CurrentUser);

            _teamRepository.AddPost(SelectedTeam, returnedPost);

            Title   = "";
            Content = "";

            _mediator.Send(new PostsUpdatedMessage {
                post = returnedPost
            });
        }
Exemple #3
0
        public void UpdateCommentContent_Test()
        {
            //Arrange
            var postDetailModel = new PostDetailModel()
            {
                Title = "NewTitle",
            };
            var commentModelOld = new CommentDetailModel()
            {
                CreationTime = new DateTime(),
                Content      = "OldContent"
            };
            var userDetailModel = new UserDetailModel()
            {
                Name     = "NewUser",
                Email    = "*****@*****.**",
                Password = "******"
            };

            //Act
            var returnedUserModel          = _userRepository.Create(userDetailModel);
            var returnedPostDetailModel    = _postRepository.Create(postDetailModel, returnedUserModel);
            var returnedCommentDetailModel = _commentRepository.Create(commentModelOld, returnedUserModel, returnedPostDetailModel);

            returnedPostDetailModel = _postRepository.AddComment(returnedPostDetailModel, returnedCommentDetailModel);
            var returnedUpdatedComment = _commentRepository.UpdateContent(returnedCommentDetailModel, "NewContent");

            //Assert
            Assert.Equal("NewContent", returnedUpdatedComment.Content);

            //Teardown
            _commentRepository.Delete(returnedCommentDetailModel);
            _postRepository.Delete(returnedPostDetailModel);
            _userRepository.Delete(returnedUserModel);
        }
Exemple #4
0
 private void SearchInPost(PostDetailModel post, HashSet <PostDetailModel> postWithSearchedText)
 {
     if (post.Title.Contains(SearchText) || post.Content.Contains(SearchText))
     {
         postWithSearchedText.Add(post);
     }
 }
Exemple #5
0
        public void InsertAndRemoveTest()
        {
            var post = new PostDetailModel()
            {
                Title     = "First post",
                Comments  = new List <CommentDetailModel>(),
                Author    = new UserDetailModel(),
                Timestamp = new DateTime(),
                Content   = "Tak toto budem testovat"
            };

            var insertedPost = _posRepository.Insert(post);

            Assert.NotNull(insertedPost);
            Assert.Equal(post.Title, insertedPost.Title);
            Assert.Equal(post.Timestamp, insertedPost.Timestamp);
            Assert.Equal(post.Content, insertedPost.Content);

            var getById = _posRepository.GetById(insertedPost.Id);

            Assert.NotNull(getById);
            Assert.Equal(post.Title, getById.Title);
            Assert.Equal(post.Timestamp, getById.Timestamp);
            Assert.Equal(post.Content, getById.Content);

            _posRepository.Remove(insertedPost.Id);
            getById = _posRepository.GetById(insertedPost.Id);
            Assert.Null(getById);
        }
 private void DeleteComments(PostDetailModel post)
 {
     foreach (var comment in post.Comments)
     {
         _postRepository.RemoveComment(post, comment);
         _commentRepository.Delete(comment);
     }
 }
 public void Delete(PostDetailModel detailModel)
 {
     using (var dbContext = _dbContextFactory.CreateTeamChatDbContext())
     {
         RemovePostFromUserActivity(detailModel.Id, dbContext);
         dbContext.Remove(dbContext.Find(typeof(Post), detailModel.Id));
         dbContext.SaveChanges();
     }
 }
        public async Task <IActionResult> Detail([FromRoute] string cat, [FromRoute] string slug)
        {
            try
            {
                if (string.IsNullOrEmpty(cat))
                {
                    return(NotFound());
                }

                if (string.IsNullOrEmpty(slug))
                {
                    return(NotFound());
                }

                var post = await _blogService.GetPostAsync(slug.ToLowerInvariant());

                if (post == null)
                {
                    return(NotFound());
                }

                if (post.Category.Slug.ToLowerInvariant() != cat.ToLowerInvariant())
                {
                    return(NotFound());
                }

                var popularPosts = await _blogService.GetPopularPostsAsync();

                var relatedPosts = await _blogService.GetRelatedPostsAsync(new Data.RelatedPostFindRequest
                {
                    PostId        = post.Id,
                    CategoryId    = post.CategoryId,
                    CreatedUserId = post.CreatedUserId,
                    Top           = 2
                });

                var categories = await _categoryService.GetAllCategoriesAsync();

                var model = new PostDetailModel
                {
                    Entity       = post,
                    RelatedPosts = relatedPosts
                };
                model.RightBar.Categories      = categories;
                model.RightBar.Popular         = popularPosts;
                model.RightBar.CurrentCategory = post.Category;

                SetTitle(post.Title, post.GetUrl(), $"https://{Request.Host}{post.PhotoUrl}");

                return(View($"{Common.WebSetting.ThemeId}/Detail", model));
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "BlogController > Detail");
                return(NotFound());
            }
        }
Exemple #9
0
 public static PostListModel DetailToListModel(PostDetailModel postModel)
 {
     return(new PostListModel
     {
         Id = postModel.Id,
         Author = postModel.Author,
         Content = postModel.Content,
         CreationTime = postModel.CreationTime,
         Title = postModel.Title
     });
 }
Exemple #10
0
        public PostDetailModel Create(PostDetailModel post, Guid teamId)
        {
            using (var dbContext = _dbContextFactory.CreateDbContext())
            {
                var entity = _mapper.MapPostToEntity(post);
                dbContext.Entry(entity).State = EntityState.Unchanged;
                dbContext.Posts.Add(entity);
                dbContext.SaveChanges();

                return(_mapper.MapPostDetailModelFromEntity(entity));
            }
        }
Exemple #11
0
 public static Post MapDetailModelToEntity(PostDetailModel postDetailModel)
 {
     return(new Post
     {
         Id = postDetailModel.Id,
         Title = postDetailModel.Title,
         Author = UserMapper.MapListModelToEntity(postDetailModel.Author),
         Content = postDetailModel.Content,
         CreationTime = postDetailModel.CreationTime,
         Comments = postDetailModel.Comments.Select(CommentMapper.MapToEntity).ToList()
     });
 }
Exemple #12
0
        public void Add_Remove_Post_TeamModel_Test()
        {
            var teamOne = new TeamDetailModel
            {
                Name = "ICS Team",
            };

            var user = new UserDetailModel
            {
                Name     = "Brisk",
                Email    = "*****@*****.**",
                Password = "******",
            };


            var postOne = new PostDetailModel
            {
                Title   = "Post v tymu",
                Content = "Jeste neni konec",
            };

            var postTwo = new PostDetailModel
            {
                Title   = "Post v tymu",
                Content = "Uz je konec",
            };

            var userModel    = _userRepository.Create(user);
            var postOneModel = _postRepository.Create(postOne, userModel);
            var postTwoModel = _postRepository.Create(postTwo, userModel);

            var teamModel = _teamRepository.Create(teamOne);


            Assert.NotNull(teamModel);
            Assert.Equal(teamOne.Name, teamModel.Name);

            teamModel = _teamRepository.AddPost(teamModel, postOneModel);

            Assert.Single(teamModel.Posts);

            teamModel = _teamRepository.AddPost(teamModel, postTwoModel);

            Assert.Equal(2, teamModel.Posts.Count);

            teamModel = _teamRepository.RemovePost(teamModel, postOneModel);

            Assert.Single(teamModel.Posts);

            //Teardown
            _userRepository.Delete(userModel.Id);
            _teamRepository.Delete(teamModel.Id);
        }
Exemple #13
0
 public Post MapPostToEntity(PostDetailModel post)
 {
     return(new Post
     {
         Id = post.Id,
         Title = post.Title,
         Text = post.Text,
         PostAdditionTime = post.PostAdditionTime,
         User = MapUserToEntity(post.User),
         Team = MapTeamToEntity(post.Team)
     });
 }
Exemple #14
0
        public void GetUserLastPostTest()
        {
            var userRepository = new UserRepository(new InMemoryDbContextFactory());
            var author         = new UserDetailModel();

            var dbAuthor = userRepository.Insert(author);

            var postFirst = new PostDetailModel()
            {
                Title     = "First post",
                Comments  = new List <CommentDetailModel>(),
                Author    = author,
                Timestamp = new DateTime(2019, 4, 4),
                Content   = "Tak toto budem testovat"
            };

            var postSecond = new PostDetailModel()
            {
                Title     = "Second post",
                Comments  = new List <CommentDetailModel>(),
                Author    = author,
                Timestamp = new DateTime(2019, 4, 5),
                Content   = "A toto taky budem testovat"
            };


            var postLast = new PostDetailModel()
            {
                Title     = "Last post",
                Comments  = new List <CommentDetailModel>(),
                Author    = author,
                Timestamp = new DateTime(2019, 4, 6),
                Content   = "Toto uz nebudem testovat"
            };

            var postFirstDb  = _posRepository.Insert(postFirst);
            var postSecondDb = _posRepository.Insert(postSecond);
            var postDetail   = _posRepository.Insert(postLast);

            var postsDatabase = _posRepository.GetUserLastPosts(author.Id, 2);

            Assert.Equal(2, postsDatabase.Count());
            Assert.Equal(postSecond.Title, postsDatabase.Last().Title);
            Assert.Equal(postSecond.Content, postsDatabase.Last().Content);
            Assert.Equal(postLast.Title, postsDatabase.First().Title);
            Assert.Equal(postLast.Content, postsDatabase.First().Content);

            _posRepository.Remove(postFirstDb.Id);
            _posRepository.Remove(postSecondDb.Id);
            _posRepository.Remove(postDetail.Id);
        }
 public PostDetailModel UpdateContent(PostDetailModel postModel, string content)
 {
     using (var dbContext = _dbContextFactory.CreateTeamChatDbContext())
     {
         var postEntity = dbContext.Posts
                          .Include(a => a.Author)
                          .Include(c => c.Comments)
                          .ThenInclude(c => c.Author)
                          .First(p => p.Id == postModel.Id);
         postEntity.Content = content;
         dbContext.Posts.Update(postEntity);
         dbContext.SaveChanges();
         return(PostMapper.MapToDetailModel(postEntity));
     }
 }
Exemple #16
0
        public IEnumerable <CommentDetailModel> GetAllCommentsInPost(Guid postId)
        {
            PostDetailModel PostModel   = GetPostById(postId);
            var             entityPost  = _mapper.MapPostToEntity(PostModel);
            var             foundEntity = _dbContextFactory.CreateDbContext()
                                          .Comments
                                          .Include(u => u.User)
                                          .Include(p => p.Post)
                                          .Include(u => u.Post.Team)
                                          .Include(u => u.Post.User)
                                          .Where(p => p.Post == entityPost)
                                          .Select(c => _mapper.MapCommentDetailModelFromEntity(c));

            return(foundEntity);
        }
        protected virtual void PreparePostDetailModel(PostDetailModel model, Post entity)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            var labels = _postLabelService.GetPostLabelsByPostId(entity.Id);

            model.ContentLabels = labels.Select(l =>
            {
                var label      = _labelService.GetContentLabelById(l.LabelId);
                var labelModel = label.MapTo <ContentLabelModel>();
                return(labelModel);
            }).ToList();
        }
        public async Task <IActionResult> Detail(long postId)
        {
            ListContentPostDTO post;
            ListUserDTO        user;
            string             postCache = await RedisHelper.GetAsync($"postDetail_{postId}");

            string userCache = await RedisHelper.GetAsync($"user_{postId}");

            if (!string.IsNullOrEmpty(postCache) && !string.IsNullOrEmpty(userCache))
            {
                post = JsonConvert.DeserializeObject <ListContentPostDTO>(postCache);
                user = JsonConvert.DeserializeObject <ListUserDTO>(userCache);
            }
            else
            {
                post = await PostSvc.GetByIdAsync(postId);

                user = await UserSvc.GetByIdAsync(post.UserId);

                if (post == null)
                {
                    return(Json(new AjaxResult {
                        Status = "redirect", Data = "/Error/Error404"
                    }));
                }
                if (user == null)
                {
                    return(Json(new AjaxResult {
                        Status = "error", Data = UserSvc.ErrorMsg
                    }));
                }
                await RedisHelper.SetAsync($"postDetail_{postId}", post);

                await RedisHelper.SetAsync($"user_{postId}", user);
            }
            long count = await RedisHelper.IncrByAsync("post_" + postId);

            PostDetailModel model = new PostDetailModel();

            model.Post      = post;
            model.User      = user;
            model.LookCount = count;

            return(Json(new AjaxResult {
                Status = "ok", Data = model
            }));
        }
        public PostEntity MapToPostEntity(PostDetailModel model)
        {
            if (model == null)
            {
                return(null);
            }

            return(new PostEntity()
            {
                Id = model.Id,
                Author = _mappers.UserMapper.MapToUserEntity(model.Author),
                Comments = model.Comments.AsEnumerable().Select(_mappers.CommentMapper.MapToCommentEntity).ToList(),
                Title = model.Title,
                Timestamp = model.Timestamp,
                Content = model.Content,
            });
        }
Exemple #20
0
        public void Get_ReturnsAViewResult_WithAListOfPosts()
        {
            //Arrage
            var mockService = new Mock <IDataService>();

            mockService.Setup(x => x.GetPostDetail(It.IsAny <int>())).Returns(new PostExtended
            {
                PostId   = 1,
                Title    = "Testing Post Controller using Moq",
                Score    = 60,
                PostBody = "First time using Unit Test with Moq to test the controller!",
                Answers  = new List <string> {
                    "Well, hope this works...", "Ohlala it works"
                },
                UserName = "******"
            });
            var mockUrlHelper = new Mock <IUrlHelper>();

            mockUrlHelper.Setup(x => x.Link(It.IsAny <string>(), It.IsAny <object>()))
            //Using Func + Reflection, because the id was created as an Anonymous Type in ModelFactory.
            .Returns((string urlString, object idObject) =>
            {
                Type typeOfIdObject = idObject.GetType();
                int valueOfIdObject =
                    (int)typeOfIdObject.GetProperty("id").GetValue(idObject, null);
                return("http://localhost/api/posts/" + valueOfIdObject);
            });

            var controller = new PostController(mockService.Object);

            controller.Url = mockUrlHelper.Object;

            //Action
            IActionResult   actionResult      = controller.Get(1);
            OkObjectResult  okObjectResult    = actionResult as OkObjectResult;
            PostDetailModel asPostDetailModel = (PostDetailModel)okObjectResult.Value;

            //Assert
            Assert.Equal("http://localhost/api/posts/1", asPostDetailModel.Url);
            Assert.Equal("Testing Post Controller using Moq", asPostDetailModel.Title);
            Assert.Equal(60, asPostDetailModel.Score);
            Assert.Equal("First time using Unit Test with Moq to test the controller!", asPostDetailModel.PostBody);
            Assert.Equal("Well, hope this works...", asPostDetailModel.Answers[0]);
            Assert.Equal("Ohlala it works", asPostDetailModel.Answers[1]);
            Assert.Equal("Group 7 RAWDATA", asPostDetailModel.UserName);
        }
Exemple #21
0
        public void GetAllByTeamId_PostModelTest()
        {
            var postOneModel = new PostDetailModel
            {
                Title = "Test Post"
            };
            var postTwoModel = new PostDetailModel
            {
                Title = "Test Post 2"
            };

            var teamModel = new TeamDetailModel
            {
                Name = "Test Team",
            };

            var authorModel = new UserDetailModel
            {
                Name     = "Test Author",
                Password = "******"
            };

            teamModel    = _teamRepository.Create(teamModel);
            authorModel  = _userRepository.Create(authorModel);
            postOneModel = _postRepository.Create(postOneModel, authorModel);
            postTwoModel = _postRepository.Create(postTwoModel, authorModel);

            teamModel = _teamRepository.AddPost(teamModel, postOneModel);
            teamModel = _teamRepository.AddPost(teamModel, postTwoModel);

            var posts = _postRepository.GetAllByTeamId(teamModel.Id);

            Assert.NotNull(posts);
            Assert.NotEmpty(posts);
            Assert.Equal(2, posts.Count());
            foreach (var post in posts)
            {
                _console.WriteLine(post.Title);
            }

            //Teardown
            _postRepository.Delete(postOneModel.Id);
            _postRepository.Delete(postTwoModel.Id);
            _userRepository.Delete(authorModel.Id);
            _teamRepository.Delete(teamModel.Id);
        }
Exemple #22
0
        public static PostDetailModel MapToDetailModel(Post post)
        {
            var detailModel = new PostDetailModel
            {
                Id           = post.Id,
                Title        = post.Title,
                Author       = UserMapper.MapToListModel(post.Author),
                Content      = post.Content,
                CreationTime = post.CreationTime,
            };

            foreach (var comment in post.Comments)
            {
                detailModel.Comments.Add(CommentMapper.MapToDetailModel(comment));
            }
            return(detailModel);
        }
        public PostDetailModel Get(string sessionKey, int id)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
            {
                VerifySessionKey(sessionKey);

                IRepository <Post> postRepository = this.data.GetPostsRepository();

                Post post = postRepository.Get(id);

                PostDetailModel postModel = ModelFunctions.GetSinglePostDetails(post);

                return(postModel);
            });

            return(responseMsg);
        }
Exemple #24
0
        public void SearchInPostsTest()
        {
            var author = new UserDetailModel();

            var dbAuthor = _userRepository.Insert(author);

            var post = new PostDetailModel()
            {
                Title     = "First post",
                Comments  = new List <CommentDetailModel>(),
                Author    = dbAuthor,
                Timestamp = new DateTime(),
                Content   = "Tak toto budem testovat"
            };

            var insertedPost      = _posRepository.Insert(post);
            var postsSearchedList = _search.SearchInPosts(_posRepository.GetPostDetailModels(), "Toto");

            var dbPost = _posRepository.GetById(insertedPost.Id);

            Assert.NotEmpty(postsSearchedList);
            Assert.Single(postsSearchedList);

            var updatedPost = new PostDetailModel()
            {
                Id        = insertedPost.Id,
                Title     = "Updated post",
                Comments  = new List <CommentDetailModel>(),
                Author    = dbAuthor,
                Timestamp = new DateTime(),
                Content   = "Nic a nikto"
            };

            _posRepository.Update(updatedPost);

            postsSearchedList = _search.SearchInPosts(_posRepository.GetPostDetailModels(), "a nikto");
            Assert.NotEmpty(postsSearchedList);
            Assert.Single(postsSearchedList);

            postsSearchedList = _search.SearchInPosts(_posRepository.GetPostDetailModels(), "Tu uz nenajdem");
            Assert.Empty(postsSearchedList);
            _posRepository.Remove(insertedPost.Id);
        }
        public PostDetailModel Create(PostDetailModel postModel, UserDetailModel authorModel)
        {
            using (var dbContext = _dbContextFactory.CreateTeamChatDbContext())
            {
                postModel.CreationTime = DateTime.Now;
                postModel.Author       = UserMapper.DetailToListModel(authorModel);
                var postEntity = PostMapper.MapDetailModelToEntity(postModel);
                postEntity.Author = UserMapper.MapToEntity(authorModel);

                var userEntity = dbContext.Users
                                 .First(u => u.Id == authorModel.Id);

                userEntity.Activities.Add(postEntity);
                dbContext.Users.Update(userEntity);
                dbContext.Posts.Update(postEntity);
                dbContext.SaveChanges();
                return(PostMapper.MapToDetailModel(postEntity));
            }
        }
Exemple #26
0
        public void GetAllByPostId_CommentModel_Test()
        {
            //Arrange
            var postDetailModel = new PostDetailModel()
            {
                Title    = "NewTitle",
                Comments = new List <CommentDetailModel>(5)
            };
            var date          = new DateTime();
            var postListModel = new PostListModel()
            {
                Title = "NewTitle"
            };
            var commentModel = new CommentDetailModel()
            {
                CreationTime = date,
                BelongsTo    = postListModel,
            };
            var userDetailModel = new UserDetailModel()
            {
                Name     = "NewUser",
                Email    = "*****@*****.**",
                Password = "******"
            };

            //Act
            var returnedUserModel          = _userRepository.Create(userDetailModel);
            var returnedPostDetailModel    = _postRepository.Create(postDetailModel, returnedUserModel);
            var returnedCommentDetailModel = _commentRepository.Create(commentModel, returnedUserModel, returnedPostDetailModel);

            returnedPostDetailModel = _postRepository.AddComment(returnedPostDetailModel, returnedCommentDetailModel);
            var returnedGetAllByPostId = _commentRepository.GetAllByPostId(returnedPostDetailModel.Id);

            //Assert
            Assert.NotNull(returnedGetAllByPostId);

            //Teardown

            _commentRepository.Delete(returnedCommentDetailModel);
            _postRepository.Delete(returnedPostDetailModel);
            _userRepository.Delete(returnedUserModel);
        }
Exemple #27
0
        public void AddCommentBasic_PostModel_Test()
        {
            var userModel = new UserDetailModel
            {
                Name     = "Dan",
                Email    = "*****@*****.**",
                Password = "******",
            };
            var userTwoModel = new UserDetailModel
            {
                Name     = "Tester",
                Email    = "",
                Password = "",
            };
            var postModel = new PostDetailModel
            {
                Title = "Funguje to",
            };
            var commentModel = new CommentDetailModel
            {
                Content = "aha"
            };

            userModel    = _userRepository.Create(userModel);
            userTwoModel = _userRepository.Create(userTwoModel);
            postModel    = _postRepository.Create(postModel, userModel);
            commentModel = _commentRepository.Create(commentModel, userTwoModel, postModel);

            Assert.Empty(postModel.Comments);

            postModel = _postRepository.AddComment(postModel, commentModel);

            Assert.NotEmpty(postModel.Comments);
            Assert.Single(postModel.Comments);

            postModel = _postRepository.RemoveComment(postModel, commentModel);

            Assert.Empty(postModel.Comments);

            //Teardown
            _postRepository.Delete(postModel.Id);
        }
        public ActionResult Detail(string catURL, string postUrl)
        {
            PostDetailModel postDetai = new PostDetailModel();
            var             post      = _PostServices.GetPost(catURL, postUrl);

            //chi tiết
            postDetai.Post = post.Convert(withFullDesc: true, withUser: true, withTag: true);

            // liên quan tác giả
            var postAuhor = _PostServices.GetPostAuthor(post.Id, post.CreateUser.Email);

            postDetai.PostAuthor = postAuhor.Convert(withUser: true);

            // bài viết liên quan
            var postRelated = _PostServices.GetListPost(3, categoryId: postDetai.Post.Category.Id, PostID: postDetai.Post.Id);

            postDetai.PostRelated = postRelated.Convert(catURL: catURL);

            return(View(postDetai));
        }
Exemple #29
0
        public static PostDetailModel ToDetailViewModel(this PostInfo postInfo)
        {
            var model = new PostDetailModel();

            if (postInfo == null)
            {
                return(model);
            }

            model.Id          = postInfo.Id;
            model.Subject     = postInfo.Subject;
            model.Body        = postInfo.Body;
            model.AuthorId    = postInfo.AuthorId;
            model.AuthorName  = string.IsNullOrEmpty(postInfo.AuthorName) ? postInfo.AuthorId : postInfo.AuthorName;
            model.CreatedOn   = postInfo.CreatedOn.ToString("MM-dd HH:mm");
            model.ReplyCount  = postInfo.ReplyCount;
            model.SectionId   = postInfo.SectionId;
            model.SectionName = postInfo.SectionName;
            if (postInfo.ReplyList != null)
            {
                var replyList = new List <ReplyModel>();
                foreach (var reply in postInfo.ReplyList)
                {
                    var replyModel = new ReplyModel
                    {
                        Id         = reply.Id,
                        Body       = reply.Body,
                        AuthorId   = reply.AuthorId,
                        AuthorName = reply.AuthorName,
                        CreatedOn  = reply.CreatedOn.ToString("MM-dd HH:mm"),
                        Floor      = reply.Floor
                    };
                    replyList.Add(replyModel);
                }
                model.Replies = replyList;
            }

            return(model);
        }
        public PostDetailModel RemoveComment(PostDetailModel postModel, CommentDetailModel commentModel)
        {
            using (var dbContext = _dbContextFactory.CreateTeamChatDbContext())
            {
                var postEntity = dbContext.Posts
                                 .Include(c => c.Comments)
                                 .ThenInclude(a => a.Author)
                                 .Include(a => a.Author)
                                 .First(p => p.Id == postModel.Id);

                var commentEntity = dbContext.Comments
                                    .Include(a => a.Author)
                                    .First(c => c.Id == commentModel.Id);

                postEntity.Comments.Remove(commentEntity);
                commentEntity.BelongsTo = null;
                dbContext.Posts.Update(postEntity);
                dbContext.SaveChanges();

                return(PostMapper.MapToDetailModel(postEntity));
            }
        }
        public async Task<IHttpActionResult> Post(CreatePostModel postModel)
        {
            try
            {
                var user = _userRepository.GetById(postModel.UserId);

                var post = Discussions.Entities.Post.CreatePost(postModel.Content, user);

                var discussion = _discussionRepository.Get(postModel.DiscussionId);

                discussion.AddPost(post);

                _context.DiscussionRepository.Add(discussion);
                _context.Entry(discussion).State = EntityState.Modified;
                
                //_context.Entry(discussion.Posts[0].PostedBy).State = EntityState.Unchanged;
                _context.Save();

                PostDetailModel pdm = new PostDetailModel 
                { 
                    Id = post.Id,
                    PostedBy = user.Username,
                    Posted = post.PostedOn.ToShortDateString(),
                    Post = post.Content,
                    Votes = 0
                };

               // return Ok(post);
                return Ok(pdm);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }