コード例 #1
0
        public IActionResult Create()
        {
            var viewModel = new CreateMovieInputModel();

            viewModel.GenresItems = this.genresService.GetAllAsKeyValuePairs();
            return(this.View(viewModel));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        public async Task <IActionResult> Create(CreateMovieInputModel input)
        {
            if (!ModelState.IsValid)
            {
                return(View(input));
            }

            if (!await movieService.CreateMovieAsync(input))
            {
                return(View(input));
            }

            return(Redirect(redirectMoviesAllAndOrder));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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
            });
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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();
        }
コード例 #9
0
        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("/"));
        }