private static async Task SeedData() { var client = new TheMovieDbClient(TheMoviesDbApiKey); var genries = await client.MoviesGenries(); IConfiguration config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); var dbContextBuilder = new DbContextOptionsBuilder <MoviesRepository>() .UseSqlServer(config.GetConnectionString("DefaultConnection")); var repository = new MoviesRepository(dbContextBuilder.Options); repository.Database.EnsureCreated(); repository.Database.OpenConnection(); repository.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Genries] ON"); foreach (var genere in genries.genres) { if (repository.Genries.Any(x => x.Id == genere.id)) { continue; } repository.Genries.Add(new CinemaCporeReactProject.DAL.Models.Genere() { Id = genere.id, Title = genere.name }); } repository.SaveChanges(); repository.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Genries] OFF"); var norlizedCollection = dbNormalized.GetCollection <MovieModel>("Movies"); foreach (var movie in norlizedCollection.FindAll()) { if (repository.Movies.Any(x => x.ImdbId == movie.ImdbId)) { continue; } var movieGenries = repository.Genries.Where(x => movie.GenereIds.Contains(x.Id)).ToList(); repository.Movies.Add(new Movie() { ImdbId = movie.ImdbId, OriginalTitle = movie.OriginalTitle, Overview = movie.Overview, Poster = movie.PosterUrl, PosterFullUrl = movie.PosterFullUrl, ReleasedDate = movie.Released, Year = movie.StartYear, Type = movie.TitleType, Title = movie.PrimaryTitle, RuntimeMinutes = movie.RuntimeMinutes, Rating = new Rating() { AverageRating = movie.Rating.averageRating, NumberVotes = movie.Rating.numVotes }, Genere = movieGenries, }); } repository.SaveChanges(); Console.WriteLine("Done"); }
private static async Task NormalizeDb() { var collection = db.GetCollection <TitleBasic>(typeof(TitleBasic).Name); var ratingCollection = db.GetCollection <TitleRatings>(typeof(TitleRatings).Name); var norlizedCollection = dbNormalized.GetCollection <MovieModel>("Movies"); var client = new TheMovieDbClient(TheMoviesDbApiKey); int count = 0; System.Linq.Expressions.Expression <Func <TitleBasic, bool> > predicate = x => x.startYear == "2018" && x.titleType == "movie"; var progress = new ProgressBar(collection.Count(predicate), "ProcessingItems", new ProgressBarOptions() { EnableTaskBarProgress = true, }); foreach (var item in collection.Find(predicate)) { try { var rating = ratingCollection.FindById(item.tconst); if (norlizedCollection.Exists(x => x.ImdbId == item.tconst)) { continue; } var info = await client.Find(item.tconst); if (!info.movie_results.Any()) { collection.Delete(item.tconst); continue; } var entry = new MovieModel() { ImdbId = item.tconst, EndYear = item.endYear == "\\N" ? null : (int?)int.Parse(item.endYear), StartYear = item.startYear == "\\N" ? null : (int?)int.Parse(item.startYear), IsAdult = item.isAdult, genres = item.genres, InfoDownloaded = false, OriginalTitle = item.originalTitle, PrimaryTitle = item.primaryTitle, Rating = new MovieRating() { averageRating = rating?.averageRating ?? 0, numVotes = rating?.numVotes ?? 0 }, RuntimeMinutes = item.runtimeMinutes == "\\N" ? null : (int?)int.Parse(item.runtimeMinutes), TitleType = item.titleType, Overview = info.movie_results?.FirstOrDefault()?.overview ?? "", PosterUrl = info.movie_results?.FirstOrDefault()?.poster_path ?? "", Released = string.IsNullOrEmpty(info.movie_results?.FirstOrDefault()?.release_date) ? null : (DateTime?)DateTime.Parse(info.movie_results?.FirstOrDefault()?.release_date), PosterFullUrl = info.movie_results?.FirstOrDefault()?.FullPosterPath, GenereIds = info.movie_results?.FirstOrDefault()?.genre_ids }; norlizedCollection.Upsert(entry); } finally { progress.Tick($"{progress.CurrentTick} of {progress.MaxTicks}"); } } }