[ValidateAntiForgeryToken] // Prevents XSRF/CSRF attacks
        public async Task <IActionResult> Create(PostMovieModel postMovieModel)
        {
            try
            {
                AuthorizeHelper.Authorize(this.HttpContext, "Editor", this.GetType().Name, "Create", "movie");


                if (ModelState.IsValid)
                {
                    GetMovieModel getMovieModel = await _moviemindAPIService.PostModel <PostMovieModel, GetMovieModel>(postMovieModel, "Movies");

                    //put in new relationships
                    foreach (Guid actorId in postMovieModel.ActorIds)
                    {
                        await _moviemindAPIService.PostModel <PostActorMovieModel, GetActorMovieModel>(new PostActorMovieModel
                        {
                            ActorId = actorId,
                            MovieId = getMovieModel.Id
                        }, "ActorMovies");
                    }

                    return(Redirect("/Movies/Details/" + getMovieModel.Id.ToString()));
                }

                return(View(postMovieModel));
            }
            catch (MovieMindException e)
            {
                return(ErrorHelper.HandleError(e, this.View(postMovieModel)));
            }
        }
        public async Task <ActionResult <GetMovieModel> > PostMovie(PostMovieModel postMovieModel)
        {
            try
            {
                GetMovieModel movie = await _movieRepository.PostMovie(postMovieModel);

                return(CreatedAtAction(nameof(GetMovie), new { id = movie.Id }, movie));
            }
            catch (DatabaseException e)
            {
                return(BadRequest(e.MovieMindError));
            }
        }
        public async Task <GetMovieModel> PostMovie(PostMovieModel postMovieModel)
        {
            Director director = await _context.Directors.FirstOrDefaultAsync(x => x.Id == postMovieModel.DirectorId);

            if (director == null)
            {
                throw new EntityException("Director not found", this.GetType().Name, "PostMovie", "404");
            }

            Genre genre = await _context.Genres.FirstOrDefaultAsync(x => x.Id == postMovieModel.GenreId);

            if (genre == null)
            {
                throw new EntityException("Genre not found", this.GetType().Name, "PostMovie", "404");
            }

            try
            {
                EntityEntry <Movie> result = await _context.Movies.AddAsync(new Movie
                {
                    Name          = postMovieModel.Name,
                    Year          = postMovieModel.Year,
                    OverallRating = postMovieModel.OverallRating,
                    Duration      = postMovieModel.Duration,
                    Description   = postMovieModel.Description,
                    DirectorId    = postMovieModel.DirectorId,
                    Director      = director,
                    GenreId       = postMovieModel.GenreId,
                    Genre         = genre
                });

                await _context.SaveChangesAsync();

                return(await GetMovie(result.Entity.Id.ToString()));
            }
            catch (MovieMindException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new DatabaseException(e.InnerException.Message, this.GetType().Name, "PostMovie", "400");
            }
        }