From 8af2cff1a2a8368e539d6cbe1b82384e840a081f Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 3 Aug 2020 06:01:38 +0200 Subject: [PATCH] Fixing library links duplicates --- Kyoo/Controllers/Repositories/ShowRepository.cs | 3 +++ Kyoo/Models/DatabaseContext.cs | 17 ++++++++++++++++- ...er.cs => 20200803040029_Initial.Designer.cs} | 7 +++++-- ...331_Initial.cs => 20200803040029_Initial.cs} | 10 ++++++++-- .../Internal/DatabaseContextModelSnapshot.cs | 5 ++++- 5 files changed, 36 insertions(+), 6 deletions(-) rename Kyoo/Models/DatabaseMigrations/Internal/{20200803005331_Initial.Designer.cs => 20200803040029_Initial.Designer.cs} (99%) rename Kyoo/Models/DatabaseMigrations/Internal/{20200803005331_Initial.cs => 20200803040029_Initial.cs} (98%) diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index 1f02fb50..77b18b56 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -129,15 +129,18 @@ namespace Kyoo.Controllers if (collectionID != null) { await _database.CollectionLinks.AddAsync(new CollectionLink {CollectionID = collectionID, ShowID = showID}); + await _database.SaveIfNoDuplicates(); } if (libraryID != null) { await _database.LibraryLinks.AddAsync(new LibraryLink {LibraryID = libraryID.Value, ShowID = showID}); + await _database.SaveIfNoDuplicates(); } if (libraryID != null && collectionID != null) { await _database.LibraryLinks.AddAsync(new LibraryLink {LibraryID = libraryID.Value, CollectionID = collectionID.Value}); + await _database.SaveIfNoDuplicates(); } } diff --git a/Kyoo/Models/DatabaseContext.cs b/Kyoo/Models/DatabaseContext.cs index 3de20d02..f6157af7 100644 --- a/Kyoo/Models/DatabaseContext.cs +++ b/Kyoo/Models/DatabaseContext.cs @@ -179,7 +179,10 @@ namespace Kyoo .HasIndex(x => new {x.ShowID, x.SeasonNumber, x.EpisodeNumber, x.AbsoluteNumber}) .IsUnique(); modelBuilder.Entity() - .HasIndex(x => new {x.LibraryID, x.ShowID, x.CollectionID}) + .HasIndex(x => new {x.LibraryID, x.ShowID}) + .IsUnique(); + modelBuilder.Entity() + .HasIndex(x => new {x.LibraryID, x.CollectionID}) .IsUnique(); modelBuilder.Entity() .HasIndex(x => new {x.CollectionID, x.ShowID}) @@ -278,6 +281,18 @@ namespace Kyoo } } + public async Task SaveIfNoDuplicates(CancellationToken cancellationToken = new CancellationToken()) + { + try + { + return await SaveChangesAsync(cancellationToken); + } + catch (DuplicatedItemException) + { + return -1; + } + } + public static bool IsDuplicateException(DbUpdateException ex) { return ex.InnerException is PostgresException inner diff --git a/Kyoo/Models/DatabaseMigrations/Internal/20200803005331_Initial.Designer.cs b/Kyoo/Models/DatabaseMigrations/Internal/20200803040029_Initial.Designer.cs similarity index 99% rename from Kyoo/Models/DatabaseMigrations/Internal/20200803005331_Initial.Designer.cs rename to Kyoo/Models/DatabaseMigrations/Internal/20200803040029_Initial.Designer.cs index 7cea0f70..825758b2 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/20200803005331_Initial.Designer.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/20200803040029_Initial.Designer.cs @@ -10,7 +10,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Kyoo.Models.DatabaseMigrations.Internal { [DbContext(typeof(DatabaseContext))] - [Migration("20200803005331_Initial")] + [Migration("20200803040029_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -203,7 +203,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.HasIndex("ShowID"); - b.HasIndex("LibraryID", "ShowID", "CollectionID") + b.HasIndex("LibraryID", "CollectionID") + .IsUnique(); + + b.HasIndex("LibraryID", "ShowID") .IsUnique(); b.ToTable("LibraryLinks"); diff --git a/Kyoo/Models/DatabaseMigrations/Internal/20200803005331_Initial.cs b/Kyoo/Models/DatabaseMigrations/Internal/20200803040029_Initial.cs similarity index 98% rename from Kyoo/Models/DatabaseMigrations/Internal/20200803005331_Initial.cs rename to Kyoo/Models/DatabaseMigrations/Internal/20200803040029_Initial.cs index 77171a55..c42433a5 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/20200803005331_Initial.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/20200803040029_Initial.cs @@ -457,9 +457,15 @@ namespace Kyoo.Models.DatabaseMigrations.Internal column: "ShowID"); migrationBuilder.CreateIndex( - name: "IX_LibraryLinks_LibraryID_ShowID_CollectionID", + name: "IX_LibraryLinks_LibraryID_CollectionID", table: "LibraryLinks", - columns: new[] { "LibraryID", "ShowID", "CollectionID" }, + columns: new[] { "LibraryID", "CollectionID" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_LibraryLinks_LibraryID_ShowID", + table: "LibraryLinks", + columns: new[] { "LibraryID", "ShowID" }, unique: true); migrationBuilder.CreateIndex( diff --git a/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs b/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs index 1515ac3f..762ea73d 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs @@ -201,7 +201,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.HasIndex("ShowID"); - b.HasIndex("LibraryID", "ShowID", "CollectionID") + b.HasIndex("LibraryID", "CollectionID") + .IsUnique(); + + b.HasIndex("LibraryID", "ShowID") .IsUnique(); b.ToTable("LibraryLinks");