public async Task <MovieDetailsViewModel> GetMovieAndDetailsByIdAsync(string movieId, string userId = null) { var movieFromDb = await dbContext.Movies.FindAsync(movieId); var randomReview = new MovieReviewViewModel(); if (movieFromDb.Reviews.Count > 0) { Random rnd = new Random(); int reviewIndex = rnd.Next(0, movieFromDb.Reviews.Count()); var reviewFromDb = movieFromDb.Reviews.ToList()[reviewIndex]; randomReview.Movie = reviewFromDb.Movie.Name; randomReview.User = reviewFromDb.User.UserName; randomReview.Content = reviewFromDb.Content; randomReview.Rating = reviewFromDb.Rating; randomReview.Date = reviewFromDb.Date; } var movieDetailsViewModel = mapper.Map <Movie, MovieDetailsViewModel>(movieFromDb); movieDetailsViewModel.RandomReview = randomReview; movieDetailsViewModel.Cast = mapper.Map <List <MovieRole>, List <MovieCastViewModel> >(movieFromDb.Cast.ToList()); movieDetailsViewModel.IsReviewedByCurrentUser = await reviewService.ReviewExistsAsync(userId, movieFromDb.Id); return(movieDetailsViewModel); }
public async Task <IActionResult> DeleteFeedback([FromBody] MovieReviewViewModel review) { var hasSeen = _context.Watchhistory.Where(r => r.CustomerMailAddress == User.Identity.Name).FirstOrDefault(r => r.MovieId == review.MovieId); if (!ModelState.IsValid && hasSeen == null) { return(BadRequest(ModelState)); } var newReview = Mapper.Map <MovieReview>(review); newReview.CustomerMailAddress = User.Identity.Name; try { _repository.DeleteMovieReview(newReview); if (await _repository.SaveChangesAsync()) { return(Json($"/api/movies/{review.MovieId}/feedback")); } } catch (Exception e) { return(BadRequest(e.Message)); } return(BadRequest("Failed to save changes to the database")); }
public async Task <IActionResult> UpdateFeedback([FromBody] MovieReviewViewModel review) { var hasSeen = _context.Watchhistory.Where(r => r.CustomerMailAddress == User.Identity.Name).FirstOrDefault(r => r.MovieId == review.MovieId); if (!ModelState.IsValid && hasSeen == null) { return(BadRequest(ModelState)); } if (review.Review.Length < 10 || review.Review.Length > 500) { return(BadRequest("The length of your review is too long or too short (min 10 & max 500 characters")); } if (review.Rating < 1 || review.Rating > 10) { return(BadRequest("Rating must be between 1 and 10")); } var newReview = Mapper.Map <MovieReview>(review); newReview.CustomerMailAddress = User.Identity.Name; try{ _repository.UpdateMovieReview(newReview); if (await _repository.SaveChangesAsync()) { return(Json($"/api/movies/{review.MovieId}/feedback")); } } catch (Exception e) { return(BadRequest(e.Message)); } return(BadRequest("Failed to save changes to the database")); }
// GET: Movies/Details/5 public async Task <IActionResult> Details(int?id) { if (id == null) { return(NotFound()); } var movie = await _context.Movie .FirstOrDefaultAsync(m => m.ID == id); if (movie == null) { return(NotFound()); } IQueryable <Review> reviewQuery = from m in _context.Review select m; var reviews = reviewQuery; reviews = reviews.Where(s => s.MovieID == id); var MRVM = new MovieReviewViewModel(); MRVM.movie = movie; MRVM.reviews = reviews; return(View(MRVM)); }