public IActionResult Put(int id, [FromBody] NewsViewModel news) { try { var username = HttpContext.User.GetUsername(); var isAdmin = HttpContext.User.IsAdmin(); var contextEntity = _intranetApiContext.News .Include(n => n.User) .SingleOrDefault(n => n.Id == id); if (contextEntity == null) { news.Id = id; return(NotFound(news)); } if (contextEntity.UserId?.Equals(username) != true && !isAdmin) { return(Forbid()); } // If the news changes to Published for the first time, set creation date if (!contextEntity.HasEverBeenPublished && news.Published) { contextEntity.Created = _dateTimeFactory.DateTimeOffsetUtc; } else if (news.Published) { contextEntity.Updated = _dateTimeFactory.DateTimeOffsetUtc; } contextEntity.Title = news.Title; contextEntity.Text = news.Text; contextEntity.Published = news.Published; if (contextEntity.HeaderImage != null) { contextEntity.HeaderImage.FileName = news.HeaderImage?.FileName; } NewsKeywordHelper.SetKeywords(news.Keywords, contextEntity, _intranetApiContext); _intranetApiContext.SaveChanges(); var newsViewModel = new NewsViewModel(contextEntity); return(Ok(newsViewModel)); } catch (Exception) { return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public IActionResult Post([FromBody] NewsViewModel news) { try { var username = HttpContext.User.GetUsername(); var displayName = HttpContext.User.GetDisplayName(); if (_intranetApiContext.Users.Find(username) == null) { var user = new User { Username = username, DisplayName = displayName, }; _intranetApiContext.Users.Add(user); } var newNews = new News { Title = news.Title, Text = news.Text, UserId = username, Published = news.Published, }; if (!String.IsNullOrWhiteSpace(news.HeaderImage?.FileName)) { newNews.HeaderImage = new Image { FileName = news.HeaderImage.FileName }; } newNews.Created = _dateTimeFactory.DateTimeOffsetUtc; NewsKeywordHelper.SetKeywords(news.Keywords, newNews, _intranetApiContext); _intranetApiContext.News.Add(newNews); _intranetApiContext.SaveChanges(); var newsViewModel = new NewsViewModel(newNews); return(Ok(newsViewModel)); } catch (Exception) { return(StatusCode(StatusCodes.Status500InternalServerError)); } }