mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04: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