Ejemplo n.º 1
0
        public async Task UpdateMovie(UpdateMovieDetailsDto movie)
        {
            await UpdateMovieDetails(movie);

            var persistentMovie = await DbContext.Movies.FindAsync(movie.Id);

            persistentMovie.LastUpdatedDetails = RoundToSecond(DateTime.Now);
        }
Ejemplo n.º 2
0
        private void UpdateRatings(UpdateMovieDetailsDto movie, Movie existingMovie)
        {
            foreach (var ratingDto in movie.Ratings)
            {
                var existingRating = DbContext.Ratings.Find(ratingDto.MovieId, ratingDto.SourceId);
                var existingSource = DbContext.RatingSources.Find(ratingDto.SourceId);

                if (existingSource == null)
                {
                    DbContext.RatingSources.Add(ratingDto.Source);
                    existingSource = DbContext.RatingSources.Find(ratingDto.SourceId);
                }

                if (existingRating == null)
                {
                    var rating = new Rating
                    {
                        Movie    = existingMovie,
                        MovieId  = existingMovie.Id,
                        Source   = existingSource,
                        SourceId = existingSource.Id,
                    };

                    DbContext.Ratings.Add(rating);
                    existingRating = DbContext.Ratings.Find(ratingDto.MovieId, ratingDto.SourceId);
                }

                var isOk = float.TryParse(ratingDto.Score, out float f);
                if (isOk)
                {
                    existingRating.Score = f;
                }
                else
                {
                    existingRating.Score = null;
                }

                var ratingAlreadyAdded = existingMovie.Ratings.Find(x => x.SourceId == existingRating.SourceId);
                if (ratingAlreadyAdded == null)
                {
                    existingMovie.Ratings.Add(existingRating);
                }
                else
                {
                    ratingAlreadyAdded.Score = existingRating.Score;
                }
            }
        }
Ejemplo n.º 3
0
        private async Task UpdateMovieDetails(UpdateMovieDetailsDto movie)
        {
            //TODO: this makes update very slow. must improve
            var existingMovie = await DbContext.Movies
                                .Include(x => x.BoxOffice)
                                .Include(x => x.Trailer)
                                .Include(x => x.Ratings)
                                .Include(x => x.ActorList)
                                .ThenInclude(x => x.Person)
                                .Include(x => x.DirectorList)
                                .ThenInclude(x => x.Person)
                                .Include(x => x.WriterList)
                                .ThenInclude(x => x.Person)
                                .Include(x => x.CompanyList)
                                .Include(x => x.Images)
                                .Include(x => x.Similars)
                                .ThenInclude(x => x.Similar)
                                .SingleOrDefaultAsync(x => x.Id == movie.Id);

            if (existingMovie == null)
            {
                throw new RepositoryException("Movie does not exists in local. Cannot update details.");
            }

            var lastUpdatedTop     = existingMovie.LastUpdatedTop250;
            var rank               = existingMovie.Rank;
            var lastUpdatedDetails = existingMovie.LastUpdatedDetails;
            var mustWatch          = existingMovie.IsMustWatch;
            var watched            = existingMovie.IsWatched;
            var fav = existingMovie.IsFavorite;

            DbContext.Entry(existingMovie).CurrentValues.SetValues(movie);
            existingMovie.LastUpdatedTop250 = lastUpdatedTop;
            existingMovie.Rank = rank;
            existingMovie.LastUpdatedDetails = lastUpdatedDetails;
            existingMovie.IsMustWatch        = mustWatch;
            existingMovie.IsWatched          = watched;
            existingMovie.IsFavorite         = fav;
            existingMovie.BoxOffice          = movie.BoxOffice;
            existingMovie.Trailer            = movie.Trailer;

            UpdateRelatedInfo(movie);

            UpdateRatings(movie, existingMovie);
        }
Ejemplo n.º 4
0
        private void UpdateRelatedInfo(UpdateMovieDetailsDto movie)
        {
            foreach (var image in movie.Images)
            {
                var existingLink = DbContext.MovieImageDatas.Find(new object[] { image.MovieId, image.Id });
                if (existingLink != null)
                {
                    continue;
                }

                var existingMovie = DbContext.Movies.Find(new object[] { image.MovieId });
                if (existingMovie == null)
                {
                    throw new InvalidOperationException("Se esperaba encontrar pelicula para agregar personas");
                }

                existingMovie.Images.Add(new MovieImageData
                {
                    Id      = image.Id,
                    Movie   = existingMovie,
                    MovieId = existingMovie.Id,
                    Image   = image.Image,
                    Title   = image.Title
                });
            }

            //TODO: refactor this
            foreach (var moviePerson in movie.ActorList)
            {
                var existingLink = DbContext.MovieActors.Find(new object[] { moviePerson.MovieId, moviePerson.PersonId });
                if (existingLink != null)
                {
                    continue;
                }

                var existingPerson = DbContext.People.Find(new object[] { moviePerson.PersonId });
                if (existingPerson == null)
                {
                    DbContext.People.Add(moviePerson.Person);
                    existingPerson = DbContext.People.Find(new object[] { moviePerson.PersonId });
                }

                var existingMovie = DbContext.Movies.Find(new object[] { moviePerson.MovieId });
                if (existingMovie == null)
                {
                    throw new InvalidOperationException("Se esperaba encontrar pelicula para agregar personas");
                }

                var newLink = new MovieActor
                {
                    Movie       = existingMovie,
                    MovieId     = existingMovie.Id,
                    Person      = existingPerson,
                    PersonId    = existingPerson.Id,
                    AsCharacter = moviePerson.AsCharacter,
                    IsStar      = moviePerson.IsStar
                };

                DbContext.MovieActors.Add(newLink);
            }

            foreach (var moviePerson in movie.WriterList)
            {
                var existingLink = DbContext.MovieWriters.Find(new object[] { moviePerson.MovieId, moviePerson.PersonId });
                if (existingLink != null)
                {
                    continue;
                }

                var existingPerson = DbContext.People.Find(new object[] { moviePerson.PersonId });
                if (existingPerson == null)
                {
                    DbContext.People.Add(moviePerson.Person);
                    existingPerson = DbContext.People.Find(new object[] { moviePerson.PersonId });
                }

                var existingMovie = DbContext.Movies.Find(new object[] { moviePerson.MovieId });
                if (existingMovie == null)
                {
                    throw new InvalidOperationException("Se esperaba encontrar pelicula para agregar personas");
                }

                var newLink = new MovieWriter
                {
                    Movie    = existingMovie,
                    MovieId  = existingMovie.Id,
                    Person   = existingPerson,
                    PersonId = existingPerson.Id,
                };

                DbContext.MovieWriters.Add(newLink);
            }

            foreach (var moviePerson in movie.DirectorList)
            {
                var existingLink = DbContext.MovieDirectors.Find(new object[] { moviePerson.MovieId, moviePerson.PersonId });
                if (existingLink != null)
                {
                    continue;
                }

                var existingPerson = DbContext.People.Find(new object[] { moviePerson.PersonId });
                if (existingPerson == null)
                {
                    DbContext.People.Add(moviePerson.Person);
                    existingPerson = DbContext.People.Find(new object[] { moviePerson.PersonId });
                }

                var existingMovie = DbContext.Movies.Find(new object[] { moviePerson.MovieId });
                if (existingMovie == null)
                {
                    throw new InvalidOperationException("Se esperaba encontrar pelicula para agregar personas");
                }

                var newLink = new MovieDirector
                {
                    Movie    = existingMovie,
                    MovieId  = existingMovie.Id,
                    Person   = existingPerson,
                    PersonId = existingPerson.Id,
                };

                DbContext.MovieDirectors.Add(newLink);
            }

            foreach (var movieSimilar in movie.Similars)
            {
                var existingLink = DbContext.MovieSimilars.Find(new object[] { movieSimilar.MovieId, movieSimilar.SimilarId });
                if (existingLink != null)
                {
                    continue;
                }

                var existingSimilar = DbContext.Movies.Find(new object[] { movieSimilar.SimilarId });
                if (existingSimilar == null)
                {
                    DbContext.Movies.Add(movieSimilar.Similar);
                    existingSimilar = DbContext.Movies.Find(new object[] { movieSimilar.SimilarId });
                }

                var existingMovie = DbContext.Movies.Find(new object[] { movieSimilar.MovieId });
                if (existingMovie == null)
                {
                    throw new InvalidOperationException("Se esperaba encontrar pelicula para agregar personas");
                }

                var newLink = new MovieSimilar
                {
                    Movie     = existingMovie,
                    MovieId   = existingMovie.Id,
                    Similar   = existingSimilar,
                    SimilarId = existingSimilar.Id,
                };

                DbContext.MovieSimilars.Add(newLink);
            }

            foreach (var movieCompany in movie.CompanyList)
            {
                var existingLink = DbContext.MovieCompanies.Find(new object[] { movieCompany.MovieId, movieCompany.CompanyId });
                if (existingLink != null)
                {
                    continue;
                }

                var existingCompany = DbContext.Companies.Find(new object[] { movieCompany.CompanyId });
                if (existingCompany == null)
                {
                    DbContext.Companies.Add(movieCompany.Company);
                    existingCompany = DbContext.Companies.Find(new object[] { movieCompany.CompanyId });
                }

                var existingMovie = DbContext.Movies.Find(new object[] { movieCompany.MovieId });
                if (existingMovie == null)
                {
                    throw new InvalidOperationException("Se esperaba encontrar pelicula para agregar personas");
                }

                var newLink = new MovieCompany
                {
                    Movie     = existingMovie,
                    MovieId   = existingMovie.Id,
                    Company   = existingCompany,
                    CompanyId = existingCompany.Id,
                };

                DbContext.MovieCompanies.Add(newLink);
            }
        }