From 28bb719b06569e99aa5c625fbad71e29393e6c2b Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Tue, 16 Mar 2021 09:49:48 +0100 Subject: [PATCH] Fixing episode & library's repository --- Kyoo.CommonAPI/LocalRepository.cs | 3 ++- .../Repositories/EpisodeRepository.cs | 21 +++++++++---------- .../Repositories/LibraryItemRepository.cs | 2 +- .../Repositories/LibraryRepository.cs | 17 ++++++++------- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Kyoo.CommonAPI/LocalRepository.cs b/Kyoo.CommonAPI/LocalRepository.cs index b35bb041..f614ede5 100644 --- a/Kyoo.CommonAPI/LocalRepository.cs +++ b/Kyoo.CommonAPI/LocalRepository.cs @@ -171,6 +171,7 @@ namespace Kyoo.Controllers if (resetOld) Utility.Nullify(old); Utility.Complete(old, edited, x => x.GetCustomAttribute() != null); + await Validate(old); await Database.SaveChangesAsync(); return old; } @@ -185,7 +186,7 @@ namespace Kyoo.Controllers return Validate(resource); } - private Task Validate(T resource) + protected virtual Task Validate(T resource) { if (string.IsNullOrEmpty(resource.Slug)) throw new ArgumentException("Resource can't have null as a slug."); diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index 9a25a2b1..27cd155a 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -1,5 +1,4 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -179,13 +178,15 @@ namespace Kyoo.Controllers .ToListAsync(); foreach (Track x in oldTracks) await _tracks.Delete(x); + + resource.ExternalIDs = changed.ExternalIDs; + } - if (resource.ExternalIDs != null) - { - foreach (MetadataID link in resource.ExternalIDs) - if (ShouldValidate(link)) - link.Provider = await _providers.CreateIfNotExists(link.Provider, true); - } + protected override async Task Validate(Episode resource) + { + await base.Validate(resource); + await resource.ExternalIDs.ForEachAsync(async id => + id.Provider = await _providers.CreateIfNotExists(id.Provider, true)); } public async Task Delete(string showSlug, int seasonNumber, int episodeNumber) @@ -200,10 +201,8 @@ namespace Kyoo.Controllers throw new ArgumentNullException(nameof(obj)); _database.Entry(obj).State = EntityState.Deleted; - // await obj.Tracks.ForEachAsync(x => _tracks.CreateIfNotExists(x, true)); - if (obj.ExternalIDs != null) - foreach (MetadataID entry in obj.ExternalIDs) - _database.Entry(entry).State = EntityState.Deleted; + await obj.Tracks.ForEachAsync(x => _tracks.Delete(x)); + obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Deleted); await _database.SaveChangesAsync(); } } diff --git a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs index 20f7139f..4d49a6f5 100644 --- a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs @@ -110,7 +110,7 @@ namespace Kyoo.Controllers throw new InvalidOperationException(); } public override Task Edit(LibraryItem obj, bool reset) => throw new InvalidOperationException(); - protected override Task Validate(LibraryItem resource) => throw new InvalidOperationException(); + protected override Task EditRelations(LibraryItem _, LibraryItem _2) => throw new InvalidOperationException(); public override Task Delete(int id) => throw new InvalidOperationException(); public override Task Delete(string slug) => throw new InvalidOperationException(); public override Task Delete(LibraryItem obj) => throw new InvalidOperationException(); diff --git a/Kyoo/Controllers/Repositories/LibraryRepository.cs b/Kyoo/Controllers/Repositories/LibraryRepository.cs index 9278c563..93996a82 100644 --- a/Kyoo/Controllers/Repositories/LibraryRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryRepository.cs @@ -62,6 +62,14 @@ namespace Kyoo.Controllers } protected override async Task Validate(Library resource) + { + await base.Validate(resource); + resource.Providers = await resource.Providers + .SelectAsync(x => _providers.CreateIfNotExists(x, true)) + .ToListAsync(); + } + + protected override Task EditRelations(Library resource, Library changed) { if (string.IsNullOrEmpty(resource.Slug)) throw new ArgumentException("The library's slug must be set and not empty"); @@ -70,14 +78,7 @@ namespace Kyoo.Controllers if (resource.Paths == null || !resource.Paths.Any()) throw new ArgumentException("The library should have a least one path."); - await base.Validate(resource); - - if (resource.Providers != null) - { - resource.Providers = await resource.Providers - .SelectAsync(x => _providers.CreateIfNotExists(x, true)) - .ToListAsync(); - } + return base.EditRelations(resource, changed); } public override async Task Delete(Library obj)