Browse Source

Add indexes for user permissions and preferences

Patrick Barron 4 years ago
parent
commit
3c4187e780
1 changed files with 14 additions and 0 deletions
  1. 14 0
      Jellyfin.Server.Implementations/JellyfinDb.cs

+ 14 - 0
Jellyfin.Server.Implementations/JellyfinDb.cs

@@ -174,6 +174,7 @@ namespace Jellyfin.Server.Implementations
                 .WithOne()
                 .OnDelete(DeleteBehavior.Cascade);
 
+
             modelBuilder.Entity<DisplayPreferences>()
                 .HasIndex(entity => new { entity.UserId, entity.ItemId, entity.Client })
                 .IsUnique();
@@ -181,6 +182,19 @@ namespace Jellyfin.Server.Implementations
             modelBuilder.Entity<CustomItemDisplayPreferences>()
                 .HasIndex(entity => new { entity.UserId, entity.ItemId, entity.Client, entity.Key })
                 .IsUnique();
+
+            // Used to get a user's permissions or a specific permission for a user.
+            // Also prevents multiple values being created for a user.
+            // Filtered over non-null user ids for when other entities (groups, API keys) get permissions
+            modelBuilder.Entity<Permission>()
+                .HasIndex(p => new { p.UserId, p.Kind })
+                .HasFilter("[UserId] IS NOT NULL")
+                .IsUnique();
+
+            modelBuilder.Entity<Preference>()
+                .HasIndex(p => new { p.UserId, p.Kind })
+                .HasFilter("[UserId] IS NOT NULL")
+                .IsUnique();
         }
     }
 }