Beispiel #1
0
        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");
        }
Beispiel #2
0
        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}");
                }
            }
        }