private async Task<bool> ValidateFormModelAndFiles(MovieFormMainModel formModel, List<IFormFile> files) { if (!ModelState.IsValid) { await this.PopulateFormMainModel(formModel); return false; } this.posters = new List<byte[]>(); foreach (IFormFile file in files) { bool isValidImage = await Task.Run(() => file.ValidateImage(ModelState)); if (!isValidImage) { await this.PopulateFormMainModel(formModel); return false; } byte[] imageBytes = await file.ToByteArrayAsync(); posters.Add(imageBytes); } return true; }
private async Task PopulateFormMainModel(MovieFormMainModel formModel) { formModel.AllColors = await this.GetAllColors(); formModel.AllCountries = await this.GetAllCountries(); formModel.AllGenres = await this.GetAllGenres(); formModel.AllLanguages = await this.GetAllLanguages(); }
public async Task<IActionResult> Create() { var formModel = new MovieFormMainModel() { ProductionYear = DateTime.UtcNow.Year }; await this.PopulateFormMainModel(formModel); return View(formModel); }
public async Task<IActionResult> Edit(int id) { MovieDetailsServiceModel movieDetails = await this.movieDbService.GetMovieDetailsAsync(id); if (movieDetails == null) { return NotFound(); } MovieFormMainModel formModel = new MovieFormMainModel(); IMapper config = new MapperConfiguration(cfg => { cfg.CreateMap<MovieDetailsServiceModel, MovieFormMainModel>() .ForMember(dest => dest.Cast, opts => opts .MapFrom(source => source.Cast.Select(c => new CastFormModel() { ImdbId = c.ImdbId, Name = c.Name, Character = c.Character }))) .ForMember(dest => dest.Crew, opts => opts .MapFrom(source => source.Crew.Select(c => new CrewFormModel() { ImdbId = c.ImdbId, Name = c.Name, Role = c.Role }))) .ForMember(dest => dest.SelectedColors, opts => opts .MapFrom(source => source.Colors.Select(c => c.Id))) .ForMember(dest => dest.SelectedCountries, opts => opts .MapFrom(source => source.Countries.Select(c => c.Id))) .ForMember(dest => dest.SelectedGenres, opts => opts .MapFrom(source => source.Genres.Select(g => g.Id))) .ForMember(dest => dest.SelectedLanguages, opts => opts .MapFrom(source => source.Languages.Select(l => l.Id))); }) .CreateMapper(); formModel = config.Map<MovieDetailsServiceModel, MovieFormMainModel>(movieDetails); await this.PopulateFormMainModel(formModel); return View(formModel); }
public async Task<IActionResult> Search(MovieSearchTitleFormModel formSearchModel) { const string none = WebConstants.RadioButtonNoneValue; string blurayDotComTitleId = formSearchModel.BlurayDotComSelectedTitle; string boxOfficeMojoTitleId = formSearchModel.BoxOfficeMojoSelectedTitle; string dvdEmpireTiteId = formSearchModel.DvdEmpireSelectedTitle; string imdbTitleId = formSearchModel.ImdbSelectedTitle; string rottenTomatoesTitleId = formSearchModel.RottenTomattoesSelectedTitle; MovieFormMainModel formMainModel = new MovieFormMainModel(); #region Blu-ray.com if (!string.IsNullOrEmpty(blurayDotComTitleId) && blurayDotComTitleId != none) { //BlurayDotComMainServiceModel blurayDotComServiceModel // = await this.blurayDotComService.GetMovieDataAsync(blurayDotComTitleId); } #endregion Blu-ray.com #region Box Office Mojo if (!string.IsNullOrEmpty(boxOfficeMojoTitleId) && boxOfficeMojoTitleId != none) { try { BoxOfficeMojoMainServiceModel boxOfficeMojoServiceModel = await this.boxOfficeMojoService.GetMovieDataAsync(boxOfficeMojoTitleId); IMapper config = new MapperConfiguration(cfg => { cfg.CreateMap<BoxOfficeMojoMainServiceModel, MovieFormMainModel>(); }) .CreateMapper(); config.Map(boxOfficeMojoServiceModel, formMainModel); } catch (Exception ex) { await Task.Run(() => ex.Log(nameof(HomeController), nameof(Search))); } } #endregion Box Office Mojo #region IMDb if (!string.IsNullOrEmpty(imdbTitleId) && imdbTitleId != none) { try { ImdbMainServiceModel imdbServiceModel = await this.imdbService.GetMovieDataAsync(imdbTitleId); this.mapper.Map(imdbServiceModel, formMainModel); IEnumerable<string> colorNames = imdbServiceModel.Colors; formMainModel.SelectedColors = await this.movieDbService.GetColorsIdFromNameAsync(colorNames); IEnumerable<string> countryNames = imdbServiceModel.Countries; formMainModel.SelectedCountries = await this.movieDbService.GetCountriesIdFromNameAsync(countryNames); IEnumerable<string> genreNames = imdbServiceModel.Genres; formMainModel.SelectedGenres = await this.movieDbService.GetGenresIdFromNameAsync(genreNames); IEnumerable<string> languageNames = imdbServiceModel.Languages; formMainModel.SelectedLanguages = await this.movieDbService.GetLanguagesIdFromNameAsync(languageNames); } catch (Exception ex) { await Task.Run(() => ex.Log(nameof(HomeController), nameof(Search))); } } #endregion IMDb #region Rotten Tomattoes if (!string.IsNullOrEmpty(rottenTomatoesTitleId) && rottenTomatoesTitleId != none) { try { RottenTomatoesMainServiceModel rottenTomatoesServiceModel = await this.rottenTomatoesService.GetMovieDataAsync(rottenTomatoesTitleId); IMapper config = new MapperConfiguration(cfg => { cfg.CreateMap<RottenTomatoesMainServiceModel, MovieFormMainModel>(); }) .CreateMapper(); config.Map(rottenTomatoesServiceModel, formMainModel); } catch (Exception ex) { await Task.Run(() => ex.Log(nameof(HomeController), nameof(Search))); } } #endregion Rotten Tomattoes await this.PopulateFormMainModel(formMainModel); return View("Edit", formMainModel); }
public async Task<IActionResult> Edit(int id, MovieFormMainModel formModel, List<IFormFile> files) { bool isValid = await this.ValidateFormModelAndFiles(formModel, files); if (!isValid) { return View(formModel); } List<CastServiceModel> castArtists = this.mapper .Map<IEnumerable<CastFormModel>, List<CastServiceModel>>(formModel.Cast); List<CrewServiceModel> crewArtists = this.mapper .Map<IEnumerable<CrewFormModel>, List<CrewServiceModel>>(formModel.Crew); bool success = false; byte[] thumbnail = await this.GetThumbnail(); try { success = await this.movieDbService.EditMovieAsync( id, formModel.BoxOfficeMojoId, formModel.Budget, castArtists.AsNotNull(), crewArtists.AsNotNull(), formModel.GrossForeign, formModel.GrossUsa, formModel.ImdbId, formModel.ImdbTop250, formModel.ImdbUsersRating, formModel.OriginalTitle, posters, formModel.ProductionYear, formModel.RottenTomatoesCriticsScore, formModel.RottenTomatoesId, formModel.RottenTomatoesUsersScore, formModel.Runtime, formModel.SelectedColors.AsNotNull(), formModel.SelectedCountries.AsNotNull(), formModel.SelectedGenres.AsNotNull(), formModel.SelectedLanguages.AsNotNull(), formModel.Synopsis, thumbnail, formModel.Title); } catch (Exception ex) { ModelState.AddModelError(string.Empty, ex.Message); await this.PopulateFormMainModel(formModel); return View(formModel); } if (success) { TempData[WebConstants.TempDataSuccessMessageKey] = string.Format(MovieEditedSuccessMessage, formModel.Title); } else { TempData[WebConstants.TempDataErrorMessageKey] = "Unsuccess"; } return RedirectToAction(nameof(Index)); }