public ActionResult Edit(int?id)
        {
            if (!id.HasValue)
            {
                return(RedirectToAction(nameof(MovieController.Index)));
            }

            var userId = User.Identity.GetUserId();

            var movie = MoviesHelper.GetMovieById(id.Value, userId);

            if (movie == null)
            {
                return(RedirectToAction(nameof(MovieController.Index)));
            }

            PopulateViewBag();

            var model = new RegisterEditMovieViewModel();

            model.Category    = movie.Category;
            model.Rating      = movie.Rating;
            model.MovieName   = movie.Name;
            model.Description = movie.Description;

            return(View(model));
        }
        private ActionResult SaveMovie(int?id, RegisterEditMovieViewModel formData)
        {
            if (!ModelState.IsValid)
            {
                PopulateViewBag();
                return(View());
            }

            var userId = User.Identity.GetUserId();

            if (MoviesHelper.CheckIfMovieAlreadyExists(id,
                                                       formData.MovieName,
                                                       userId))
            {
                ModelState.AddModelError(nameof(RegisterEditMovieViewModel.MovieName),
                                         "Movie name should be unique");

                PopulateViewBag();
                return(View());
            }

            string fileExtension;

            //Validating file upload
            if (formData.Media != null)
            {
                fileExtension = Path.GetExtension(formData.Media.FileName);

                if (!Constants.AllowedFileExtensions.Contains(fileExtension))
                {
                    ModelState.AddModelError("", "File extension is not allowed.");
                    PopulateViewBag();
                    return(View());
                }
            }

            Movie movie;

            if (!id.HasValue)
            {
                movie        = new Movie();
                movie.UserId = userId;
                DbContext.Movies.Add(movie);
            }
            else
            {
                movie = MoviesHelper.GetMovieById(id.Value, userId);

                if (movie == null)
                {
                    return(RedirectToAction(nameof(MovieController.Index)));
                }

                movie.DateUpdated = DateTime.Now;
            }

            movie.Name        = formData.MovieName;
            movie.Rating      = formData.Rating.Value;
            movie.Category    = formData.Category;
            movie.Description = formData.Description;

            //Handling file upload
            if (formData.Media != null)
            {
                if (!Directory.Exists(Constants.MappedUploadFolder))
                {
                    Directory.CreateDirectory(Constants.MappedUploadFolder);
                }

                var fileName         = formData.Media.FileName;
                var fullPathWithName = Constants.MappedUploadFolder + fileName;

                formData.Media.SaveAs(fullPathWithName);

                movie.MediaUrl = Constants.UploadFolder + fileName;
            }

            if (id.HasValue)
            {
                var originalValues = DbContext.Entry(movie).OriginalValues;
                var currentValues  = DbContext.Entry(movie).CurrentValues;

                foreach (var property in originalValues.PropertyNames)
                {
                    if (property == nameof(Movie.DateUpdated))
                    {
                        continue;
                    }

                    var originalValue = originalValues[property]?.ToString();
                    var currentValue  = currentValues[property]?.ToString();

                    if (originalValue != currentValue)
                    {
                        var history = new MovieHistory();
                        history.OldValue    = originalValue;
                        history.NewValue    = currentValue;
                        history.DateCreated = DateTime.Now;
                        history.Property    = property;
                        history.MovieId     = id.Value;

                        DbContext.MovieHistories.Add(history);
                    }
                }
            }

            DbContext.SaveChanges();

            return(RedirectToAction(nameof(MovieController.Index)));
        }
 public ActionResult Register(RegisterEditMovieViewModel formData)
 {
     return(SaveMovie(null, formData));
 }
 public ActionResult Edit(int id, RegisterEditMovieViewModel formData)
 {
     return(SaveMovie(id, formData));
 }