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 IProviderRepository _providers;
 | 
			
		||||
		private readonly IEpisodeRepository _episodes;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		public SeasonRepository(DatabaseContext database, IProviderRepository providers)
 | 
			
		||||
		public SeasonRepository(DatabaseContext database, IProviderRepository providers, IEpisodeRepository episodes)
 | 
			
		||||
		{
 | 
			
		||||
			_database = database;
 | 
			
		||||
			_providers = providers;
 | 
			
		||||
			_episodes = episodes;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public void Dispose()
 | 
			
		||||
@ -151,6 +153,9 @@ namespace Kyoo.Controllers
 | 
			
		||||
			if (obj.ExternalIDs != null)
 | 
			
		||||
				foreach (MetadataID entry in obj.ExternalIDs)
 | 
			
		||||
					_database.Entry(entry).State = EntityState.Deleted;
 | 
			
		||||
			if (obj.Episodes != null)
 | 
			
		||||
				foreach (Episode episode in obj.Episodes)
 | 
			
		||||
					await _episodes.Delete(episode);
 | 
			
		||||
			await _database.SaveChangesAsync();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
@ -15,18 +15,24 @@ namespace Kyoo.Controllers
 | 
			
		||||
		private readonly IPeopleRepository _people;
 | 
			
		||||
		private readonly IGenreRepository _genres;
 | 
			
		||||
		private readonly IProviderRepository _providers;
 | 
			
		||||
		private readonly ISeasonRepository _seasons;
 | 
			
		||||
		private readonly IEpisodeRepository _episodes;
 | 
			
		||||
 | 
			
		||||
		public ShowRepository(DatabaseContext database,
 | 
			
		||||
			IStudioRepository studios,
 | 
			
		||||
			IPeopleRepository people, 
 | 
			
		||||
			IGenreRepository genres, 
 | 
			
		||||
			IProviderRepository providers)
 | 
			
		||||
			IProviderRepository providers, 
 | 
			
		||||
			ISeasonRepository seasons, 
 | 
			
		||||
			IEpisodeRepository episodes)
 | 
			
		||||
		{
 | 
			
		||||
			_database = database;
 | 
			
		||||
			_studios = studios;
 | 
			
		||||
			_people = people;
 | 
			
		||||
			_genres = genres;
 | 
			
		||||
			_providers = providers;
 | 
			
		||||
			_seasons = seasons;
 | 
			
		||||
			_episodes = episodes;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public void Dispose()
 | 
			
		||||
@ -40,19 +46,19 @@ namespace Kyoo.Controllers
 | 
			
		||||
			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)
 | 
			
		||||
@ -145,22 +151,16 @@ namespace Kyoo.Controllers
 | 
			
		||||
				obj.StudioID = await _studios.CreateIfNotExists(obj.Studio);
 | 
			
		||||
			
 | 
			
		||||
			if (obj.GenreLinks != null)
 | 
			
		||||
			{
 | 
			
		||||
				foreach (GenreLink link in obj.GenreLinks)
 | 
			
		||||
					link.GenreID = await _genres.CreateIfNotExists(link.Genre);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (obj.People != null)
 | 
			
		||||
			{
 | 
			
		||||
				foreach (PeopleLink link in obj.People)
 | 
			
		||||
					link.PeopleID = await _people.CreateIfNotExists(link.People);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (obj.ExternalIDs != null)
 | 
			
		||||
			{
 | 
			
		||||
				foreach (MetadataID link in obj.ExternalIDs)
 | 
			
		||||
					link.ProviderID = await _providers.CreateIfNotExists(link.Provider);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public async Task Delete(Show obj)
 | 
			
		||||
@ -184,6 +184,13 @@ namespace Kyoo.Controllers
 | 
			
		||||
			if (obj.LibraryLinks != null)
 | 
			
		||||
				foreach (LibraryLink entry in obj.LibraryLinks)
 | 
			
		||||
					_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();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
@ -115,6 +115,10 @@ namespace Kyoo.Controllers
 | 
			
		||||
				throw new ArgumentNullException(nameof(obj));
 | 
			
		||||
			
 | 
			
		||||
			_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();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user