public async Task <IActionResult> FetchFilm(string title = null) { if (title == null) { return(RedirectToAction("Add", "Films")); } var tempDataId = Guid.NewGuid().ToString(); if (filmDataBusiness.IsAlreadyAdded(title)) { var inputModel = new FilmInputModel { Error = "Film already added!" }; TempData[tempDataId] = JsonConvert.SerializeObject(inputModel); } else { TempData[tempDataId] = await filmFetchApi.FetchFilmAsync <FilmJsonModel, FilmInputModel> (title, mapper.MapToFilmInputModel); } return(this.RedirectToAction("Add", "Films", new { Id = tempDataId })); }
///<summary> /// Converts FilmInputModel data to FilmData ///</summary> ///<param name="film"> Film object to map from</param> ///<param name="input">FilmInputModel object to map from</param> ///<returns>Mapped instance of type <see cref="FilmData"/></returns> public FilmData MapToFilmData(FilmInputModel input, Film film) { var model = MapSimilarProperties <FilmInputModel, FilmData>(input); model.FilmId = film.Id; model.Genre = input.Genre.Select(x => new GenreType() { Genre = x }).ToList(); return(model); }
public async Task <IActionResult> Add(FilmInputModel input) { if (filmDataBusiness.IsAlreadyAdded(input.Title)) { ModelState.AddModelError("Added", "Film already added!"); } var userId = userManager.GetUserId(User); if (Guid.TryParse(input.Poster, out _)) { if (input.PosterUpload != null) { var fileName = $"_{input.Title}_Poster"; IFormFile file = input.PosterUpload; using var stream = new MemoryStream(); await file.CopyToAsync(stream); var posterUrl = await cloudinaryAPI.UploadImageAsync(stream, fileName); input.Poster = posterUrl; } else { ModelState.AddModelError("Poster", "Poster is required! Either add image url or upload one."); } } if (!ModelState.IsValid || userId == null) { return(this.View()); } var film = new Film { AddedByUserId = userId, Rating = input.Rating, Ratings = new List <FilmRating> { new FilmRating { Rating = input.Rating, UserId = userId } } }; await filmBusiness.AddAsync(film); await filmDataBusiness.AddAsync(input, film, mapper.MapToFilmData); return(this.RedirectToAction("Detail", "Films", new { film.Id })); }
///<summary> /// Converts FilmJsonModel data to FilmUpdateInputModel ///</summary> ///<param name="filmData"> FilmData object to map from </param> ///<returns>Mapped instance of type <see cref="FilmInputModel"/></returns> public FilmInputModel MapToFilmInputModel(FilmJsonModel filmData) { if (filmData.Response == "False") { return(new FilmInputModel { Error = filmData.Error }); } var filmInputModel = new FilmInputModel { Title = filmData.Title, Director = filmData.Director, Cast = filmData.Actors, Description = filmData.Plot, TargetAudience = TargetAudience.All, }; var posterUrl = filmData.Poster; if (!string.IsNullOrWhiteSpace(posterUrl)) { var indexToCut = posterUrl.LastIndexOf('@'); if (indexToCut > 1) { posterUrl = posterUrl?.Substring(0, posterUrl.LastIndexOf('@') + 1) + "._V1_SY1000_SX675_AL_.jpg"; } } filmInputModel.Poster = posterUrl; var genres = new List <Genre>(); foreach (var genre in filmData.Genre.Split(", ")) { foreach (Genre type in Enum.GetValues(typeof(Genre))) { if (genre == type.ToString()) { genres.Add(type); break; } } } if (genres.Count == 0) { genres.Add(Genre.Uncategorized); } filmInputModel.Genre = genres; if (!DateTime.TryParse(filmData.Released, out DateTime releaseDate)) { releaseDate = DateTime.Now; } filmInputModel.ReleaseDate = releaseDate; if (!int.TryParse(filmData.Runtime.Split(" ")?[0], out int runtime)) { runtime = 0; } filmInputModel.Runtime = runtime; return(filmInputModel); }