diff --git a/Kyoo.CommonAPI/LocalRepository.cs b/Kyoo.CommonAPI/LocalRepository.cs index f614ede5..1a2f29ea 100644 --- a/Kyoo.CommonAPI/LocalRepository.cs +++ b/Kyoo.CommonAPI/LocalRepository.cs @@ -181,7 +181,7 @@ namespace Kyoo.Controllers } } - protected virtual Task EditRelations(T resource, T newValues) + protected virtual Task EditRelations(T resource, T changed) { return Validate(resource); } diff --git a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs index 4d49a6f5..701c32ff 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 EditRelations(LibraryItem _, LibraryItem _2) => throw new InvalidOperationException(); + protected override Task EditRelations(LibraryItem _, LibraryItem changed) => 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/PeopleRepository.cs b/Kyoo/Controllers/Repositories/PeopleRepository.cs index d5b15fea..3d462f87 100644 --- a/Kyoo/Controllers/Repositories/PeopleRepository.cs +++ b/Kyoo/Controllers/Repositories/PeopleRepository.cs @@ -71,25 +71,27 @@ namespace Kyoo.Controllers protected override async Task Validate(People resource) { await base.Validate(resource); - - if (resource.ExternalIDs != null) - foreach (MetadataID link in resource.ExternalIDs) - if (ShouldValidate(link)) - link.Provider = await _providers.CreateIfNotExists(link.Provider, true); + await resource.ExternalIDs.ForEachAsync(async id => + id.Provider = await _providers.CreateIfNotExists(id.Provider, true)); + await resource.Roles.ForEachAsync(async role => + role.Show = await _shows.Value.CreateIfNotExists(role.Show, true)); } - + + protected override async Task EditRelations(People resource, People changed) + { + await base.EditRelations(resource, changed); + resource.Roles = changed.Roles; + resource.ExternalIDs = changed.ExternalIDs; + } + public override async Task Delete(People 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; - if (obj.Roles != null) - foreach (PeopleRole link in obj.Roles) - _database.Entry(link).State = EntityState.Deleted; + obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Deleted); + obj.Roles.ForEach(x => _database.Entry(x).State = EntityState.Deleted); await _database.SaveChangesAsync(); }