private void ThrowIfMovieNull(Movie movie) { if (movie == null) throw new ArgumentNullException(nameof(movie)); if (string.IsNullOrEmpty(movie.Title)) throw new ArgumentNullException(nameof(movie.Title)); if (string.IsNullOrEmpty(movie.Id)) throw new ArgumentNullException(nameof(movie.Id)); }
public async Task AddWithRelationToPerson(Movie movie, Person existingPerson, string relationType) { await _db.PersonMatch() .Where((Person person) => person.Name == existingPerson.Name) .CreateUnique( $"person-[:{relationType}]->(movie:Movie {{newMovie}})") .WithParam("newMovie", movie) .ExecuteWithoutResultsAsync(); }
public async Task UpdateMovieAsync(Movie movie) { ThrowIfMovieNull(movie); if ((await GetMovieByTitleAndYearAsync(movie.Title, movie.Year)) == null) { await AddMovieAsync(movie); return; } await _movieRepo.Update(movie); }
public async Task AddOrUpdateMovieWithRelationAsync(Movie movie, Person person, string relationType) { ThrowIfMovieNull(movie); ThrowIfPersonNull(person); if ((await GetMovieByTitleAndYearAsync(movie.Title, movie.Year)) == null) { await _movieRepo.AddWithRelationToPerson(movie, person, relationType); return; } //await UpdateMovieAsync(movie); await _movieRepo.AddRelationToPerson(movie, person, relationType); }
public async Task Update(Movie updatedMovie) { var query = _db.MovieMerge() .Where((Movie movie) => movie.Id == updatedMovie.Id) .OnCreate() .Set("movie = {_updatedMovie}") .WithParams(new { _updatedMovie = updatedMovie }); var q = query.Query; await query.ExecuteWithoutResultsAsync(); }
public async Task<IActionResult> AddMovie() { Movie movie = new Movie { Title = "Awesome Movie", Year = "2014", Id = "12345" }; await _movieService.AddOrUpdateMovieWithRelationAsync(movie, (await _personService.GetPersonByNameAsync("Will Czifro")), RelationTypes.ActedIn); var m = await _movieService.GetMovieByTitleAndYearAsync(movie.Title, movie.Year); return Ok(m); }
public async Task <IActionResult> AddMovie() { Movie movie = new Movie { Title = "Awesome Movie", Year = "2014", Id = "12345" }; await _movieService.AddOrUpdateMovieWithRelationAsync(movie, (await _personService.GetPersonByNameAsync("Will Czifro")), RelationTypes.ActedIn); var m = await _movieService.GetMovieByTitleAndYearAsync(movie.Title, movie.Year); return(Ok(m)); }
private static void MovieCollector(IMovieService movieService, IPersonService personService, MyApiFilmsClient client, ConcurrentQueue queue) { while (queue.IncompleteMoviesWaiting() || queue.IncompletePersonsWaiting()) { if (!queue.IncompleteMoviesWaiting()) { continue; } // ApiMovie is an alias for FilmIndustryNetwork.MyApiFilms.Entities.Movie // This is to distinguish between FilmIndustryNetwork.MyApiFilms.Entities.Movie // and FilmIndustryNetwork.Entities.Movie ApiMovie apiMovie; var title = queue.PopIncompleteMovie(); if (title == "---") { continue; } try { apiMovie = client.GetDataAsObject <MovieResponse>(title, DataSetType.Movie)?.Data?.Movies?.FirstOrDefault(); if (apiMovie == null) { throw new Exception(); } if (apiMovie.Type.Contains("TV")) { continue; } } catch (MyApiFilmsTimeoutException e) { // TODO: setup logging FillQueueFromList(movieService, null, new [] { title }, queue, 0); continue; } catch (NoMyApiFilmsResponseException e) { // TODO: setup logging continue; } catch (Exception) { // TODO: setup logging FillQueueFromList(movieService, null, new[] { title }, queue, 0); continue; } var newMovie = new Movie { Countries = apiMovie.Countries, FilmingLocations = apiMovie.FilmingLocations, Genres = apiMovie.Genres, Id = apiMovie.IdIMDB, Languages = apiMovie.Languages, Plot = apiMovie.Plot, NeedsApiLookup = false, Rated = apiMovie.Rated, Rating = apiMovie.Rating, Title = apiMovie.Title, Year = apiMovie.Year }; FillQueueFromList(null, personService, apiMovie.Actors.Select(x => x.ActorName).ToList(), queue, 1); FillQueueFromList(null, personService, apiMovie.Directors.Select(x => x.Name).ToList(), queue, 1); FillQueueFromList(null, personService, apiMovie.Writers.Select(x => x.Name).ToList(), queue, 1); AddRelationshipsToQueue(new[] { apiMovie.IdIMDB }, apiMovie.Actors.Select(x => x.ActorName).ToList(), queue, RelationTypes.ActedIn); AddRelationshipsToQueue(new[] { apiMovie.IdIMDB }, apiMovie.Directors.Select(x => x.Name).ToList(), queue, RelationTypes.DirectorFor); AddRelationshipsToQueue(new[] { apiMovie.IdIMDB }, apiMovie.Writers.Select(x => x.Name).ToList(), queue, RelationTypes.WriterOf); var existingMovie = movieService.GetMovieByIdAsync(newMovie.Id).Result; if (existingMovie != null) { continue; } movieService.AddMovieAsync(newMovie).Wait(); } }
public async Task AddRelationToPerson(Movie existingMovie, Person existingPerson, string relationType) { var query = _db.Match($"(movie:Movie)", $"(person:Person)") .Where((Movie movie) => movie.Title == existingMovie.Title) .AndWhere((Person person) => person.Name == existingPerson.Name) .CreateUnique( $"person-[:{relationType}]->movie"); var q = query.Query; await query.ExecuteWithoutResultsAsync(); }
public async Task Add(Movie movie) { await _db.MovieCreate() .WithParam("newMovie", movie) .ExecuteWithoutResultsAsync(); }
public async Task AddMovieAsync(Movie movie) { ThrowIfMovieNull(movie); await _movieRepo.Add(movie); }
private static void MovieCollector(IMovieService movieService, IPersonService personService, MyApiFilmsClient client, ConcurrentQueue queue) { while (queue.IncompleteMoviesWaiting() || queue.IncompletePersonsWaiting()) { if (!queue.IncompleteMoviesWaiting()) continue; // ApiMovie is an alias for FilmIndustryNetwork.MyApiFilms.Entities.Movie // This is to distinguish between FilmIndustryNetwork.MyApiFilms.Entities.Movie // and FilmIndustryNetwork.Entities.Movie ApiMovie apiMovie; var title = queue.PopIncompleteMovie(); if (title == "---") continue; try { apiMovie = client.GetDataAsObject<MovieResponse>(title, DataSetType.Movie)?.Data?.Movies?.FirstOrDefault(); if (apiMovie == null) throw new Exception(); if (apiMovie.Type.Contains("TV")) continue; } catch (MyApiFilmsTimeoutException e) { // TODO: setup logging FillQueueFromList(movieService, null, new [] {title}, queue, 0); continue; } catch (NoMyApiFilmsResponseException e) { // TODO: setup logging continue; } catch (Exception) { // TODO: setup logging FillQueueFromList(movieService, null, new[] { title }, queue, 0); continue; } var newMovie = new Movie { Countries = apiMovie.Countries, FilmingLocations = apiMovie.FilmingLocations, Genres = apiMovie.Genres, Id = apiMovie.IdIMDB, Languages = apiMovie.Languages, Plot = apiMovie.Plot, NeedsApiLookup = false, Rated = apiMovie.Rated, Rating = apiMovie.Rating, Title = apiMovie.Title, Year = apiMovie.Year }; FillQueueFromList(null, personService, apiMovie.Actors.Select(x => x.ActorName).ToList(), queue, 1); FillQueueFromList(null, personService, apiMovie.Directors.Select(x => x.Name).ToList(), queue, 1); FillQueueFromList(null, personService, apiMovie.Writers.Select(x => x.Name).ToList(), queue, 1); AddRelationshipsToQueue(new[] {apiMovie.IdIMDB}, apiMovie.Actors.Select(x => x.ActorName).ToList(), queue, RelationTypes.ActedIn); AddRelationshipsToQueue(new[] {apiMovie.IdIMDB}, apiMovie.Directors.Select(x => x.Name).ToList(), queue, RelationTypes.DirectorFor); AddRelationshipsToQueue(new[] {apiMovie.IdIMDB}, apiMovie.Writers.Select(x => x.Name).ToList(), queue, RelationTypes.WriterOf); var existingMovie = movieService.GetMovieByIdAsync(newMovie.Id).Result; if (existingMovie != null) continue; movieService.AddMovieAsync(newMovie).Wait(); } }