public ArticleFullModel GetById(int id) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = this.contextFactory.Create() as NewsContext; var article = context.Articles .Include(art => art.Author) .Include(art => art.Image) .Include(art => art.Comments) .Include(art => art.Tags) .FirstOrDefault(art => art.Id == id); if (article == null) { throw new InvalidOperationException("Article doesn't exist"); } article.ReadCount++; context.Articles.Attach(article); context.SaveChanges(); var model = new ArticleFullModel() { Id = article.Id, Title = article.Title, Content = article.Content, DatePublished = article.DatePublished, Author = article.Author.DisplayName, ImageUrl = article.Image.ThumbUrl, Category = new CategoryModel { Id = article.Category.Id, Name = article.Category.Name, }, ReadCount = article.ReadCount, Tags = (from tag in article.Tags select tag.Name), Comments = (from comment in article.Comments select new CommentModel() { CommentedBy = comment.User.DisplayName, Content = comment.Content, DatePosted = comment.DatePosted }) }; return(model); }); return(responseMsg); }
private void ValidateArticleModel(ArticleFullModel model) { if (model == null) { throw new InvalidOperationException("Invalid article!"); } if (model.Content == null) { throw new ArgumentNullException("Cannot create article with empty content!"); } if (model.Title == null) { throw new ArgumentNullException("Cannot create article without title!"); } if (model.Category == null) { throw new InvalidOperationException("Cannot create article without category"); } }
public HttpResponseMessage PutArticle(ArticleFullModel model, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = this.contextFactory.Create() as NewsContext; using (context) { this.ValidateSessionKey(sessionKey); this.ValidateArticleModel(model); var article = context.Articles.FirstOrDefault(art => art.Id == model.Id); if (article == null) { throw new InvalidOperationException("Article doesn't exist"); } var user = context.Users.FirstOrDefault(usr => usr.SessionKey == sessionKey); var category = context.Categories.FirstOrDefault(cat => cat.Id == model.Category.Id); article.Title = model.Title; article.Content = model.Content; article.DatePublished = DateTime.Now; article.Author = user; article.Category = category; foreach (var tagString in model.Tags) { var tagEntity = context.Tags.FirstOrDefault(tag => tag.Name == tagString.ToLower()); if (tagEntity == null) { tagEntity = new Tag(); tagEntity.Name = tagString.ToLower(); context.Tags.Add(tagEntity); context.SaveChanges(); } if (!article.Tags.Contains(tagEntity)) { article.Tags.Add(tagEntity); } } string[] titleTags = model.Title.Split(new char[] { ' ', '.', ',', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); foreach (var tagString in titleTags) { var tagEntity = context.Tags.FirstOrDefault(tag => tag.Name == tagString.ToLower()); if (tagEntity == null) { tagEntity = new Tag(); tagEntity.Name = tagString.ToLower(); context.Tags.Add(tagEntity); context.SaveChanges(); } if (!article.Tags.Contains(tagEntity)) { article.Tags.Add(tagEntity); } } //context.Articles.Add(article); context.SaveChanges(); ArticleModel createdModel = new ArticleModel() { Id = article.Id, Title = article.Title, ContentPreview = article.Content.Length > 197 ? article.Content.Substring(0, 197) + "..." : article.Content, DatePublished = article.DatePublished, Author = article.Author.DisplayName, Category = new CategoryModel { Id = category.Id, Name = category.Name, }, ThumbUrl = article.Image.ThumbUrl, ReadCount = article.ReadCount, }; var response = this.Request.CreateResponse(HttpStatusCode.OK, createdModel); return(response); } }); return(responseMsg); }