diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index e1587908..e4c64b04 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -15,7 +15,7 @@ namespace Kyoo.Controllers Task Create([NotNull] T obj); Task CreateIfNotExists([NotNull] T obj); Task Edit([NotNull] T edited, bool resetOld); - Task Delete(T obj); + Task Delete([NotNull] T obj); } public interface IShowRepository : IRepository diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index a79ef71e..513bca0f 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -41,6 +41,22 @@ namespace Kyoo.Models [JsonIgnore] public virtual IEnumerable People { get; set; } [JsonIgnore] public virtual IEnumerable Seasons { get; set; } [JsonIgnore] public virtual IEnumerable Episodes { get; set; } + + [NotMergable] [JsonIgnore] public virtual IEnumerable LibraryLinks { get; set; } + + [NotMergable] [JsonIgnore] public IEnumerable Libraries + { + get => LibraryLinks?.Select(x => x.Library); + set => LibraryLinks = value?.Select(x => new LibraryLink(x, this)); + } + + [NotMergable] [JsonIgnore] public IEnumerable CollectionLinks { get; set; } + + [NotMergable] [JsonIgnore] public IEnumerable Collections + { + get => CollectionLinks.Select(x => x.Collection); + set => CollectionLinks = value?.Select(x => new CollectionLink(x, this)); + } public Show() { } diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index 4c698bbc..94a8c9b4 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -155,6 +155,12 @@ namespace Kyoo.Controllers public async Task Delete(Episode obj) { + if (obj.ExternalIDs != null) + foreach (MetadataID entry in obj.ExternalIDs) + _database.Entry(entry).State = EntityState.Deleted; + if (obj.Tracks != null) + foreach (Track entry in obj.Tracks) + _database.Entry(entry).State = EntityState.Deleted; _database.Episodes.Remove(obj); await _database.SaveChangesAsync(); } diff --git a/Kyoo/Controllers/Repositories/GenreRepository.cs b/Kyoo/Controllers/Repositories/GenreRepository.cs index a49249a8..91a4a295 100644 --- a/Kyoo/Controllers/Repositories/GenreRepository.cs +++ b/Kyoo/Controllers/Repositories/GenreRepository.cs @@ -56,7 +56,7 @@ namespace Kyoo.Controllers if (obj == null) throw new ArgumentNullException(nameof(obj)); - await _database.Genres.AddAsync(obj); + _database.Entry(obj).State = EntityState.Added; try { diff --git a/Kyoo/Controllers/Repositories/LibraryRepository.cs b/Kyoo/Controllers/Repositories/LibraryRepository.cs index 133b47fe..4f8a235b 100644 --- a/Kyoo/Controllers/Repositories/LibraryRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryRepository.cs @@ -126,7 +126,12 @@ namespace Kyoo.Controllers public async Task Delete(Library obj) { - _database.Libraries.Remove(obj); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; + if (obj.ProviderLinks != null) + foreach (ProviderLink entry in obj.ProviderLinks) + _database.Entry(entry).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } diff --git a/Kyoo/Controllers/Repositories/PeopleRepository.cs b/Kyoo/Controllers/Repositories/PeopleRepository.cs index a1689f25..3cd013f5 100644 --- a/Kyoo/Controllers/Repositories/PeopleRepository.cs +++ b/Kyoo/Controllers/Repositories/PeopleRepository.cs @@ -125,7 +125,12 @@ namespace Kyoo.Controllers public async Task Delete(People obj) { - _database.Peoples.Remove(obj); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; + if (obj.ExternalIDs != null) + foreach (MetadataID entry in obj.ExternalIDs) + _database.Entry(entry).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } diff --git a/Kyoo/Controllers/Repositories/ProviderRepository.cs b/Kyoo/Controllers/Repositories/ProviderRepository.cs index ab1abee9..51bb38fb 100644 --- a/Kyoo/Controllers/Repositories/ProviderRepository.cs +++ b/Kyoo/Controllers/Repositories/ProviderRepository.cs @@ -112,7 +112,9 @@ namespace Kyoo.Controllers public async Task Delete(ProviderID obj) { - _database.Providers.Remove(obj); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index da117095..33d1dd3b 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -144,7 +144,12 @@ namespace Kyoo.Controllers public async Task Delete(Season obj) { - _database.Seasons.Remove(obj); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; + if (obj.ExternalIDs != null) + foreach (MetadataID entry in obj.ExternalIDs) + _database.Entry(entry).State = EntityState.Deleted; await _database.SaveChangesAsync(); } diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index 7783cb82..4018d2e8 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -163,9 +163,26 @@ namespace Kyoo.Controllers } } - public async Task Delete(Show show) + public async Task Delete(Show obj) { - _database.Shows.Remove(show); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; + if (obj.GenreLinks != null) + foreach (GenreLink entry in obj.GenreLinks) + _database.Entry(entry).State = EntityState.Deleted; + if (obj.People != null) + foreach (PeopleLink entry in obj.People) + _database.Entry(entry).State = EntityState.Deleted; + if (obj.ExternalIDs != null) + foreach (MetadataID entry in obj.ExternalIDs) + _database.Entry(entry).State = EntityState.Deleted; + if (obj.CollectionLinks != null) + foreach (CollectionLink entry in obj.CollectionLinks) + _database.Entry(entry).State = EntityState.Deleted; + if (obj.LibraryLinks != null) + foreach (LibraryLink entry in obj.LibraryLinks) + _database.Entry(entry).State = EntityState.Deleted; await _database.SaveChangesAsync(); } diff --git a/Kyoo/Controllers/Repositories/StudioRepository.cs b/Kyoo/Controllers/Repositories/StudioRepository.cs index 8e7c3a02..4ca73397 100644 --- a/Kyoo/Controllers/Repositories/StudioRepository.cs +++ b/Kyoo/Controllers/Repositories/StudioRepository.cs @@ -111,7 +111,9 @@ namespace Kyoo.Controllers public async Task Delete(Studio obj) { - _database.Studios.Remove(obj); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } diff --git a/Kyoo/Controllers/Repositories/TrackRepository.cs b/Kyoo/Controllers/Repositories/TrackRepository.cs index 711ca9f7..d44cc45d 100644 --- a/Kyoo/Controllers/Repositories/TrackRepository.cs +++ b/Kyoo/Controllers/Repositories/TrackRepository.cs @@ -101,7 +101,9 @@ namespace Kyoo.Controllers public async Task Delete(Track obj) { - _database.Tracks.Remove(obj); + if (obj == null) + throw new ArgumentNullException(nameof(obj)); + _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } diff --git a/Kyoo/Models/DatabaseContext.cs b/Kyoo/Models/DatabaseContext.cs index 86e3aea1..0c77f0eb 100644 --- a/Kyoo/Models/DatabaseContext.cs +++ b/Kyoo/Models/DatabaseContext.cs @@ -116,7 +116,9 @@ namespace Kyoo .Ignore(x => x.Shows); modelBuilder.Entity() - .Ignore(x => x.Genres); + .Ignore(x => x.Genres) + .Ignore(x => x.Libraries) + .Ignore(x => x.Collections); modelBuilder.Entity() .Ignore(x => x.Slug)