public async Task <IActionResult> Edit(int id, [Bind("Id,Subject,Rating,Content,ReviewableId")] ItemReviewViewModel reviewModel) { ApplicationUser currentUser = await _userManager.FindByNameAsync(User.Identity.Name); if (currentUser == null) { throw new Exception("Current user not found."); } Review review = new Review { ReviewId = reviewModel.Id, Subject = reviewModel.Subject, Rating = reviewModel.Rating, Content = reviewModel.Content, ReviewableId = reviewModel.ReviewableId }; // current user is author review.Author = currentUser; review.AuthorId = currentUser.Id; if (id != reviewModel.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Reviews.Update(review); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ReviewExists(review.ReviewId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } //ViewData["AuthorId"] = new SelectList(_context.Users, "Id", "Id", review.AuthorId); ViewData["ReviewableId"] = (IEnumerable <SelectListItem>)BuildReviewablesDropDownList(); return(View(await BuildItemReviewViewModelAsync(review))); }
// GET: Reviews/Delete/5 public async Task <IActionResult> Delete(int?id) { if (id == null) { return(NotFound()); } var review = await _context.Reviews .Include(r => r.Author) .Include(r => r.Reviewable) .SingleOrDefaultAsync(m => m.ReviewId == id); if (review == null) { return(NotFound()); } ItemReviewViewModel reviewModel = await BuildItemReviewViewModelAsync(review); return(View(reviewModel)); }
private async Task <ICollection <ItemReviewViewModel> > BuildItemReviewViewModelListAsync(IEnumerable <Review> itemReviews) { IList <ItemReviewViewModel> itemReviewsViewModelList = new List <ItemReviewViewModel>(); // generate a dictionary with song and album ids and names // this will serve as a lookup var albumLookup = await _context.Albums.ToDictionaryAsync(a => a.Id, a => a.Name); var songLookup = await _context.Songs.ToDictionaryAsync(s => s.Id, s => s.Name); foreach (Review review in itemReviews) { int reviewableId = review.ReviewableId; ItemReviewViewModel reviewViewModel; if (review.Reviewable is Song) { Song song = review.Reviewable as Song; string reviewableName = $"Song \"{songLookup[reviewableId]}\""; if (song.Album != null) { reviewableName += $" in \"{song.Album.Name}\""; } if (song.Artist != null) { reviewableName += $" by {song.Artist.UserName}"; } reviewViewModel = new ItemReviewViewModel() { Id = review.ReviewId, Subject = review.Subject, Rating = review.Rating, Content = review.Content, AuthorId = review.AuthorId, AuthorUserName = review.Author.UserName, ReviewableIsAlbum = false, ReviewableId = reviewableId, ReviewableName = reviewableName }; } else { Album album = review.Reviewable as Album; string reviewableName = $"Album \"{albumLookup[reviewableId]}\""; if (album.Artist != null) { reviewableName += $" by {album.Artist.UserName}"; } reviewViewModel = new ItemReviewViewModel() { Id = review.ReviewId, Subject = review.Subject, Rating = review.Rating, Content = review.Content, AuthorId = review.AuthorId, AuthorUserName = review.Author.UserName, ReviewableIsAlbum = true, ReviewableId = reviewableId, ReviewableName = reviewableName }; } itemReviewsViewModelList.Add(reviewViewModel); } return(itemReviewsViewModelList); }