public MovieBindingModel AddMovie(MovieBindingModel model)
        {
            //check null premiere date
            var duplicateMovie = DbContext.Movies
                                 .FirstOrDefault(m => m.Title == model.Title && m.PremiereDate == model.PremiereDate);

            if (duplicateMovie != null)
            {
                model.SetError("Movie already exists");
                return(model);
            }

            var movie = Mapper.Map <Movie>(model);

            try
            {
                DbContext.Movies.Add(movie);
                DbContext.SaveChanges();

                AddGenresOfMovie(model.SelectedGenresIds, movie.Id);
                AddActorsInMovie(model.SelectedActorIds, movie.Id);
                AddDirectorsOfMovie(model.SelectedDirectorIds, movie.Id);
                AddProducersOfMovie(model.SelectedProducerIds, movie.Id);
                AddWritersOfMovie(model.SelectedScriptWriterIds, movie.Id);
            }
            catch (Exception e)
            {
                model.SetError("Database error");
                return(model);
            }

            Mapper.Map(movie, model);
            return(model);
        }
示例#2
0
        public IActionResult Add(MovieBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(this.View());
            }

            var director = db.Directors.FirstOrDefault(a => a.Name == model.DirectorName);

            if (director == null)
            {
                director = new Director {
                    Name = model.DirectorName
                };
                db.Directors.Add(director);
                db.SaveChanges();
            }

            var movie = new Movie()
            {
                Title         = model.Title,
                DirectorId    = director.Id,
                CoverImageUrl = model.CoverImageUrl,
                Description   = model.Description
            };

            db.Movies.Add(movie);
            db.SaveChanges();

            return(this.RedirectToAction("Details", new { id = movie.Id }));
        }
示例#3
0
        public async Task <ServiceResult> Update(Movie movie, MovieBindingModel model)
        {
            var result = new ServiceResult();

            try
            {
                Mapper.Map(model, movie);

                model.CategoriesString.Split(", ")
                .ToList()
                .Select(catStr => this.db.Categories.FirstOrDefault(c => c.Name == catStr))
                .ToList()
                .ForEach(cat => movie.Categories.Add(new MovieCategory {
                    Category = cat, CategoryId = cat.Id, Movie = movie, MovieId = movie.Id
                }));

                await this.db.SaveChangesAsync();

                result.Succeeded = true;
            }
            catch (DbUpdateException sx)
            {
                result.Error     = sx.Message;
                result.Succeeded = false;
            }

            return(result);
        }
        public async Task <IActionResult> Edit(MovieBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // Небольшой гвард, вдруг в запросе сохранение редактирования придёт неправильный ID.
            var entity = await _movieRepository.GetMovieAsync(model.Id);

            if (entity == null)
            {
                ModelState.AddModelError("", $"Фильм c ID={model.Id} не найден.");
                return(View(model));
            }

            // Если редактирование фильма запрашивает не его создатель, то редиректим на страницу 403.
            if (model.CreatedBy != User.Identity.Name)
            {
                return(Forbid());
            }

            var movie = _mapper.Map <Movie>(model);

            if (model.Image != null)
            {
                // Если пользователь хочет сменить постер фильма, то сохраняем новое изображение в папке 'user-images'.
                string extension = Path.GetExtension(model.Image.FileName);
                movie.Poster = await _imageRepository.SaveImageAsync(model.Image.OpenReadStream(), extension);
            }
            else
            {
                // Иначе оставляем прежний постер.
                movie.Poster = model.Poster;
            }

            // Сохранить ссылку на прежний постер фильма.
            string oldPoster = entity.Poster;

            // Обновить данные фильма в репозитории.
            _movieRepository.SaveMovie(movie);

            // Только после того, как данные фильма были успешно обновлены и если постер был обновлён, то удалить
            // старый постер.
            if (model.Image != null)
            {
                _imageRepository.DeleteImage(Path.GetFileName(oldPoster));
            }

            TempData.Add("Message", "Данные фильма успешно обновлены.");
            var updatedModel = _mapper.Map <MovieBindingModel>(movie);

            return(View(updatedModel));
        }
        public IActionResult Add(MovieBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(View());
            }

            var   director = CreateOrUpdateDirector(model);
            Movie movie    = CreateMovie(model, director);

            return(RedirectToAction("Details", new { id = movie.Id }));
        }
示例#6
0
        public IActionResult Add()
        {
            var allGenres = this.genreService.GetAllGenres();
            var allPeople = this.personService.GetAllPeople();

            var model = new MovieBindingModel
            {
                AllGenres = allGenres,
                AllPeople = allPeople
            };

            return(View(model));
        }
        private Movie CreateMovie(MovieBindingModel model, Director director)
        {
            var movie = new Movie()
            {
                Title       = model.Title,
                Description = model.Description,
                PosterImage = model.ImageUrl,
                DirectorId  = director.Id
            };

            this.context.Movies.Add(movie);
            this.context.SaveChanges();
            return(movie);
        }
示例#8
0
        public async Task <IActionResult> Create([FromBody] MovieBindingModel model)
        {
            if (ModelState.IsValid)
            {
                var result = await this._movieService.Create(model);

                if (result.Succeeded)
                {
                    return(CreatedAtRoute("GetMovie", model));
                }
            }

            return(BadRequest());
        }
        public IHttpActionResult PostMyMovie(MovieBindingModel movie)
        {
            if (!ModelState.IsValid)
            {
                throw new Exception();
            }

            var username = this.User.Identity.Name;
            var user     = usersService.GetByName(username);

            this.myMovieService.Add(user, movie.MovieId, movie.State);

            //api/movies/{id}
            return(this.Created("api/movies/" + movie.MovieId, movie));
        }
        public MovieBindingModel DeleteMovie(int id)
        {
            var model = new MovieBindingModel();
            var movie = DbContext.Movies.Find(id);

            if (movie == null)
            {
                model.SetError("No such movie in database");
                return(model);
            }

            DbContext.Movies.Remove(movie);
            DbContext.SaveChanges();

            Mapper.Map(movie, model);
            return(model);
        }
        private Director CreateOrUpdateDirector(MovieBindingModel model)
        {
            var director = this.context.Directors
                           .FirstOrDefault(a => a.Name == model.Director);

            if (director == null)
            {
                director = new Director()
                {
                    Name = model.Director
                };

                this.context.Directors.Add(director);
                this.context.SaveChanges();
            }

            return(director);
        }
        public IActionResult Add(MovieBindingModel movieBindingModel)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            Director director = null;

            bool directorExists = this.context.Directors.Any(d => d.Name == movieBindingModel.Director);

            if (directorExists)
            {
                director = this.context.Directors.FirstOrDefault(d => d.Name == movieBindingModel.Director);
            }
            else
            {
                director = new Director()
                {
                    Name   = movieBindingModel.Director,
                    Movies = new List <Movie>()
                };

                this.context.Directors.Add(director);
                this.context.SaveChanges();
            }

            Movie movie = new Movie()
            {
                Title       = movieBindingModel.Title,
                CoverImage  = movieBindingModel.ImageUrl,
                Description = movieBindingModel.Description,
                Director    = director,
                Borrowers   = new List <BorrowersMovies>(),
                Status      = "At home",
                DirectorId  = director.Id
            };

            this.context.Movies.Add(movie);
            director.Movies.Add(movie);
            this.context.SaveChanges();

            return(RedirectToAction("Details", new { id = movie.Id }));
        }
示例#13
0
        public IActionResult Edit(MovieBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(this.View(model));
            }

            var result = this.movieService.EditMovie(model);

            this.LogResult(model);

            if (result.HasError)
            {
                SetMessage(MessageType.Danger, result.Message);
                return(this.View(result));
            }

            SetMessage(MessageType.Success, $"{model.Title} edited successfully");
            return(this.RedirectToAction("All"));
        }
示例#14
0
        public async Task <IActionResult> Update(string id, [FromBody] MovieBindingModel model)
        {
            if (ModelState.IsValid)
            {
                var movie = this._movieService.GetMovieById(id);

                if (movie == null)
                {
                    return(NotFound());
                }

                var result = await this._movieService.Update(movie, model);

                if (result.Succeeded)
                {
                    return(Ok());
                }
            }

            return(BadRequest());
        }
        public MovieBindingModel GetMovieById(int id)
        {
            var model = new MovieBindingModel();

            var movieDb = DbContext.Movies
                          .Include(m => m.Genres)
                          .Include(m => m.Actors)
                          .Include(m => m.Directors)
                          .Include(m => m.Producers)
                          .Include(m => m.ScriptWriters)
                          .FirstOrDefault(m => m.Id == id);

            if (movieDb == null)
            {
                model.SetError("No such movie in database");
                return(model);
            }

            model = Mapper.Map <MovieBindingModel>(movieDb);
            return(model);
        }
        public async Task <IActionResult> Add(MovieBindingModel model)
        {
            // Необходимых встроенных атрибутов валидации 'IFormFile' нет, по-хорошему надо бы написать кастомный,
            // но ограничимся ручной проверкой.
            if (model.Image == null)
            {
                ModelState.AddModelError("Image", "Необходимо добавить постер фильма.");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var    movie     = _mapper.Map <Movie>(model);
            string extension = Path.GetExtension(model.Image.FileName);

            movie.Poster = await _imageRepository.SaveImageAsync(model.Image.OpenReadStream(), extension);

            _movieRepository.SaveMovie(movie);
            TempData.Add("Message", "Фильм успешно добавлен в каталог.");
            return(View(EmptyModel()));
        }
示例#17
0
        public async Task <ServiceResult> Create(MovieBindingModel model)
        {
            var result = new ServiceResult();

            var movie = new Movie();

            Mapper.Map(model, movie);

            try
            {
                await this.db.Movies.AddAsync(movie);

                await this.db.SaveChangesAsync();

                result.Succeeded = true;
            }
            catch (DbUpdateException ex)
            {
                result.Succeeded = false;
                result.Error     = ex.Message;
            }

            return(result);
        }
        public MovieBindingModel EditMovie(MovieBindingModel model)
        {
            var movieDb = DbContext.Movies
                          .Include(m => m.Genres)
                          .Include(m => m.Actors)
                          .Include(m => m.Directors)
                          .Include(m => m.Producers)
                          .Include(m => m.ScriptWriters)
                          .FirstOrDefault(m => m.Id == model.Id);

            if (movieDb == null)
            {
                model.SetError("No such movie in database");
                return(model);
            }

            var genresToRemove = movieDb.Genres;
            var genresToKeep   = model.SelectedGenresIds.Select(id => new MovieGenres {
                GenreId = id, MovieId = model.Id.Value
            });

            var actorsToRemove = movieDb.Actors;
            var actorsToKeep   = model.SelectedActorIds.Select(id => new MovieActors {
                PersonId = id, MovieId = model.Id.Value
            });

            var directorsToRemove = movieDb.Directors;
            var directorsToKeep   = model.SelectedDirectorIds.Select(id => new MovieDirectors {
                PersonId = id, MovieId = model.Id.Value
            });

            var producersToRemove = movieDb.Producers;
            var producersToKeep   = model.SelectedProducerIds.Select(id => new MovieProducers {
                PersonId = id, MovieId = model.Id.Value
            });

            var writersToRemove = movieDb.ScriptWriters;
            var writersToKeep   = model.SelectedScriptWriterIds.Select(id => new MovieScriptWriters {
                PersonId = id, MovieId = model.Id.Value
            });

            Mapper.Map(model, movieDb);

            try
            {
                DbContext.Movies.Update(movieDb);

                DbContext.MovieGenres.RemoveRange(genresToRemove);
                DbContext.MovieGenres.AddRange(genresToKeep);

                DbContext.MovieActors.RemoveRange(actorsToRemove);
                DbContext.MovieActors.AddRange(actorsToKeep);

                DbContext.MovieDirectors.RemoveRange(directorsToRemove);
                DbContext.MovieDirectors.AddRange(directorsToKeep);

                DbContext.MovieProducers.RemoveRange(producersToRemove);
                DbContext.MovieProducers.AddRange(producersToKeep);

                DbContext.MovieScriptWriters.RemoveRange(writersToRemove);
                DbContext.MovieScriptWriters.AddRange(writersToKeep);

                DbContext.SaveChanges();
            }
            catch (Exception e)
            {
                model.SetError("Databasee error");
                return(model);
            }

            Mapper.Map(movieDb, model);
            return(model);
        }