Exemple #1
0
        private static async Task Main(string[] args)
        {
            var theMovieDbApiClient  = new TheMovieDbApiClient();
            var movieDbLiteApiClient = new MovieDbLiteApiClient();

            string movieName = "The Dark Knight";

            if (args.Length > 0)
            {
                // if passed via CLI, use over default
                movieName = args[0];
            }

            DbOrgMovieResults movieResults = await theMovieDbApiClient.GetMovieResults(movieName);

            if (movieResults.Results.Length == 0)
            {
                throw new Exception("No movie results were found from the search");
            }

            // For these purposes, get the top-most movie id based on the search.  Ignore other results.
            long topMostMovieId = movieResults.Results[0].Id;

            DbOrgMovie movie = await theMovieDbApiClient.GetMovie(topMostMovieId);

            await movieDbLiteApiClient.AddNewMovie(movie);

            theMovieDbApiClient.Dispose();
            movieDbLiteApiClient.Dispose();
        }
        public async Task Post([FromBody] DbOrgMovie dbOrgMovie)
        {
            var movie = new Movie();

            // Set basic details (easy)
            movie.Title             = dbOrgMovie.Title;
            movie.Description       = dbOrgMovie.Overview.Substring(0, Math.Min(dbOrgMovie.Overview.Length, 500));
            movie.DurationInMinutes = (int)dbOrgMovie.Runtime;
            movie.ReleaseDate       = dbOrgMovie.ReleaseDate.DateTime;

            // Set Restriction Rating.  Use certification of first US Release in TheMovieDbOrg results.
            movie.RestrictionRatingId = await GetRestrictionRating(dbOrgMovie);

            // Set Genre/Language lists by reference
            await SetMovieGenres(dbOrgMovie, movie);
            await SetMovieLanguages(dbOrgMovie, movie);

            #region Insert With Stored Procedure

            //using var sqlConn = new SqlConnection(_context.Database.GetDbConnection().ConnectionString);
            //await InsertMovieWithStoredProcedureAsync(sqlConn, movie);

            #endregion

            #region Insert with Entity Framework (Commented out)

            _context.Add(movie);
            await _context.SaveChangesAsync();

            #endregion
        }
Exemple #3
0
        public async Task Post_WillCreateMovieDbLiteMovie_WithBasicDetails()
        {
            // Arrange
            var builder = new DbContextOptionsBuilder <MovieDbLiteContext>();

            builder.UseInMemoryDatabase(Guid.NewGuid().ToString());
            using var dbContext = new MovieDbLiteContext(builder.Options);
            SeedData(dbContext);

            using var testContext = new MovieDbLiteContext(builder.Options);
            DbOrgMovie dbOrgMovie = CreateObjectWithoutLanguagesAndRestrictionRating();

            var theMovieDbApiController = new TheMovieDbApiController(testContext);
            await theMovieDbApiController.Post(dbOrgMovie);

            using var retrieveContext = new MovieDbLiteContext(builder.Options);

            var movies = await retrieveContext.Movie.Include(m => m.MovieGenre).ToListAsync();

            Assert.AreEqual(1, movies.Count);
            Movie newMovie = movies[0];

            Assert.AreEqual("Football Movie", newMovie.Title);
            Assert.AreEqual(150, newMovie.DurationInMinutes);
            Assert.AreEqual(new DateTime(2020, 05, 08), newMovie.ReleaseDate);
            Assert.AreEqual(2, newMovie.MovieGenre.Count);
            Assert.IsTrue(newMovie.MovieGenre.Any(mg => mg.GenreId == 1));
            Assert.IsTrue(newMovie.MovieGenre.Any(mg => mg.GenreId == 2));
            Assert.IsNull(newMovie.RestrictionRatingId);
        }
        public async Task <DbOrgMovie> GetMovie(long movieId)
        {
            HttpResponseMessage response = await MovieDbHttpClient.GetAsync($"movie/{movieId}?{ApiKeyParam}&append_to_response=releases");

            string json = await response.Content.ReadAsStringAsync();

            DbOrgMovie movie = DbOrgMovie.FromJson(json);

            return(movie);
        }
        private async Task <short?> GetRestrictionRating(DbOrgMovie dbOrgMovie)
        {
            string?restrictionRatingCode =
                dbOrgMovie?.Releases?.Countries.Where(c => c.Iso3166_1 == "US") // Get US releases
                .OrderBy(c => c.ReleaseDate)                                    // Get First Release (Assumes it is Theatrical Release)
                .Select(r => r.Certification)
                .FirstOrDefault();

            RestrictionRating restrictionRating = await _context.RestrictionRating.Where(r => r.Code == restrictionRatingCode).FirstOrDefaultAsync();

            return(restrictionRating?.Id);
        }
        private async Task SetMovieLanguages(DbOrgMovie dbOrgMovie, Movie movie)
        {
            // match languages iso codes between two databases to get ones that exist in both
            var dbOrgLanguages = dbOrgMovie.SpokenLanguages.Select(l => l.Iso639_1).ToList();
            IQueryable <Language> matchedLanguages = _context.Language.Where(l => dbOrgLanguages.Contains(l.LanguageIsoCode));

            foreach (Language language in await matchedLanguages.ToListAsync())
            {
                movie.MovieLanguage.Add(new MovieLanguage()
                {
                    LanguageIsoCode = language.LanguageIsoCode
                });
            }
        }
        private async Task SetMovieGenres(DbOrgMovie dbOrgMovie, Movie movie)
        {
            // match genre names between two databases to get ones that exist in both
            var dbOrgMovieGenreNames = dbOrgMovie.Genres.Select(g => g.Name).ToList();
            var matchedGenres        = _context.Genre.Where(genre => dbOrgMovieGenreNames.Contains(genre.GenreName));

            foreach (Models.Genre genre in await matchedGenres.ToListAsync())
            {
                movie.MovieGenre.Add(new MovieGenre()
                {
                    GenreId = genre.Id
                });
            }
        }
 public async Task AddNewMovie(DbOrgMovie movie)
 {
     string json    = Serialize.ToJson(movie);
     var    content = new StringContent(json, Encoding.UTF8, "application/json");
     var    result  = await MovieDbLiteHttpClient.PostAsync("api/TheMovieDbApi", content);
 }