From c2844bda3b7605257d7b2f8d146077cea6dd0b08 Mon Sep 17 00:00:00 2001 From: JPVenson <6794763+JPVenson@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:22:52 +0000 Subject: Added EF BaseItem migration --- .../AttachmentStreamInfoConfiguration.cs | 17 +++++++++++++++++ .../ModelConfiguration/BaseItemConfiguration.cs | 9 +++++---- .../ModelConfiguration/ChapterConfiguration.cs | 4 ++-- .../ModelConfiguration/ItemValuesConfiguration.cs | 3 +-- .../MediaStreamInfoConfiguration.cs | 22 ++++++++++++++++++++++ .../ModelConfiguration/PeopleConfiguration.cs | 2 +- .../ModelConfiguration/UserDataConfiguration.cs | 3 +-- 7 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 Jellyfin.Server.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs create mode 100644 Jellyfin.Server.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs (limited to 'Jellyfin.Server.Implementations/ModelConfiguration') diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs new file mode 100644 index 0000000000..057b6689ac --- /dev/null +++ b/Jellyfin.Server.Implementations/ModelConfiguration/AttachmentStreamInfoConfiguration.cs @@ -0,0 +1,17 @@ +using Jellyfin.Data.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Jellyfin.Server.Implementations.ModelConfiguration; + +/// +/// FluentAPI configuration for the AttachmentStreamInfo entity. +/// +public class AttachmentStreamInfoConfiguration : IEntityTypeConfiguration +{ + /// + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => new { e.ItemId, e.Index }); + } +} diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/BaseItemConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/BaseItemConfiguration.cs index 6f8adb44d9..d74b947840 100644 --- a/Jellyfin.Server.Implementations/ModelConfiguration/BaseItemConfiguration.cs +++ b/Jellyfin.Server.Implementations/ModelConfiguration/BaseItemConfiguration.cs @@ -2,6 +2,7 @@ using System; using Jellyfin.Data.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; +using SQLitePCL; namespace Jellyfin.Server.Implementations.ModelConfiguration; @@ -14,10 +15,10 @@ public class BaseItemConfiguration : IEntityTypeConfiguration public void Configure(EntityTypeBuilder builder) { builder.HasKey(e => e.Id); - builder.HasOne(e => e.Parent); - builder.HasOne(e => e.TopParent); - builder.HasOne(e => e.Season); - builder.HasOne(e => e.Series); + builder.HasOne(e => e.Parent).WithMany(e => e.DirectChildren).HasForeignKey(e => e.ParentId); + builder.HasOne(e => e.TopParent).WithMany(e => e.AllChildren).HasForeignKey(e => e.TopParentId); + builder.HasOne(e => e.Season).WithMany(e => e.SeasonEpisodes).HasForeignKey(e => e.SeasonId); + builder.HasOne(e => e.Series).WithMany(e => e.SeriesEpisodes).HasForeignKey(e => e.SeriesId); builder.HasMany(e => e.Peoples); builder.HasMany(e => e.UserData); builder.HasMany(e => e.ItemValues); diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/ChapterConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/ChapterConfiguration.cs index 464fbfb014..5a84f7750a 100644 --- a/Jellyfin.Server.Implementations/ModelConfiguration/ChapterConfiguration.cs +++ b/Jellyfin.Server.Implementations/ModelConfiguration/ChapterConfiguration.cs @@ -13,7 +13,7 @@ public class ChapterConfiguration : IEntityTypeConfiguration /// public void Configure(EntityTypeBuilder builder) { - builder.HasNoKey(); - builder.HasIndex(e => new { e.ItemId, e.ChapterIndex }); + builder.HasKey(e => new { e.ItemId, e.ChapterIndex }); + builder.HasOne(e => e.Item); } } diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/ItemValuesConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/ItemValuesConfiguration.cs index a7de6ec327..c39854f5ac 100644 --- a/Jellyfin.Server.Implementations/ModelConfiguration/ItemValuesConfiguration.cs +++ b/Jellyfin.Server.Implementations/ModelConfiguration/ItemValuesConfiguration.cs @@ -13,8 +13,7 @@ public class ItemValuesConfiguration : IEntityTypeConfiguration /// public void Configure(EntityTypeBuilder builder) { - builder.HasNoKey(); + builder.HasKey(e => new { e.ItemId, e.Type, e.Value }); builder.HasIndex(e => new { e.ItemId, e.Type, e.CleanValue }); - builder.HasIndex(e => new { e.ItemId, e.Type, e.Value }); } } diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs new file mode 100644 index 0000000000..7e572f9a39 --- /dev/null +++ b/Jellyfin.Server.Implementations/ModelConfiguration/MediaStreamInfoConfiguration.cs @@ -0,0 +1,22 @@ +using System; +using Jellyfin.Data.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Jellyfin.Server.Implementations.ModelConfiguration; + +/// +/// People configuration. +/// +public class MediaStreamInfoConfiguration : IEntityTypeConfiguration +{ + /// + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => new { e.ItemId, e.StreamIndex }); + builder.HasIndex(e => e.StreamIndex); + builder.HasIndex(e => e.StreamType); + builder.HasIndex(e => new { e.StreamIndex, e.StreamType }); + builder.HasIndex(e => new { e.StreamIndex, e.StreamType, e.Language }); + } +} diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/PeopleConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/PeopleConfiguration.cs index f6cd39c248..5f5b4dfc74 100644 --- a/Jellyfin.Server.Implementations/ModelConfiguration/PeopleConfiguration.cs +++ b/Jellyfin.Server.Implementations/ModelConfiguration/PeopleConfiguration.cs @@ -13,7 +13,7 @@ public class PeopleConfiguration : IEntityTypeConfiguration /// public void Configure(EntityTypeBuilder builder) { - builder.HasNoKey(); + builder.HasKey(e => new { e.ItemId, e.Role, e.ListOrder }); builder.HasIndex(e => new { e.ItemId, e.ListOrder }); builder.HasIndex(e => e.Name); } diff --git a/Jellyfin.Server.Implementations/ModelConfiguration/UserDataConfiguration.cs b/Jellyfin.Server.Implementations/ModelConfiguration/UserDataConfiguration.cs index 8e64844378..1113adb7bc 100644 --- a/Jellyfin.Server.Implementations/ModelConfiguration/UserDataConfiguration.cs +++ b/Jellyfin.Server.Implementations/ModelConfiguration/UserDataConfiguration.cs @@ -13,8 +13,7 @@ public class UserDataConfiguration : IEntityTypeConfiguration /// public void Configure(EntityTypeBuilder builder) { - builder.HasNoKey(); - builder.HasIndex(d => new { d.Key, d.UserId }).IsUnique(); + builder.HasKey(d => new { d.Key, d.UserId }); builder.HasIndex(d => new { d.Key, d.UserId, d.Played }); builder.HasIndex(d => new { d.Key, d.UserId, d.PlaybackPositionTicks }); builder.HasIndex(d => new { d.Key, d.UserId, d.IsFavorite }); -- cgit v1.2.3