Exemplo n.º 1
0
        public List <Credit> UpdateCredits(List <Credit> credits, Movie movie)
        {
            int movieId = movie.Id;

            // First update the movie ids so we can correlate them later.
            credits.ForEach(t => t.MovieId = movieId);

            // Now find credits to delete, update and insert.
            var existingCredits = _creditRepo.FindByMovieId(movieId);

            // Should never have multiple credits with same credit_id, but check to ensure incase TMDB is on fritz
            var dupeFreeCredits = credits.DistinctBy(m => m.CreditTmdbId).ToList();

            dupeFreeCredits.ForEach(c => c.Id = existingCredits.FirstOrDefault(t => t.CreditTmdbId == c.CreditTmdbId)?.Id ?? 0);

            var insert = dupeFreeCredits.Where(t => t.Id == 0).ToList();
            var update = dupeFreeCredits.Where(t => t.Id > 0).ToList();
            var delete = existingCredits.Where(t => !dupeFreeCredits.Any(c => c.CreditTmdbId == t.CreditTmdbId)).ToList();

            _creditRepo.DeleteMany(delete);
            _creditRepo.UpdateMany(update);
            _creditRepo.InsertMany(insert);

            return(credits);
        }