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 }
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); }