public static NewsArticle ToNewsArticleEntity(
            NewsArticleModel newsArticleModel,
            DbUsersRepository usersRepository,
            IRepository<Comment> commentsRepository,
            IRepository<NewsArticle> newsArticlesRepository)
        {
            NewsArticle newsArticleEntity = new NewsArticle()
                {
                    ID = newsArticleModel.ID,
                    Author = usersRepository.GetByNickname(newsArticleModel.Author),
                    Content = newsArticleModel.Content,
                    Date = newsArticleModel.Date,
                    ImageUrl = newsArticleModel.ImageUrl,
                    Rating = newsArticleModel.Rating,
                    Title = newsArticleModel.Title
                };

            foreach (CommentModel comment in newsArticleModel.Comments)
            {
                newsArticleEntity.Comments.Add(
                    Extensions.CreateOrLoadComment(
                        comment, 
                        commentsRepository, 
                        usersRepository,
                        newsArticlesRepository));
            }

            return newsArticleEntity;
        }
        public HttpResponseMessage EditNewsArticle(string sessionKey, int id, NewsArticleModel newsArticle)
        {
            User user = null;
            try
            {
                user = this.usersRepository.GetBySessionKey(sessionKey);
            }
            catch (Exception)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid user!");
            }

            if (id != newsArticle.ID)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }

            NewsArticle updatedNewsArticle = null;
            try
            {
                updatedNewsArticle =
                    NewsArticlesMapper.ToNewsArticleEntity(newsArticle, usersRepository, commentsRepository);
            }
            catch (Exception)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid news article model provided!");
            }

            this.newsArticlesRepository.Update(id, updatedNewsArticle);

            return Request.CreateResponse(HttpStatusCode.OK);
        }
        public static NewsArticleModel ToNewsArticleModel(NewsArticle newsArticle)
        {
            NewsArticleModel newsArticleModel = new NewsArticleModel()
                {
                    ID = newsArticle.ID,
                    Title = newsArticle.Title,
                    Content = newsArticle.Content,
                    Rating = newsArticle.Rating,
                    ImageUrl = newsArticle.ImageUrl,
                    Date = newsArticle.Date,
                    Author = newsArticle.Author.Nickname
                };

            foreach (Comment comment in newsArticle.Comments)
            {
                newsArticleModel.Comments.Add(CommentsMapper.ToCommentModel(comment));
            }

            return newsArticleModel;
        }
        public HttpResponseMessage PostNewsArticle(string sessionKey, NewsArticleModel newsArticle)
        {
            User user = null;
            try
            {
                user = this.usersRepository.GetBySessionKey(sessionKey);
            }
            catch (Exception)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid user!");
            }

            newsArticle.Author = user.Nickname;

            NewsArticle newsArticleEntity = null;
            try
            {
                newsArticleEntity = NewsArticlesMapper
                    .ToNewsArticleEntity(newsArticle, usersRepository, commentsRepository, newsArticlesRepository);
            }
            catch (Exception)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid news article model provided!");
            }

            newsArticle.ID = newsArticleEntity.ID;

            if (HttpContext.Current.Request.Files.Count != 0)
            {
                string imageUrl = this.GetImageUrl(HttpContext.Current.Request.Files[0]);
                newsArticleEntity.ImageUrl = imageUrl;
                newsArticle.ImageUrl = imageUrl;
            }

            this.newsArticlesRepository.Add(newsArticleEntity);

            PubNubSender.Send(newsArticle.Title);

            return Request.CreateResponse(HttpStatusCode.Created, newsArticle);
        }
        private static void AddImages(NewsArticleModel newsArticle, NewsArticle newsArticleEntity)
        {
            foreach (string imageUrl in newsArticle.ImagesUrls)
            {
                Entry uploadFileEntry = DropboxUtilities.UploadImage(imageUrl, dropbox, "New_Folder");
                DropboxLink imageLink = dropbox.GetShareableLinkAsync(uploadFileEntry.Path).Result;

                newsArticleEntity.ImagesUrls.Add(imageLink.Url);
            }
        }