Browse Source

Fixed Migrations

JPVenson 8 months ago
parent
commit
d4ca8d58c4

+ 0 - 1582
Jellyfin.Server.Implementations/Migrations/20241010160703_LibraryDbMigration.Designer.cs

@@ -1,1582 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
-    [DbContext(typeof(JellyfinDbContext))]
-    [Migration("20241010160703_LibraryDbMigration")]
-    partial class LibraryDbMigration
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DayOfWeek")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<double>("EndHour")
-                        .HasColumnType("REAL");
-
-                    b.Property<double>("StartHour")
-                        .HasColumnType("REAL");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AccessSchedules");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ItemId")
-                        .HasMaxLength(256)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("LogSeverity")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Overview")
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ShortOverview")
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Type")
-                        .IsRequired()
-                        .HasMaxLength(256)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DateCreated");
-
-                    b.ToTable("ActivityLogs");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("ParentItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("BaseItemEntityId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemId", "ParentItemId");
-
-                    b.HasIndex("BaseItemEntityId");
-
-                    b.HasIndex("ParentItemId");
-
-                    b.ToTable("AncestorIds");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Index")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Codec")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CodecTag")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Comment")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Filename")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("MimeType")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemId", "Index");
-
-                    b.ToTable("AttachmentStreamInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Album")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AlbumArtists")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Artists")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("Audio")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ChannelId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CleanName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float?>("CommunityRating")
-                        .HasColumnType("REAL");
-
-                    b.Property<float?>("CriticRating")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("CustomRating")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Data")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateLastMediaAdded")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateLastRefreshed")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateLastSaved")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("EndDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("EpisodeTitle")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExternalId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExternalSeriesId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExternalServiceId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExtraIds")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ExtraType")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ForcedSortName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Genres")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("IndexNumber")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("InheritedParentalRatingValue")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsFolder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsInMixedFolder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsLocked")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsMovie")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsRepeat")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsSeries")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsVirtualItem")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<float?>("LUFS")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("MediaType")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float?>("NormalizationGain")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("OfficialRating")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("OriginalTitle")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Overview")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("OwnerId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("ParentId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ParentIndexNumber")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Path")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PreferredMetadataCountryCode")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PreferredMetadataLanguage")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("PremiereDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PresentationUniqueKey")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PrimaryVersionId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ProductionLocations")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ProductionYear")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<long?>("RunTimeTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("SeasonId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SeasonName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("SeriesId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SeriesName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SeriesPresentationUniqueKey")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ShowId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<long?>("Size")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("SortName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("StartDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Studios")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Tagline")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Tags")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("TopParentId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("TotalBitrate")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Type")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("UnratedType")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("UserDataKey")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ParentId");
-
-                    b.HasIndex("Path");
-
-                    b.HasIndex("PresentationUniqueKey");
-
-                    b.HasIndex("TopParentId", "Id");
-
-                    b.HasIndex("UserDataKey", "Type");
-
-                    b.HasIndex("Type", "TopParentId", "Id");
-
-                    b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
-                    b.HasIndex("Type", "TopParentId", "StartDate");
-
-                    b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
-                    b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
-                    b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
-                    b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
-                    b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
-                    b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
-                    b.ToTable("BaseItems");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<byte[]>("Blurhash")
-                        .HasColumnType("BLOB");
-
-                    b.Property<DateTime>("DateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ImageType")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Path")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("BaseItemImageInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
-                {
-                    b.Property<int>("Id")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id", "ItemId");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("BaseItemMetadataFields");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ProviderId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ProviderValue")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemId", "ProviderId");
-
-                    b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
-                    b.ToTable("BaseItemProviders");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
-                {
-                    b.Property<int>("Id")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id", "ItemId");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("BaseItemTrailerTypes");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("ChapterIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime?>("ImageDateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ImagePath")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("TEXT");
-
-                    b.Property<long>("StartPositionTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "ChapterIndex");
-
-                    b.ToTable("Chapters");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Client")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Key")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Value")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "ItemId", "Client", "Key")
-                        .IsUnique();
-
-                    b.ToTable("CustomItemDisplayPreferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ChromecastVersion")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Client")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DashboardTheme")
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("EnableNextVideoInfoOverlay")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("IndexBy")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("ScrollDirection")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("ShowBackdrop")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("ShowSidebar")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SkipBackwardLength")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SkipForwardLength")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("TvHome")
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "ItemId", "Client")
-                        .IsUnique();
-
-                    b.ToTable("DisplayPreferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DisplayPreferencesId")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Order")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayPreferencesId");
-
-                    b.ToTable("HomeSection");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime>("LastModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Path")
-                        .IsRequired()
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ImageInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Client")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("IndexBy")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("RememberIndexing")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("RememberSorting")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("SortBy")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("SortOrder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("ViewType")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ItemDisplayPreferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
-                {
-                    b.Property<Guid>("ItemValueId")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CleanValue")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Value")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemValueId");
-
-                    b.HasIndex("Type", "CleanValue");
-
-                    b.ToTable("ItemValues");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
-                {
-                    b.Property<Guid>("ItemValueId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemValueId", "ItemId");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("ItemValuesMap");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<long>("EndTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SegmentProviderId")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<long>("StartTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("MediaSegments");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("StreamIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("AspectRatio")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float>("AverageFrameRate")
-                        .HasColumnType("REAL");
-
-                    b.Property<int>("BitDepth")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("BitRate")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("BlPresentFlag")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ChannelLayout")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Channels")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Codec")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CodecTag")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CodecTimeBase")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ColorPrimaries")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ColorSpace")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ColorTransfer")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Comment")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("DvBlSignalCompatibilityId")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvLevel")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvProfile")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvVersionMajor")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvVersionMinor")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ElPresentFlag")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsAnamorphic")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsAvc")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsDefault")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsExternal")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsForced")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsHearingImpaired")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsInterlaced")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("KeyFrames")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Language")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float>("Level")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("NalLengthSize")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Path")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PixelFormat")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Profile")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float>("RealFrameRate")
-                        .HasColumnType("REAL");
-
-                    b.Property<int>("RefFrames")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Rotation")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("RpuPresentFlag")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SampleRate")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("StreamType")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("TimeBase")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Title")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "StreamIndex");
-
-                    b.HasIndex("StreamIndex");
-
-                    b.HasIndex("StreamType");
-
-                    b.HasIndex("StreamIndex", "StreamType");
-
-                    b.HasIndex("StreamIndex", "StreamType", "Language");
-
-                    b.ToTable("MediaStreamInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Role")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ListOrder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PersonType")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("SortOrder")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "Role", "ListOrder");
-
-                    b.HasIndex("Name");
-
-                    b.HasIndex("ItemId", "ListOrder");
-
-                    b.ToTable("Peoples");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Kind")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("Permission_Permissions_Guid")
-                        .HasColumnType("TEXT");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("Value")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "Kind")
-                        .IsUnique()
-                        .HasFilter("[UserId] IS NOT NULL");
-
-                    b.ToTable("Permissions");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Kind")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("Preference_Preferences_Guid")
-                        .HasColumnType("TEXT");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Value")
-                        .IsRequired()
-                        .HasMaxLength(65535)
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "Kind")
-                        .IsUnique()
-                        .HasFilter("[UserId] IS NOT NULL");
-
-                    b.ToTable("Preferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("AccessToken")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateLastActivity")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AccessToken")
-                        .IsUnique();
-
-                    b.ToTable("ApiKeys");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("AccessToken")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AppName")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AppVersion")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateLastActivity")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DeviceId")
-                        .IsRequired()
-                        .HasMaxLength(256)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DeviceName")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("IsActive")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DeviceId");
-
-                    b.HasIndex("AccessToken", "DateLastActivity");
-
-                    b.HasIndex("DeviceId", "DateLastActivity");
-
-                    b.HasIndex("UserId", "DeviceId");
-
-                    b.ToTable("Devices");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("CustomName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DeviceId")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DeviceId")
-                        .IsUnique();
-
-                    b.ToTable("DeviceOptions");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Bandwidth")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Interval")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ThumbnailCount")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("TileHeight")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("TileWidth")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "Width");
-
-                    b.ToTable("TrickplayInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AudioLanguagePreference")
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AuthenticationProviderId")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CastReceiverId")
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("DisplayCollectionsView")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("DisplayMissingEpisodes")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableAutoLogin")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableLocalPassword")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableNextEpisodeAutoPlay")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableUserPreferenceAccess")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("HidePlayedInLatest")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<long>("InternalId")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("InvalidLoginAttemptCount")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime?>("LastActivityDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("LastLoginDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("LoginAttemptsBeforeLockout")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("MaxActiveSessions")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("MaxParentalAgeRating")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("MustUpdatePassword")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(65535)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PasswordResetProviderId")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("PlayDefaultAudioTrack")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("RememberAudioSelections")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("RememberSubtitleSelections")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("RemoteClientBitrateLimit")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("SubtitleLanguagePreference")
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("SubtitleMode")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SyncPlayAccess")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Username")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT")
-                        .UseCollation("NOCASE");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Username")
-                        .IsUnique();
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
-                {
-                    b.Property<string>("Key")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("AudioStreamIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("BaseItemEntityId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("IsFavorite")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime?>("LastPlayedDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool?>("Likes")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("PlayCount")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<long>("PlaybackPositionTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("Played")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<double?>("Rating")
-                        .HasColumnType("REAL");
-
-                    b.Property<int?>("SubtitleStreamIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Key", "UserId");
-
-                    b.HasIndex("BaseItemEntityId");
-
-                    b.HasIndex("UserId");
-
-                    b.HasIndex("Key", "UserId", "IsFavorite");
-
-                    b.HasIndex("Key", "UserId", "LastPlayedDate");
-
-                    b.HasIndex("Key", "UserId", "PlaybackPositionTicks");
-
-                    b.HasIndex("Key", "UserId", "Played");
-
-                    b.ToTable("UserData");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("AccessSchedules")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
-                        .WithMany("AncestorIds")
-                        .HasForeignKey("BaseItemEntityId");
-
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany()
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
-                        .WithMany()
-                        .HasForeignKey("ParentItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-
-                    b.Navigation("ParentItem");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany()
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Images")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("LockedFields")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Provider")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("TrailerTypes")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Chapters")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("DisplayPreferences")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
-                        .WithMany("HomeSections")
-                        .HasForeignKey("DisplayPreferencesId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithOne("ProfileImage")
-                        .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("ItemDisplayPreferences")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("ItemValues")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
-                        .WithMany("BaseItemsMap")
-                        .HasForeignKey("ItemValueId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-
-                    b.Navigation("ItemValue");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("MediaStreams")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Peoples")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("Permissions")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("Preferences")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", "User")
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
-                        .WithMany("UserData")
-                        .HasForeignKey("BaseItemEntityId");
-
-                    b.HasOne("Jellyfin.Data.Entities.User", "User")
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
-                {
-                    b.Navigation("AncestorIds");
-
-                    b.Navigation("Chapters");
-
-                    b.Navigation("Images");
-
-                    b.Navigation("ItemValues");
-
-                    b.Navigation("LockedFields");
-
-                    b.Navigation("MediaStreams");
-
-                    b.Navigation("Peoples");
-
-                    b.Navigation("Provider");
-
-                    b.Navigation("TrailerTypes");
-
-                    b.Navigation("UserData");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
-                {
-                    b.Navigation("HomeSections");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
-                {
-                    b.Navigation("BaseItemsMap");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
-                {
-                    b.Navigation("AccessSchedules");
-
-                    b.Navigation("DisplayPreferences");
-
-                    b.Navigation("ItemDisplayPreferences");
-
-                    b.Navigation("Permissions");
-
-                    b.Navigation("Preferences");
-
-                    b.Navigation("ProfileImage");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}

+ 0 - 152
Jellyfin.Server.Implementations/Migrations/20241011095125_LibraryPeopleMigration.cs

@@ -1,152 +0,0 @@
-using System;
-using System.Runtime.CompilerServices;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
-    /// <inheritdoc />
-    public partial class LibraryPeopleMigration : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_Peoples_BaseItems_ItemId",
-                table: "Peoples");
-
-            migrationBuilder.DropPrimaryKey(
-                name: "PK_Peoples",
-                table: "Peoples");
-
-            migrationBuilder.DropIndex(
-                name: "IX_Peoples_ItemId_ListOrder",
-                table: "Peoples");
-
-            migrationBuilder.DropColumn(
-                name: "ListOrder",
-                table: "Peoples");
-
-            migrationBuilder.DropColumn(
-                name: "SortOrder",
-                table: "Peoples");
-
-            migrationBuilder.RenameColumn(
-                name: "ItemId",
-                table: "Peoples",
-                newName: "Id");
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Role",
-                table: "Peoples",
-                type: "TEXT",
-                nullable: true,
-                oldClrType: typeof(string),
-                oldType: "TEXT");
-
-            migrationBuilder.AddPrimaryKey(
-                name: "PK_Peoples",
-                table: "Peoples",
-                column: "Id");
-
-            migrationBuilder.CreateTable(
-                name: "PeopleBaseItemMap",
-                columns: table => new
-                {
-                    ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
-                    PeopleId = table.Column<Guid>(type: "TEXT", nullable: false),
-                    SortOrder = table.Column<int>(type: "INTEGER", nullable: true),
-                    ListOrder = table.Column<int>(type: "INTEGER", nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_PeopleBaseItemMap", x => new { x.ItemId, x.PeopleId });
-                    table.ForeignKey(
-                        name: "FK_PeopleBaseItemMap_BaseItems_ItemId",
-                        column: x => x.ItemId,
-                        principalTable: "BaseItems",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_PeopleBaseItemMap_Peoples_PeopleId",
-                        column: x => x.PeopleId,
-                        principalTable: "Peoples",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_PeopleBaseItemMap_ItemId_ListOrder",
-                table: "PeopleBaseItemMap",
-                columns: new[] { "ItemId", "ListOrder" });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_PeopleBaseItemMap_ItemId_SortOrder",
-                table: "PeopleBaseItemMap",
-                columns: new[] { "ItemId", "SortOrder" });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_PeopleBaseItemMap_PeopleId",
-                table: "PeopleBaseItemMap",
-                column: "PeopleId");
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "PeopleBaseItemMap");
-
-            migrationBuilder.DropPrimaryKey(
-                name: "PK_Peoples",
-                table: "Peoples");
-
-            migrationBuilder.RenameColumn(
-                name: "Id",
-                table: "Peoples",
-                newName: "ItemId");
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Role",
-                table: "Peoples",
-                type: "TEXT",
-                nullable: false,
-                defaultValue: string.Empty,
-                oldClrType: typeof(string),
-                oldType: "TEXT",
-                oldNullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "ListOrder",
-                table: "Peoples",
-                type: "INTEGER",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.AddColumn<int>(
-                name: "SortOrder",
-                table: "Peoples",
-                type: "INTEGER",
-                nullable: true);
-
-            migrationBuilder.AddPrimaryKey(
-                name: "PK_Peoples",
-                table: "Peoples",
-                columns: new[] { "ItemId", "Role", "ListOrder" });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Peoples_ItemId_ListOrder",
-                table: "Peoples",
-                columns: new[] { "ItemId", "ListOrder" });
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Peoples_BaseItems_ItemId",
-                table: "Peoples",
-                column: "ItemId",
-                principalTable: "BaseItems",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-    }
-}

+ 0 - 1613
Jellyfin.Server.Implementations/Migrations/20241011100757_LibraryPeopleRoleMigration.Designer.cs

@@ -1,1613 +0,0 @@
-// <auto-generated />
-using System;
-using Jellyfin.Server.Implementations;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
-    [DbContext(typeof(JellyfinDbContext))]
-    [Migration("20241011100757_LibraryPeopleRoleMigration")]
-    partial class LibraryPeopleRoleMigration
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder.HasAnnotation("ProductVersion", "8.0.10");
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DayOfWeek")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<double>("EndHour")
-                        .HasColumnType("REAL");
-
-                    b.Property<double>("StartHour")
-                        .HasColumnType("REAL");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AccessSchedules");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ItemId")
-                        .HasMaxLength(256)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("LogSeverity")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Overview")
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ShortOverview")
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Type")
-                        .IsRequired()
-                        .HasMaxLength(256)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DateCreated");
-
-                    b.ToTable("ActivityLogs");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("ParentItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("BaseItemEntityId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemId", "ParentItemId");
-
-                    b.HasIndex("BaseItemEntityId");
-
-                    b.HasIndex("ParentItemId");
-
-                    b.ToTable("AncestorIds");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Index")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Codec")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CodecTag")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Comment")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Filename")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("MimeType")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemId", "Index");
-
-                    b.ToTable("AttachmentStreamInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Album")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AlbumArtists")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Artists")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("Audio")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ChannelId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CleanName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float?>("CommunityRating")
-                        .HasColumnType("REAL");
-
-                    b.Property<float?>("CriticRating")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("CustomRating")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Data")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateLastMediaAdded")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateLastRefreshed")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateLastSaved")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("DateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("EndDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("EpisodeTitle")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExternalId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExternalSeriesId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExternalServiceId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ExtraIds")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ExtraType")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ForcedSortName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Genres")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("IndexNumber")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("InheritedParentalRatingValue")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsFolder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsInMixedFolder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsLocked")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsMovie")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsRepeat")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsSeries")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsVirtualItem")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<float?>("LUFS")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("MediaType")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float?>("NormalizationGain")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("OfficialRating")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("OriginalTitle")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Overview")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("OwnerId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("ParentId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ParentIndexNumber")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Path")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PreferredMetadataCountryCode")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PreferredMetadataLanguage")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("PremiereDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PresentationUniqueKey")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PrimaryVersionId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ProductionLocations")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ProductionYear")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<long?>("RunTimeTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("SeasonId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SeasonName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("SeriesId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SeriesName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SeriesPresentationUniqueKey")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ShowId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<long?>("Size")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("SortName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("StartDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Studios")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Tagline")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Tags")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("TopParentId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("TotalBitrate")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Type")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("UnratedType")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("UserDataKey")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ParentId");
-
-                    b.HasIndex("Path");
-
-                    b.HasIndex("PresentationUniqueKey");
-
-                    b.HasIndex("TopParentId", "Id");
-
-                    b.HasIndex("UserDataKey", "Type");
-
-                    b.HasIndex("Type", "TopParentId", "Id");
-
-                    b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
-
-                    b.HasIndex("Type", "TopParentId", "StartDate");
-
-                    b.HasIndex("Id", "Type", "IsFolder", "IsVirtualItem");
-
-                    b.HasIndex("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
-
-                    b.HasIndex("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
-
-                    b.HasIndex("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
-
-                    b.HasIndex("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
-                    b.HasIndex("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
-
-                    b.ToTable("BaseItems");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<byte[]>("Blurhash")
-                        .HasColumnType("BLOB");
-
-                    b.Property<DateTime>("DateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ImageType")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Path")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("BaseItemImageInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
-                {
-                    b.Property<int>("Id")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id", "ItemId");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("BaseItemMetadataFields");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ProviderId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ProviderValue")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemId", "ProviderId");
-
-                    b.HasIndex("ProviderId", "ProviderValue", "ItemId");
-
-                    b.ToTable("BaseItemProviders");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
-                {
-                    b.Property<int>("Id")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id", "ItemId");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("BaseItemTrailerTypes");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("ChapterIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime?>("ImageDateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ImagePath")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("TEXT");
-
-                    b.Property<long>("StartPositionTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "ChapterIndex");
-
-                    b.ToTable("Chapters");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Client")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Key")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Value")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "ItemId", "Client", "Key")
-                        .IsUnique();
-
-                    b.ToTable("CustomItemDisplayPreferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ChromecastVersion")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Client")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DashboardTheme")
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("EnableNextVideoInfoOverlay")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("IndexBy")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("ScrollDirection")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("ShowBackdrop")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("ShowSidebar")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SkipBackwardLength")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SkipForwardLength")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("TvHome")
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "ItemId", "Client")
-                        .IsUnique();
-
-                    b.ToTable("DisplayPreferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DisplayPreferencesId")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Order")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayPreferencesId");
-
-                    b.ToTable("HomeSection");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime>("LastModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Path")
-                        .IsRequired()
-                        .HasMaxLength(512)
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid?>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ImageInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Client")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("IndexBy")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("RememberIndexing")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("RememberSorting")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("SortBy")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("SortOrder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("ViewType")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ItemDisplayPreferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
-                {
-                    b.Property<Guid>("ItemValueId")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CleanValue")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Value")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemValueId");
-
-                    b.HasIndex("Type", "CleanValue");
-
-                    b.ToTable("ItemValues");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
-                {
-                    b.Property<Guid>("ItemValueId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("ItemValueId", "ItemId");
-
-                    b.HasIndex("ItemId");
-
-                    b.ToTable("ItemValuesMap");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<long>("EndTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("SegmentProviderId")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<long>("StartTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("MediaSegments");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("StreamIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("AspectRatio")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float>("AverageFrameRate")
-                        .HasColumnType("REAL");
-
-                    b.Property<int>("BitDepth")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("BitRate")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("BlPresentFlag")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("ChannelLayout")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Channels")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Codec")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CodecTag")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CodecTimeBase")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ColorPrimaries")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ColorSpace")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("ColorTransfer")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Comment")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("DvBlSignalCompatibilityId")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvLevel")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvProfile")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvVersionMajor")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("DvVersionMinor")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ElPresentFlag")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsAnamorphic")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsAvc")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsDefault")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsExternal")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsForced")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsHearingImpaired")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("IsInterlaced")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("KeyFrames")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Language")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float>("Level")
-                        .HasColumnType("REAL");
-
-                    b.Property<string>("NalLengthSize")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Path")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PixelFormat")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Profile")
-                        .HasColumnType("TEXT");
-
-                    b.Property<float>("RealFrameRate")
-                        .HasColumnType("REAL");
-
-                    b.Property<int>("RefFrames")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Rotation")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("RpuPresentFlag")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SampleRate")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("StreamType")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("TimeBase")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Title")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "StreamIndex");
-
-                    b.HasIndex("StreamIndex");
-
-                    b.HasIndex("StreamType");
-
-                    b.HasIndex("StreamIndex", "StreamType");
-
-                    b.HasIndex("StreamIndex", "StreamType", "Language");
-
-                    b.ToTable("MediaStreamInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PersonType")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Name");
-
-                    b.ToTable("Peoples");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("PeopleId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("ListOrder")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Role")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("SortOrder")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "PeopleId");
-
-                    b.HasIndex("PeopleId");
-
-                    b.HasIndex("ItemId", "ListOrder");
-
-                    b.HasIndex("ItemId", "SortOrder");
-
-                    b.ToTable("PeopleBaseItemMap");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Kind")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("Permission_Permissions_Guid")
-                        .HasColumnType("TEXT");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("Value")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "Kind")
-                        .IsUnique()
-                        .HasFilter("[UserId] IS NOT NULL");
-
-                    b.ToTable("Permissions");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Kind")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("Preference_Preferences_Guid")
-                        .HasColumnType("TEXT");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Value")
-                        .IsRequired()
-                        .HasMaxLength(65535)
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId", "Kind")
-                        .IsUnique()
-                        .HasFilter("[UserId] IS NOT NULL");
-
-                    b.ToTable("Preferences");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.ApiKey", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("AccessToken")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateLastActivity")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AccessToken")
-                        .IsUnique();
-
-                    b.ToTable("ApiKeys");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("AccessToken")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AppName")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AppVersion")
-                        .IsRequired()
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateCreated")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateLastActivity")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime>("DateModified")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DeviceId")
-                        .IsRequired()
-                        .HasMaxLength(256)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DeviceName")
-                        .IsRequired()
-                        .HasMaxLength(64)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("IsActive")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DeviceId");
-
-                    b.HasIndex("AccessToken", "DateLastActivity");
-
-                    b.HasIndex("DeviceId", "DateLastActivity");
-
-                    b.HasIndex("UserId", "DeviceId");
-
-                    b.ToTable("Devices");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.DeviceOptions", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("CustomName")
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("DeviceId")
-                        .IsRequired()
-                        .HasColumnType("TEXT");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DeviceId")
-                        .IsUnique();
-
-                    b.ToTable("DeviceOptions");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
-                {
-                    b.Property<Guid>("ItemId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("Width")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Bandwidth")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Height")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("Interval")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("ThumbnailCount")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("TileHeight")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("TileWidth")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("ItemId", "Width");
-
-                    b.ToTable("TrickplayInfos");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
-                {
-                    b.Property<Guid>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AudioLanguagePreference")
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("AuthenticationProviderId")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("CastReceiverId")
-                        .HasMaxLength(32)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("DisplayCollectionsView")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("DisplayMissingEpisodes")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableAutoLogin")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableLocalPassword")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableNextEpisodeAutoPlay")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("EnableUserPreferenceAccess")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("HidePlayedInLatest")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<long>("InternalId")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("InvalidLoginAttemptCount")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime?>("LastActivityDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<DateTime?>("LastLoginDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("LoginAttemptsBeforeLockout")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("MaxActiveSessions")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("MaxParentalAgeRating")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("MustUpdatePassword")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(65535)
-                        .HasColumnType("TEXT");
-
-                    b.Property<string>("PasswordResetProviderId")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("PlayDefaultAudioTrack")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("RememberAudioSelections")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("RememberSubtitleSelections")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int?>("RemoteClientBitrateLimit")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<uint>("RowVersion")
-                        .IsConcurrencyToken()
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("SubtitleLanguagePreference")
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT");
-
-                    b.Property<int>("SubtitleMode")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("SyncPlayAccess")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<string>("Username")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("TEXT")
-                        .UseCollation("NOCASE");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Username")
-                        .IsUnique();
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
-                {
-                    b.Property<string>("Key")
-                        .HasColumnType("TEXT");
-
-                    b.Property<Guid>("UserId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<int?>("AudioStreamIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<Guid?>("BaseItemEntityId")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool>("IsFavorite")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<DateTime?>("LastPlayedDate")
-                        .HasColumnType("TEXT");
-
-                    b.Property<bool?>("Likes")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<int>("PlayCount")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<long>("PlaybackPositionTicks")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<bool>("Played")
-                        .HasColumnType("INTEGER");
-
-                    b.Property<double?>("Rating")
-                        .HasColumnType("REAL");
-
-                    b.Property<int?>("SubtitleStreamIndex")
-                        .HasColumnType("INTEGER");
-
-                    b.HasKey("Key", "UserId");
-
-                    b.HasIndex("BaseItemEntityId");
-
-                    b.HasIndex("UserId");
-
-                    b.HasIndex("Key", "UserId", "IsFavorite");
-
-                    b.HasIndex("Key", "UserId", "LastPlayedDate");
-
-                    b.HasIndex("Key", "UserId", "PlaybackPositionTicks");
-
-                    b.HasIndex("Key", "UserId", "Played");
-
-                    b.ToTable("UserData");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AccessSchedule", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("AccessSchedules")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
-                        .WithMany("AncestorIds")
-                        .HasForeignKey("BaseItemEntityId");
-
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany()
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "ParentItem")
-                        .WithMany()
-                        .HasForeignKey("ParentItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-
-                    b.Navigation("ParentItem");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany()
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemImageInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Images")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("LockedFields")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Provider")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemTrailerType", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("TrailerTypes")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Chapters")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("DisplayPreferences")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.DisplayPreferences", null)
-                        .WithMany("HomeSections")
-                        .HasForeignKey("DisplayPreferencesId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithOne("ProfileImage")
-                        .HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("ItemDisplayPreferences")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("ItemValues")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("Jellyfin.Data.Entities.ItemValue", "ItemValue")
-                        .WithMany("BaseItemsMap")
-                        .HasForeignKey("ItemValueId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-
-                    b.Navigation("ItemValue");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("MediaStreams")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
-                        .WithMany("Peoples")
-                        .HasForeignKey("ItemId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("Jellyfin.Data.Entities.People", "People")
-                        .WithMany("BaseItems")
-                        .HasForeignKey("PeopleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Item");
-
-                    b.Navigation("People");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("Permissions")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Preference", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", null)
-                        .WithMany("Preferences")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.Security.Device", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.User", "User")
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
-                {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
-                        .WithMany("UserData")
-                        .HasForeignKey("BaseItemEntityId");
-
-                    b.HasOne("Jellyfin.Data.Entities.User", "User")
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
-                {
-                    b.Navigation("AncestorIds");
-
-                    b.Navigation("Chapters");
-
-                    b.Navigation("Images");
-
-                    b.Navigation("ItemValues");
-
-                    b.Navigation("LockedFields");
-
-                    b.Navigation("MediaStreams");
-
-                    b.Navigation("Peoples");
-
-                    b.Navigation("Provider");
-
-                    b.Navigation("TrailerTypes");
-
-                    b.Navigation("UserData");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.DisplayPreferences", b =>
-                {
-                    b.Navigation("HomeSections");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
-                {
-                    b.Navigation("BaseItemsMap");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.People", b =>
-                {
-                    b.Navigation("BaseItems");
-                });
-
-            modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
-                {
-                    b.Navigation("AccessSchedules");
-
-                    b.Navigation("DisplayPreferences");
-
-                    b.Navigation("ItemDisplayPreferences");
-
-                    b.Navigation("Permissions");
-
-                    b.Navigation("Preferences");
-
-                    b.Navigation("ProfileImage");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}

+ 0 - 38
Jellyfin.Server.Implementations/Migrations/20241011100757_LibraryPeopleRoleMigration.cs

@@ -1,38 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Jellyfin.Server.Implementations.Migrations
-{
-    /// <inheritdoc />
-    public partial class LibraryPeopleRoleMigration : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Role",
-                table: "Peoples");
-
-            migrationBuilder.AddColumn<string>(
-                name: "Role",
-                table: "PeopleBaseItemMap",
-                type: "TEXT",
-                nullable: true);
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Role",
-                table: "PeopleBaseItemMap");
-
-            migrationBuilder.AddColumn<string>(
-                name: "Role",
-                table: "Peoples",
-                type: "TEXT",
-                nullable: true);
-        }
-    }
-}

+ 17 - 23
Jellyfin.Server.Implementations/Migrations/20241011095125_LibraryPeopleMigration.Designer.cs → Jellyfin.Server.Implementations/Migrations/20241020103111_LibraryDbMigration.Designer.cs

@@ -11,8 +11,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 namespace Jellyfin.Server.Implementations.Migrations
 namespace Jellyfin.Server.Implementations.Migrations
 {
 {
     [DbContext(typeof(JellyfinDbContext))]
     [DbContext(typeof(JellyfinDbContext))]
-    [Migration("20241011095125_LibraryPeopleMigration")]
-    partial class LibraryPeopleMigration
+    [Migration("20241020103111_LibraryDbMigration")]
+    partial class LibraryDbMigration
     {
     {
         /// <inheritdoc />
         /// <inheritdoc />
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -356,9 +356,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<string>("UnratedType")
                     b.Property<string>("UnratedType")
                         .HasColumnType("TEXT");
                         .HasColumnType("TEXT");
 
 
-                    b.Property<string>("UserDataKey")
-                        .HasColumnType("TEXT");
-
                     b.Property<int?>("Width")
                     b.Property<int?>("Width")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
@@ -372,8 +369,6 @@ namespace Jellyfin.Server.Implementations.Migrations
 
 
                     b.HasIndex("TopParentId", "Id");
                     b.HasIndex("TopParentId", "Id");
 
 
-                    b.HasIndex("UserDataKey", "Type");
-
                     b.HasIndex("Type", "TopParentId", "Id");
                     b.HasIndex("Type", "TopParentId", "Id");
 
 
                     b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
                     b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
@@ -925,9 +920,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<string>("PersonType")
                     b.Property<string>("PersonType")
                         .HasColumnType("TEXT");
                         .HasColumnType("TEXT");
 
 
-                    b.Property<string>("Role")
-                        .HasColumnType("TEXT");
-
                     b.HasKey("Id");
                     b.HasKey("Id");
 
 
                     b.HasIndex("Name");
                     b.HasIndex("Name");
@@ -946,6 +938,9 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<int?>("ListOrder")
                     b.Property<int?>("ListOrder")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
+                    b.Property<string>("Role")
+                        .HasColumnType("TEXT");
+
                     b.Property<int?>("SortOrder")
                     b.Property<int?>("SortOrder")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
@@ -1278,7 +1273,7 @@ namespace Jellyfin.Server.Implementations.Migrations
 
 
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
                 {
                 {
-                    b.Property<string>("Key")
+                    b.Property<Guid>("ItemId")
                         .HasColumnType("TEXT");
                         .HasColumnType("TEXT");
 
 
                     b.Property<Guid>("UserId")
                     b.Property<Guid>("UserId")
@@ -1287,9 +1282,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<int?>("AudioStreamIndex")
                     b.Property<int?>("AudioStreamIndex")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
-                    b.Property<Guid?>("BaseItemEntityId")
-                        .HasColumnType("TEXT");
-
                     b.Property<bool>("IsFavorite")
                     b.Property<bool>("IsFavorite")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
@@ -1314,19 +1306,17 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<int?>("SubtitleStreamIndex")
                     b.Property<int?>("SubtitleStreamIndex")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
-                    b.HasKey("Key", "UserId");
-
-                    b.HasIndex("BaseItemEntityId");
+                    b.HasKey("ItemId", "UserId");
 
 
                     b.HasIndex("UserId");
                     b.HasIndex("UserId");
 
 
-                    b.HasIndex("Key", "UserId", "IsFavorite");
+                    b.HasIndex("ItemId", "UserId", "IsFavorite");
 
 
-                    b.HasIndex("Key", "UserId", "LastPlayedDate");
+                    b.HasIndex("ItemId", "UserId", "LastPlayedDate");
 
 
-                    b.HasIndex("Key", "UserId", "PlaybackPositionTicks");
+                    b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
 
 
-                    b.HasIndex("Key", "UserId", "Played");
+                    b.HasIndex("ItemId", "UserId", "Played");
 
 
                     b.ToTable("UserData");
                     b.ToTable("UserData");
                 });
                 });
@@ -1542,9 +1532,11 @@ namespace Jellyfin.Server.Implementations.Migrations
 
 
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
                 {
                 {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
+                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
                         .WithMany("UserData")
                         .WithMany("UserData")
-                        .HasForeignKey("BaseItemEntityId");
+                        .HasForeignKey("ItemId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
 
 
                     b.HasOne("Jellyfin.Data.Entities.User", "User")
                     b.HasOne("Jellyfin.Data.Entities.User", "User")
                         .WithMany()
                         .WithMany()
@@ -1552,6 +1544,8 @@ namespace Jellyfin.Server.Implementations.Migrations
                         .OnDelete(DeleteBehavior.Cascade)
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
                         .IsRequired();
 
 
+                    b.Navigation("Item");
+
                     b.Navigation("User");
                     b.Navigation("User");
                 });
                 });
 
 

+ 71 - 51
Jellyfin.Server.Implementations/Migrations/20241010160703_LibraryDbMigration.cs → Jellyfin.Server.Implementations/Migrations/20241020103111_LibraryDbMigration.cs

@@ -65,7 +65,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                     NormalizationGain = table.Column<float>(type: "REAL", nullable: true),
                     NormalizationGain = table.Column<float>(type: "REAL", nullable: true),
                     IsVirtualItem = table.Column<bool>(type: "INTEGER", nullable: false),
                     IsVirtualItem = table.Column<bool>(type: "INTEGER", nullable: false),
                     SeriesName = table.Column<string>(type: "TEXT", nullable: true),
                     SeriesName = table.Column<string>(type: "TEXT", nullable: true),
-                    UserDataKey = table.Column<string>(type: "TEXT", nullable: true),
                     SeasonName = table.Column<string>(type: "TEXT", nullable: true),
                     SeasonName = table.Column<string>(type: "TEXT", nullable: true),
                     ExternalSeriesId = table.Column<string>(type: "TEXT", nullable: true),
                     ExternalSeriesId = table.Column<string>(type: "TEXT", nullable: true),
                     Tagline = table.Column<string>(type: "TEXT", nullable: true),
                     Tagline = table.Column<string>(type: "TEXT", nullable: true),
@@ -107,6 +106,19 @@ namespace Jellyfin.Server.Implementations.Migrations
                     table.PrimaryKey("PK_ItemValues", x => x.ItemValueId);
                     table.PrimaryKey("PK_ItemValues", x => x.ItemValueId);
                 });
                 });
 
 
+            migrationBuilder.CreateTable(
+                name: "Peoples",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "TEXT", nullable: false),
+                    Name = table.Column<string>(type: "TEXT", nullable: false),
+                    PersonType = table.Column<string>(type: "TEXT", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Peoples", x => x.Id);
+                });
+
             migrationBuilder.CreateTable(
             migrationBuilder.CreateTable(
                 name: "AncestorIds",
                 name: "AncestorIds",
                 columns: table => new
                 columns: table => new
@@ -323,33 +335,11 @@ namespace Jellyfin.Server.Implementations.Migrations
                         onDelete: ReferentialAction.Cascade);
                         onDelete: ReferentialAction.Cascade);
                 });
                 });
 
 
-            migrationBuilder.CreateTable(
-                name: "Peoples",
-                columns: table => new
-                {
-                    ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
-                    Role = table.Column<string>(type: "TEXT", nullable: false),
-                    ListOrder = table.Column<int>(type: "INTEGER", nullable: false),
-                    Name = table.Column<string>(type: "TEXT", nullable: false),
-                    PersonType = table.Column<string>(type: "TEXT", nullable: true),
-                    SortOrder = table.Column<int>(type: "INTEGER", nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Peoples", x => new { x.ItemId, x.Role, x.ListOrder });
-                    table.ForeignKey(
-                        name: "FK_Peoples_BaseItems_ItemId",
-                        column: x => x.ItemId,
-                        principalTable: "BaseItems",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
             migrationBuilder.CreateTable(
             migrationBuilder.CreateTable(
                 name: "UserData",
                 name: "UserData",
                 columns: table => new
                 columns: table => new
                 {
                 {
-                    Key = table.Column<string>(type: "TEXT", nullable: false),
+                    ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
                     UserId = table.Column<Guid>(type: "TEXT", nullable: false),
                     UserId = table.Column<Guid>(type: "TEXT", nullable: false),
                     Rating = table.Column<double>(type: "REAL", nullable: true),
                     Rating = table.Column<double>(type: "REAL", nullable: true),
                     PlaybackPositionTicks = table.Column<long>(type: "INTEGER", nullable: false),
                     PlaybackPositionTicks = table.Column<long>(type: "INTEGER", nullable: false),
@@ -359,17 +349,17 @@ namespace Jellyfin.Server.Implementations.Migrations
                     Played = table.Column<bool>(type: "INTEGER", nullable: false),
                     Played = table.Column<bool>(type: "INTEGER", nullable: false),
                     AudioStreamIndex = table.Column<int>(type: "INTEGER", nullable: true),
                     AudioStreamIndex = table.Column<int>(type: "INTEGER", nullable: true),
                     SubtitleStreamIndex = table.Column<int>(type: "INTEGER", nullable: true),
                     SubtitleStreamIndex = table.Column<int>(type: "INTEGER", nullable: true),
-                    Likes = table.Column<bool>(type: "INTEGER", nullable: true),
-                    BaseItemEntityId = table.Column<Guid>(type: "TEXT", nullable: true)
+                    Likes = table.Column<bool>(type: "INTEGER", nullable: true)
                 },
                 },
                 constraints: table =>
                 constraints: table =>
                 {
                 {
-                    table.PrimaryKey("PK_UserData", x => new { x.Key, x.UserId });
+                    table.PrimaryKey("PK_UserData", x => new { x.ItemId, x.UserId });
                     table.ForeignKey(
                     table.ForeignKey(
-                        name: "FK_UserData_BaseItems_BaseItemEntityId",
-                        column: x => x.BaseItemEntityId,
+                        name: "FK_UserData_BaseItems_ItemId",
+                        column: x => x.ItemId,
                         principalTable: "BaseItems",
                         principalTable: "BaseItems",
-                        principalColumn: "Id");
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
                     table.ForeignKey(
                         name: "FK_UserData_Users_UserId",
                         name: "FK_UserData_Users_UserId",
                         column: x => x.UserId,
                         column: x => x.UserId,
@@ -402,6 +392,33 @@ namespace Jellyfin.Server.Implementations.Migrations
                         onDelete: ReferentialAction.Cascade);
                         onDelete: ReferentialAction.Cascade);
                 });
                 });
 
 
+            migrationBuilder.CreateTable(
+                name: "PeopleBaseItemMap",
+                columns: table => new
+                {
+                    ItemId = table.Column<Guid>(type: "TEXT", nullable: false),
+                    PeopleId = table.Column<Guid>(type: "TEXT", nullable: false),
+                    SortOrder = table.Column<int>(type: "INTEGER", nullable: true),
+                    ListOrder = table.Column<int>(type: "INTEGER", nullable: true),
+                    Role = table.Column<string>(type: "TEXT", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_PeopleBaseItemMap", x => new { x.ItemId, x.PeopleId });
+                    table.ForeignKey(
+                        name: "FK_PeopleBaseItemMap_BaseItems_ItemId",
+                        column: x => x.ItemId,
+                        principalTable: "BaseItems",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_PeopleBaseItemMap_Peoples_PeopleId",
+                        column: x => x.PeopleId,
+                        principalTable: "Peoples",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
                 name: "IX_AncestorIds_BaseItemEntityId",
                 name: "IX_AncestorIds_BaseItemEntityId",
                 table: "AncestorIds",
                 table: "AncestorIds",
@@ -492,11 +509,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                 table: "BaseItems",
                 table: "BaseItems",
                 columns: new[] { "Type", "TopParentId", "StartDate" });
                 columns: new[] { "Type", "TopParentId", "StartDate" });
 
 
-            migrationBuilder.CreateIndex(
-                name: "IX_BaseItems_UserDataKey_Type",
-                table: "BaseItems",
-                columns: new[] { "UserDataKey", "Type" });
-
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
                 name: "IX_BaseItemTrailerTypes_ItemId",
                 name: "IX_BaseItemTrailerTypes_ItemId",
                 table: "BaseItemTrailerTypes",
                 table: "BaseItemTrailerTypes",
@@ -533,39 +545,44 @@ namespace Jellyfin.Server.Implementations.Migrations
                 column: "StreamType");
                 column: "StreamType");
 
 
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
-                name: "IX_Peoples_ItemId_ListOrder",
-                table: "Peoples",
+                name: "IX_PeopleBaseItemMap_ItemId_ListOrder",
+                table: "PeopleBaseItemMap",
                 columns: new[] { "ItemId", "ListOrder" });
                 columns: new[] { "ItemId", "ListOrder" });
 
 
+            migrationBuilder.CreateIndex(
+                name: "IX_PeopleBaseItemMap_ItemId_SortOrder",
+                table: "PeopleBaseItemMap",
+                columns: new[] { "ItemId", "SortOrder" });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_PeopleBaseItemMap_PeopleId",
+                table: "PeopleBaseItemMap",
+                column: "PeopleId");
+
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
                 name: "IX_Peoples_Name",
                 name: "IX_Peoples_Name",
                 table: "Peoples",
                 table: "Peoples",
                 column: "Name");
                 column: "Name");
 
 
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
-                name: "IX_UserData_BaseItemEntityId",
+                name: "IX_UserData_ItemId_UserId_IsFavorite",
                 table: "UserData",
                 table: "UserData",
-                column: "BaseItemEntityId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_UserData_Key_UserId_IsFavorite",
-                table: "UserData",
-                columns: new[] { "Key", "UserId", "IsFavorite" });
+                columns: new[] { "ItemId", "UserId", "IsFavorite" });
 
 
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
-                name: "IX_UserData_Key_UserId_LastPlayedDate",
+                name: "IX_UserData_ItemId_UserId_LastPlayedDate",
                 table: "UserData",
                 table: "UserData",
-                columns: new[] { "Key", "UserId", "LastPlayedDate" });
+                columns: new[] { "ItemId", "UserId", "LastPlayedDate" });
 
 
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
-                name: "IX_UserData_Key_UserId_PlaybackPositionTicks",
+                name: "IX_UserData_ItemId_UserId_PlaybackPositionTicks",
                 table: "UserData",
                 table: "UserData",
-                columns: new[] { "Key", "UserId", "PlaybackPositionTicks" });
+                columns: new[] { "ItemId", "UserId", "PlaybackPositionTicks" });
 
 
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
-                name: "IX_UserData_Key_UserId_Played",
+                name: "IX_UserData_ItemId_UserId_Played",
                 table: "UserData",
                 table: "UserData",
-                columns: new[] { "Key", "UserId", "Played" });
+                columns: new[] { "ItemId", "UserId", "Played" });
 
 
             migrationBuilder.CreateIndex(
             migrationBuilder.CreateIndex(
                 name: "IX_UserData_UserId",
                 name: "IX_UserData_UserId",
@@ -604,7 +621,7 @@ namespace Jellyfin.Server.Implementations.Migrations
                 name: "MediaStreamInfos");
                 name: "MediaStreamInfos");
 
 
             migrationBuilder.DropTable(
             migrationBuilder.DropTable(
-                name: "Peoples");
+                name: "PeopleBaseItemMap");
 
 
             migrationBuilder.DropTable(
             migrationBuilder.DropTable(
                 name: "UserData");
                 name: "UserData");
@@ -612,6 +629,9 @@ namespace Jellyfin.Server.Implementations.Migrations
             migrationBuilder.DropTable(
             migrationBuilder.DropTable(
                 name: "ItemValues");
                 name: "ItemValues");
 
 
+            migrationBuilder.DropTable(
+                name: "Peoples");
+
             migrationBuilder.DropTable(
             migrationBuilder.DropTable(
                 name: "BaseItems");
                 name: "BaseItems");
         }
         }

+ 12 - 18
Jellyfin.Server.Implementations/Migrations/JellyfinDbModelSnapshot.cs

@@ -353,9 +353,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<string>("UnratedType")
                     b.Property<string>("UnratedType")
                         .HasColumnType("TEXT");
                         .HasColumnType("TEXT");
 
 
-                    b.Property<string>("UserDataKey")
-                        .HasColumnType("TEXT");
-
                     b.Property<int?>("Width")
                     b.Property<int?>("Width")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
@@ -369,8 +366,6 @@ namespace Jellyfin.Server.Implementations.Migrations
 
 
                     b.HasIndex("TopParentId", "Id");
                     b.HasIndex("TopParentId", "Id");
 
 
-                    b.HasIndex("UserDataKey", "Type");
-
                     b.HasIndex("Type", "TopParentId", "Id");
                     b.HasIndex("Type", "TopParentId", "Id");
 
 
                     b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
                     b.HasIndex("Type", "TopParentId", "PresentationUniqueKey");
@@ -1275,7 +1270,7 @@ namespace Jellyfin.Server.Implementations.Migrations
 
 
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
                 {
                 {
-                    b.Property<string>("Key")
+                    b.Property<Guid>("ItemId")
                         .HasColumnType("TEXT");
                         .HasColumnType("TEXT");
 
 
                     b.Property<Guid>("UserId")
                     b.Property<Guid>("UserId")
@@ -1284,9 +1279,6 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<int?>("AudioStreamIndex")
                     b.Property<int?>("AudioStreamIndex")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
-                    b.Property<Guid?>("BaseItemEntityId")
-                        .HasColumnType("TEXT");
-
                     b.Property<bool>("IsFavorite")
                     b.Property<bool>("IsFavorite")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
@@ -1311,19 +1303,17 @@ namespace Jellyfin.Server.Implementations.Migrations
                     b.Property<int?>("SubtitleStreamIndex")
                     b.Property<int?>("SubtitleStreamIndex")
                         .HasColumnType("INTEGER");
                         .HasColumnType("INTEGER");
 
 
-                    b.HasKey("Key", "UserId");
-
-                    b.HasIndex("BaseItemEntityId");
+                    b.HasKey("ItemId", "UserId");
 
 
                     b.HasIndex("UserId");
                     b.HasIndex("UserId");
 
 
-                    b.HasIndex("Key", "UserId", "IsFavorite");
+                    b.HasIndex("ItemId", "UserId", "IsFavorite");
 
 
-                    b.HasIndex("Key", "UserId", "LastPlayedDate");
+                    b.HasIndex("ItemId", "UserId", "LastPlayedDate");
 
 
-                    b.HasIndex("Key", "UserId", "PlaybackPositionTicks");
+                    b.HasIndex("ItemId", "UserId", "PlaybackPositionTicks");
 
 
-                    b.HasIndex("Key", "UserId", "Played");
+                    b.HasIndex("ItemId", "UserId", "Played");
 
 
                     b.ToTable("UserData");
                     b.ToTable("UserData");
                 });
                 });
@@ -1539,9 +1529,11 @@ namespace Jellyfin.Server.Implementations.Migrations
 
 
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
             modelBuilder.Entity("Jellyfin.Data.Entities.UserData", b =>
                 {
                 {
-                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
+                    b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
                         .WithMany("UserData")
                         .WithMany("UserData")
-                        .HasForeignKey("BaseItemEntityId");
+                        .HasForeignKey("ItemId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
 
 
                     b.HasOne("Jellyfin.Data.Entities.User", "User")
                     b.HasOne("Jellyfin.Data.Entities.User", "User")
                         .WithMany()
                         .WithMany()
@@ -1549,6 +1541,8 @@ namespace Jellyfin.Server.Implementations.Migrations
                         .OnDelete(DeleteBehavior.Cascade)
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
                         .IsRequired();
 
 
+                    b.Navigation("Item");
+
                     b.Navigation("User");
                     b.Navigation("User");
                 });
                 });