Example #1
0
        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 }));
        }
Example #2
0
        ///<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);
        }
Example #3
0
        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 }));
        }
Example #4
0
        ///<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);
        }