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); }
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 })); }
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 })); }
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); }
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 })); }
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")); }
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())); }
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); }