mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-11-03 19:17:16 -05:00 
			
		
		
		
	Handling related entities for seasons, shows & studios
This commit is contained in:
		
							parent
							
								
									04fae1fc65
								
							
						
					
					
						commit
						48fc4fd249
					
				@ -12,12 +12,14 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		private readonly DatabaseContext _database;
 | 
							private readonly DatabaseContext _database;
 | 
				
			||||||
		private readonly IProviderRepository _providers;
 | 
							private readonly IProviderRepository _providers;
 | 
				
			||||||
 | 
							private readonly IEpisodeRepository _episodes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public SeasonRepository(DatabaseContext database, IProviderRepository providers)
 | 
							public SeasonRepository(DatabaseContext database, IProviderRepository providers, IEpisodeRepository episodes)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			_database = database;
 | 
								_database = database;
 | 
				
			||||||
			_providers = providers;
 | 
								_providers = providers;
 | 
				
			||||||
 | 
								_episodes = episodes;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		public void Dispose()
 | 
							public void Dispose()
 | 
				
			||||||
@ -151,6 +153,9 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
			if (obj.ExternalIDs != null)
 | 
								if (obj.ExternalIDs != null)
 | 
				
			||||||
				foreach (MetadataID entry in obj.ExternalIDs)
 | 
									foreach (MetadataID entry in obj.ExternalIDs)
 | 
				
			||||||
					_database.Entry(entry).State = EntityState.Deleted;
 | 
										_database.Entry(entry).State = EntityState.Deleted;
 | 
				
			||||||
 | 
								if (obj.Episodes != null)
 | 
				
			||||||
 | 
									foreach (Episode episode in obj.Episodes)
 | 
				
			||||||
 | 
										await _episodes.Delete(episode);
 | 
				
			||||||
			await _database.SaveChangesAsync();
 | 
								await _database.SaveChangesAsync();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
				
			|||||||
@ -15,18 +15,24 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
		private readonly IPeopleRepository _people;
 | 
							private readonly IPeopleRepository _people;
 | 
				
			||||||
		private readonly IGenreRepository _genres;
 | 
							private readonly IGenreRepository _genres;
 | 
				
			||||||
		private readonly IProviderRepository _providers;
 | 
							private readonly IProviderRepository _providers;
 | 
				
			||||||
 | 
							private readonly ISeasonRepository _seasons;
 | 
				
			||||||
 | 
							private readonly IEpisodeRepository _episodes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public ShowRepository(DatabaseContext database,
 | 
							public ShowRepository(DatabaseContext database,
 | 
				
			||||||
			IStudioRepository studios,
 | 
								IStudioRepository studios,
 | 
				
			||||||
			IPeopleRepository people, 
 | 
								IPeopleRepository people, 
 | 
				
			||||||
			IGenreRepository genres, 
 | 
								IGenreRepository genres, 
 | 
				
			||||||
			IProviderRepository providers)
 | 
								IProviderRepository providers, 
 | 
				
			||||||
 | 
								ISeasonRepository seasons, 
 | 
				
			||||||
 | 
								IEpisodeRepository episodes)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			_database = database;
 | 
								_database = database;
 | 
				
			||||||
			_studios = studios;
 | 
								_studios = studios;
 | 
				
			||||||
			_people = people;
 | 
								_people = people;
 | 
				
			||||||
			_genres = genres;
 | 
								_genres = genres;
 | 
				
			||||||
			_providers = providers;
 | 
								_providers = providers;
 | 
				
			||||||
 | 
								_seasons = seasons;
 | 
				
			||||||
 | 
								_episodes = episodes;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		public void Dispose()
 | 
							public void Dispose()
 | 
				
			||||||
@ -40,19 +46,19 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
			await Task.WhenAll(_database.DisposeAsync().AsTask(), _studios.DisposeAsync().AsTask());
 | 
								await Task.WhenAll(_database.DisposeAsync().AsTask(), _studios.DisposeAsync().AsTask());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		public async Task<Show> Get(int id)
 | 
							public Task<Show> Get(int id)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return await _database.Shows.FirstOrDefaultAsync(x => x.ID == id);
 | 
								return _database.Shows.FirstOrDefaultAsync(x => x.ID == id);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		public async Task<Show> Get(string slug)
 | 
							public Task<Show> Get(string slug)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return await _database.Shows.FirstOrDefaultAsync(x => x.Slug == slug);
 | 
								return _database.Shows.FirstOrDefaultAsync(x => x.Slug == slug);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public async Task<Show> GetByPath(string path)
 | 
							public Task<Show> GetByPath(string path)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return await _database.Shows.FirstOrDefaultAsync(x => x.Path == path);
 | 
								return _database.Shows.FirstOrDefaultAsync(x => x.Path == path);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public async Task<ICollection<Show>> Search(string query)
 | 
							public async Task<ICollection<Show>> Search(string query)
 | 
				
			||||||
@ -145,22 +151,16 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
				obj.StudioID = await _studios.CreateIfNotExists(obj.Studio);
 | 
									obj.StudioID = await _studios.CreateIfNotExists(obj.Studio);
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			if (obj.GenreLinks != null)
 | 
								if (obj.GenreLinks != null)
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				foreach (GenreLink link in obj.GenreLinks)
 | 
									foreach (GenreLink link in obj.GenreLinks)
 | 
				
			||||||
					link.GenreID = await _genres.CreateIfNotExists(link.Genre);
 | 
										link.GenreID = await _genres.CreateIfNotExists(link.Genre);
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (obj.People != null)
 | 
								if (obj.People != null)
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				foreach (PeopleLink link in obj.People)
 | 
									foreach (PeopleLink link in obj.People)
 | 
				
			||||||
					link.PeopleID = await _people.CreateIfNotExists(link.People);
 | 
										link.PeopleID = await _people.CreateIfNotExists(link.People);
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (obj.ExternalIDs != null)
 | 
								if (obj.ExternalIDs != null)
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				foreach (MetadataID link in obj.ExternalIDs)
 | 
									foreach (MetadataID link in obj.ExternalIDs)
 | 
				
			||||||
					link.ProviderID = await _providers.CreateIfNotExists(link.Provider);
 | 
										link.ProviderID = await _providers.CreateIfNotExists(link.Provider);
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public async Task Delete(Show obj)
 | 
							public async Task Delete(Show obj)
 | 
				
			||||||
@ -184,6 +184,13 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
			if (obj.LibraryLinks != null)
 | 
								if (obj.LibraryLinks != null)
 | 
				
			||||||
				foreach (LibraryLink entry in obj.LibraryLinks)
 | 
									foreach (LibraryLink entry in obj.LibraryLinks)
 | 
				
			||||||
					_database.Entry(entry).State = EntityState.Deleted;
 | 
										_database.Entry(entry).State = EntityState.Deleted;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (obj.Seasons != null)
 | 
				
			||||||
 | 
									foreach (Season season in obj.Seasons)
 | 
				
			||||||
 | 
										await _seasons.Delete(season);
 | 
				
			||||||
 | 
								if (obj.Episodes != null)
 | 
				
			||||||
 | 
									foreach (Episode episode in obj.Episodes.Where(x => x.SeasonID == null))
 | 
				
			||||||
 | 
										await _episodes.Delete(episode);
 | 
				
			||||||
			await _database.SaveChangesAsync();
 | 
								await _database.SaveChangesAsync();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
				
			|||||||
@ -115,6 +115,10 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
				throw new ArgumentNullException(nameof(obj));
 | 
									throw new ArgumentNullException(nameof(obj));
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			_database.Entry(obj).State = EntityState.Deleted;
 | 
								_database.Entry(obj).State = EntityState.Deleted;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// Using Dotnet-EF change discovery service to remove references to this studio on shows.
 | 
				
			||||||
 | 
								foreach (Show show in obj.Shows)
 | 
				
			||||||
 | 
									show.StudioID = null;
 | 
				
			||||||
			await _database.SaveChangesAsync();
 | 
								await _database.SaveChangesAsync();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user