From 4b56ec4114067e0409c38919fd082bea9a8fd875 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Tue, 16 Mar 2021 23:20:56 +0100 Subject: [PATCH] Fixing show's repository --- Kyoo.Common/Models/Link.cs | 13 ++++++- Kyoo.CommonAPI/LocalRepository.cs | 3 +- .../Repositories/ShowRepository.cs | 39 ++++++++++++------- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/Kyoo.Common/Models/Link.cs b/Kyoo.Common/Models/Link.cs index b78d3508..cacc7c64 100644 --- a/Kyoo.Common/Models/Link.cs +++ b/Kyoo.Common/Models/Link.cs @@ -28,6 +28,13 @@ namespace Kyoo.Models return new(first, second); } + public static Link UCreate(T first, T2 second) + where T : class, IResource + where T2 : class, IResource + { + return new(first, second, true); + } + public static Expression> PrimaryKey { get @@ -47,13 +54,15 @@ namespace Kyoo.Models public Link() {} - public Link(T1 first, T2 second) + public Link(T1 first, T2 second, bool privateItems = false) : base(first, second) { + if (privateItems) + return; First = first; Second = second; } - + public new static Expression, object>> PrimaryKey { get diff --git a/Kyoo.CommonAPI/LocalRepository.cs b/Kyoo.CommonAPI/LocalRepository.cs index 874272aa..660ef8af 100644 --- a/Kyoo.CommonAPI/LocalRepository.cs +++ b/Kyoo.CommonAPI/LocalRepository.cs @@ -167,9 +167,8 @@ namespace Kyoo.Controllers if (resetOld) Utility.Nullify(old); - await EditRelations(old, edited, resetOld); Utility.Complete(old, edited, x => x.GetCustomAttribute() == null); - await Validate(old); + await EditRelations(old, edited, resetOld); await Database.SaveChangesAsync(); return old; } diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index a820a02e..53b79936 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -100,32 +100,45 @@ namespace Kyoo.Controllers { await base.Validate(resource); resource.Studio = await _studios.CreateIfNotExists(resource.Studio, true); - resource.Genres = await resource.Genres - .SelectAsync(x => _genres.CreateIfNotExists(x, true)) + resource.GenreLinks = await resource.Genres + .SelectAsync(async x => Link.UCreate(resource, await _genres.CreateIfNotExists(x, true))) .ToListAsync(); - await resource.ExternalIDs.ForEachAsync(async id => - id.Provider = await _providers.CreateIfNotExists(id.Provider, true)); + await resource.ExternalIDs.ForEachAsync(async id => + { + id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID; + id.Provider = null; + }); await resource.People.ForEachAsync(async role => - role.People = await _people.CreateIfNotExists(role.People, true)); + { + role.PeopleID = (await _people.CreateIfNotExists(role.People, true)).ID; + role.People = null; + }); } protected override async Task EditRelations(Show resource, Show changed, bool resetOld) { + await Validate(changed); + if (changed.Aliases != null || resetOld) resource.Aliases = changed.Aliases; - + if (changed.Genres != null || resetOld) - await Database.Entry(resource).Collection(x => x.Genres).LoadAsync(); - resource.Genres = changed.Genres; - + { + await Database.Entry(resource).Collection(x => x.GenreLinks).LoadAsync(); + resource.GenreLinks = changed.GenreLinks; + } + if (changed.People != null || resetOld) + { await Database.Entry(resource).Collection(x => x.People).LoadAsync(); - resource.People = changed.People; - + resource.People = changed.People; + } + if (changed.ExternalIDs != null || resetOld) + { await Database.Entry(resource).Collection(x => x.ExternalIDs).LoadAsync(); - resource.ExternalIDs = changed.ExternalIDs; - await base.EditRelations(resource, changed, resetOld); + resource.ExternalIDs = changed.ExternalIDs; + } } public async Task AddShowLink(int showID, int? libraryID, int? collectionID)