public IActionResult Create() { var viewModel = new CreateMovieInputModel(); viewModel.GenresItems = this.genresService.GetAllAsKeyValuePairs(); return(this.View(viewModel)); }
public async Task <bool> CreateMovieAsync(CreateMovieInputModel input) { if (!await dbContext.Genres.AnyAsync(genre => genre.Name == input.Genre)) { return(false); } if (!await dbContext.Artists.AnyAsync(artist => artist.FullName == input.Director)) { return(false); } if (await dbContext.Movies.AnyAsync(movie => movie.Name == input.Name)) { return(false); } var genreFromDb = await dbContext.Genres.SingleOrDefaultAsync(g => g.Name == input.Genre); var directorFromDb = await dbContext.Artists.SingleOrDefaultAsync(a => a.FullName == input.Director); var movieForDb = mapper.Map <CreateMovieInputModel, Movie>(input); movieForDb.Genre = genreFromDb; movieForDb.Director = directorFromDb; await dbContext.Movies.AddAsync(movieForDb); await dbContext.SaveChangesAsync(); return(true); }
public async Task <IActionResult> CreateAsync([FromBody] CreateMovieInputModel inputModel, CancellationToken cancellationToken = default) { var movieCreated = await _movieService.CreateMovieAsync(inputModel, cancellationToken); return(Created($"api/movies/{movieCreated.Id}", movieCreated)); }
public async Task <IActionResult> Create(CreateMovieInputModel input) { if (!ModelState.IsValid) { return(View(input)); } if (!await movieService.CreateMovieAsync(input)) { return(View(input)); } return(Redirect(redirectMoviesAllAndOrder)); }
public async Task CreateMovieShouldReturnFalseIfProvidedGenreArtistOrMovieNameIsInvalid(string movieName, string genreName, string directorName, bool expectedResult) { var genre1 = new Genre { Name = "genre1" }; var artist1 = new Artist { FullName = "name1", Biography = "biography1", BirthDate = DateTime.Parse("25 July 2019"), PhotoLink = "photo1", }; var movie1 = new Movie { Name = "movie1", ReleaseDate = DateTime.Parse("24 July 2019"), Description = "description1", Length = 160, Genre = genre1, Director = artist1, CoverImageLink = "cover1", TrailerLink = "trailer1", }; await dbContext.Genres.AddAsync(genre1); await dbContext.Artists.AddAsync(artist1); await dbContext.Movies.AddAsync(movie1); await dbContext.SaveChangesAsync(); var movieService = new MovieService(dbContext, reviewService.Object, watchlistService.Object, mapper); var input = new CreateMovieInputModel { Name = movieName, ReleaseDate = DateTime.Parse("24 July 2019"), Description = "description1", Length = 160, Genre = genreName, Director = directorName, CoverImageLink = "cover1", TrailerLink = "trailer1", }; var actualResult = await movieService.CreateMovieAsync(input); Assert.Equal(actualResult, expectedResult); }
public async Task <MovieDTO> CreateMovieAsync(CreateMovieInputModel inputModel, CancellationToken cancellationToken = default) { inputModel.EnsureIsValid(); var movie = new Movie(inputModel.Name); await _repository.AddAsync(movie, cancellationToken); return(new MovieDTO() { Id = movie.Id, Name = movie.Name }); }
public async Task CreateMovieShouldSetDefaultCoverAndTrailerIfNotProvided() { var genre1 = new Genre { Name = "genre1" }; var artist1 = new Artist { FullName = "name1", Biography = "biography1", BirthDate = DateTime.Parse("25 July 2019"), PhotoLink = "photo1", }; await dbContext.Genres.AddAsync(genre1); await dbContext.Artists.AddAsync(artist1); await dbContext.SaveChangesAsync(); var movieService = new MovieService(dbContext, reviewService.Object, watchlistService.Object, mapper); var input = new CreateMovieInputModel { Name = "movie1", ReleaseDate = DateTime.Parse("24 July 2019"), Description = "description1", Length = 160, Genre = "genre1", Director = "name1", CoverImageLink = "", TrailerLink = " ", }; var actualResult = await movieService.CreateMovieAsync(input); Assert.True(actualResult); Assert.True(dbContext.Movies.Count() == 1); Assert.Equal(genre1, dbContext.Movies.First().Genre); Assert.Equal(artist1, dbContext.Movies.First().Director); Assert.Equal(GlobalConstants.noImageLink, dbContext.Movies.First().CoverImageLink); Assert.Equal(GlobalConstants.noTrailerLink, dbContext.Movies.First().TrailerLink); }
public async Task CreateAsync(CreateMovieInputModel input, string imagePath) { var movie = new Movie(); movie.GenreId = input.GenreId; movie.Name = input.Name; movie.Description = input.Description; var allowedExtensions = new[] { "jpg", "png", "gif" }; Directory.CreateDirectory($"{imagePath}/movies/"); foreach (var image in input.Images) { var extension = Path.GetExtension(image.FileName).TrimStart('.'); if (!allowedExtensions.Any(x => extension.EndsWith(x))) { throw new Exception($"Invalid image extension {extension}"); } var dbImage = new Image { Movie = movie, Extension = extension, }; movie.Images.Add(dbImage); var physicalPath = $"{imagePath}/movies/{dbImage.Id}.{extension}"; using Stream filestream = new FileStream(physicalPath, FileMode.Create); await image.CopyToAsync(filestream); } await this.moviesRepository.AddAsync(movie); await this.moviesRepository.SaveChangesAsync(); }
public async Task <IActionResult> Create(CreateMovieInputModel input) { if (!this.ModelState.IsValid) { input.GenresItems = this.genresService.GetAllAsKeyValuePairs(); return(this.View(input)); } try { await this.moviesService.CreateAsync(input, $"{this.environment.WebRootPath}/images"); } catch (Exception ex) { this.ModelState.AddModelError(string.Empty, ex.Message); input.GenresItems = this.genresService.GetAllAsKeyValuePairs(); return(this.View(input)); } // TODO: Redirect to Movie page return(this.Redirect("/")); }