//
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("20241020103111_LibraryDbMigration")]
partial class LibraryDbMigration
{
///
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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("DayOfWeek")
.HasColumnType("INTEGER");
b.Property("EndHour")
.HasColumnType("REAL");
b.Property("StartHour")
.HasColumnType("REAL");
b.Property("UserId")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AccessSchedules");
});
modelBuilder.Entity("Jellyfin.Data.Entities.ActivityLog", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("DateCreated")
.HasColumnType("TEXT");
b.Property("ItemId")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property("LogSeverity")
.HasColumnType("INTEGER");
b.Property("Name")
.IsRequired()
.HasMaxLength(512)
.HasColumnType("TEXT");
b.Property("Overview")
.HasMaxLength(512)
.HasColumnType("TEXT");
b.Property("RowVersion")
.IsConcurrencyToken()
.HasColumnType("INTEGER");
b.Property("ShortOverview")
.HasMaxLength(512)
.HasColumnType("TEXT");
b.Property("Type")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property("UserId")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("DateCreated");
b.ToTable("ActivityLogs");
});
modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
{
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("ParentItemId")
.HasColumnType("TEXT");
b.Property("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("ItemId")
.HasColumnType("TEXT");
b.Property("Index")
.HasColumnType("INTEGER");
b.Property("Codec")
.IsRequired()
.HasColumnType("TEXT");
b.Property("CodecTag")
.HasColumnType("TEXT");
b.Property("Comment")
.HasColumnType("TEXT");
b.Property("Filename")
.HasColumnType("TEXT");
b.Property("MimeType")
.HasColumnType("TEXT");
b.HasKey("ItemId", "Index");
b.ToTable("AttachmentStreamInfos");
});
modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemEntity", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property("Album")
.HasColumnType("TEXT");
b.Property("AlbumArtists")
.HasColumnType("TEXT");
b.Property("Artists")
.HasColumnType("TEXT");
b.Property("Audio")
.HasColumnType("INTEGER");
b.Property("ChannelId")
.HasColumnType("TEXT");
b.Property("CleanName")
.HasColumnType("TEXT");
b.Property("CommunityRating")
.HasColumnType("REAL");
b.Property("CriticRating")
.HasColumnType("REAL");
b.Property("CustomRating")
.HasColumnType("TEXT");
b.Property("Data")
.HasColumnType("TEXT");
b.Property("DateCreated")
.HasColumnType("TEXT");
b.Property("DateLastMediaAdded")
.HasColumnType("TEXT");
b.Property("DateLastRefreshed")
.HasColumnType("TEXT");
b.Property("DateLastSaved")
.HasColumnType("TEXT");
b.Property("DateModified")
.HasColumnType("TEXT");
b.Property("EndDate")
.HasColumnType("TEXT");
b.Property("EpisodeTitle")
.HasColumnType("TEXT");
b.Property("ExternalId")
.HasColumnType("TEXT");
b.Property("ExternalSeriesId")
.HasColumnType("TEXT");
b.Property("ExternalServiceId")
.HasColumnType("TEXT");
b.Property("ExtraIds")
.HasColumnType("TEXT");
b.Property("ExtraType")
.HasColumnType("INTEGER");
b.Property("ForcedSortName")
.HasColumnType("TEXT");
b.Property("Genres")
.HasColumnType("TEXT");
b.Property("Height")
.HasColumnType("INTEGER");
b.Property("IndexNumber")
.HasColumnType("INTEGER");
b.Property("InheritedParentalRatingValue")
.HasColumnType("INTEGER");
b.Property("IsFolder")
.HasColumnType("INTEGER");
b.Property("IsInMixedFolder")
.HasColumnType("INTEGER");
b.Property("IsLocked")
.HasColumnType("INTEGER");
b.Property("IsMovie")
.HasColumnType("INTEGER");
b.Property("IsRepeat")
.HasColumnType("INTEGER");
b.Property("IsSeries")
.HasColumnType("INTEGER");
b.Property("IsVirtualItem")
.HasColumnType("INTEGER");
b.Property("LUFS")
.HasColumnType("REAL");
b.Property("MediaType")
.HasColumnType("TEXT");
b.Property("Name")
.HasColumnType("TEXT");
b.Property("NormalizationGain")
.HasColumnType("REAL");
b.Property("OfficialRating")
.HasColumnType("TEXT");
b.Property("OriginalTitle")
.HasColumnType("TEXT");
b.Property("Overview")
.HasColumnType("TEXT");
b.Property("OwnerId")
.HasColumnType("TEXT");
b.Property("ParentId")
.HasColumnType("TEXT");
b.Property("ParentIndexNumber")
.HasColumnType("INTEGER");
b.Property("Path")
.HasColumnType("TEXT");
b.Property("PreferredMetadataCountryCode")
.HasColumnType("TEXT");
b.Property("PreferredMetadataLanguage")
.HasColumnType("TEXT");
b.Property("PremiereDate")
.HasColumnType("TEXT");
b.Property("PresentationUniqueKey")
.HasColumnType("TEXT");
b.Property("PrimaryVersionId")
.HasColumnType("TEXT");
b.Property("ProductionLocations")
.HasColumnType("TEXT");
b.Property("ProductionYear")
.HasColumnType("INTEGER");
b.Property("RunTimeTicks")
.HasColumnType("INTEGER");
b.Property("SeasonId")
.HasColumnType("TEXT");
b.Property("SeasonName")
.HasColumnType("TEXT");
b.Property("SeriesId")
.HasColumnType("TEXT");
b.Property("SeriesName")
.HasColumnType("TEXT");
b.Property("SeriesPresentationUniqueKey")
.HasColumnType("TEXT");
b.Property("ShowId")
.HasColumnType("TEXT");
b.Property("Size")
.HasColumnType("INTEGER");
b.Property("SortName")
.HasColumnType("TEXT");
b.Property("StartDate")
.HasColumnType("TEXT");
b.Property("Studios")
.HasColumnType("TEXT");
b.Property("Tagline")
.HasColumnType("TEXT");
b.Property("Tags")
.HasColumnType("TEXT");
b.Property("TopParentId")
.HasColumnType("TEXT");
b.Property("TotalBitrate")
.HasColumnType("INTEGER");
b.Property("Type")
.IsRequired()
.HasColumnType("TEXT");
b.Property("UnratedType")
.HasColumnType("TEXT");
b.Property("Width")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("ParentId");
b.HasIndex("Path");
b.HasIndex("PresentationUniqueKey");
b.HasIndex("TopParentId", "Id");
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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property("Blurhash")
.HasColumnType("BLOB");
b.Property("DateModified")
.HasColumnType("TEXT");
b.Property("Height")
.HasColumnType("INTEGER");
b.Property("ImageType")
.HasColumnType("INTEGER");
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("Path")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Width")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("ItemId");
b.ToTable("BaseItemImageInfos");
});
modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemMetadataField", b =>
{
b.Property("Id")
.HasColumnType("INTEGER");
b.Property("ItemId")
.HasColumnType("TEXT");
b.HasKey("Id", "ItemId");
b.HasIndex("ItemId");
b.ToTable("BaseItemMetadataFields");
});
modelBuilder.Entity("Jellyfin.Data.Entities.BaseItemProvider", b =>
{
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("ProviderId")
.HasColumnType("TEXT");
b.Property("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("Id")
.HasColumnType("INTEGER");
b.Property("ItemId")
.HasColumnType("TEXT");
b.HasKey("Id", "ItemId");
b.HasIndex("ItemId");
b.ToTable("BaseItemTrailerTypes");
});
modelBuilder.Entity("Jellyfin.Data.Entities.Chapter", b =>
{
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("ChapterIndex")
.HasColumnType("INTEGER");
b.Property("ImageDateModified")
.HasColumnType("TEXT");
b.Property("ImagePath")
.HasColumnType("TEXT");
b.Property("Name")
.HasColumnType("TEXT");
b.Property("StartPositionTicks")
.HasColumnType("INTEGER");
b.HasKey("ItemId", "ChapterIndex");
b.ToTable("Chapters");
});
modelBuilder.Entity("Jellyfin.Data.Entities.CustomItemDisplayPreferences", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("Client")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("TEXT");
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("Key")
.IsRequired()
.HasColumnType("TEXT");
b.Property("UserId")
.HasColumnType("TEXT");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("ChromecastVersion")
.HasColumnType("INTEGER");
b.Property("Client")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("TEXT");
b.Property("DashboardTheme")
.HasMaxLength(32)
.HasColumnType("TEXT");
b.Property("EnableNextVideoInfoOverlay")
.HasColumnType("INTEGER");
b.Property("IndexBy")
.HasColumnType("INTEGER");
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("ScrollDirection")
.HasColumnType("INTEGER");
b.Property("ShowBackdrop")
.HasColumnType("INTEGER");
b.Property("ShowSidebar")
.HasColumnType("INTEGER");
b.Property("SkipBackwardLength")
.HasColumnType("INTEGER");
b.Property("SkipForwardLength")
.HasColumnType("INTEGER");
b.Property("TvHome")
.HasMaxLength(32)
.HasColumnType("TEXT");
b.Property("UserId")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("UserId", "ItemId", "Client")
.IsUnique();
b.ToTable("DisplayPreferences");
});
modelBuilder.Entity("Jellyfin.Data.Entities.HomeSection", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("DisplayPreferencesId")
.HasColumnType("INTEGER");
b.Property("Order")
.HasColumnType("INTEGER");
b.Property("Type")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("DisplayPreferencesId");
b.ToTable("HomeSection");
});
modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("LastModified")
.HasColumnType("TEXT");
b.Property("Path")
.IsRequired()
.HasMaxLength(512)
.HasColumnType("TEXT");
b.Property("UserId")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("UserId")
.IsUnique();
b.ToTable("ImageInfos");
});
modelBuilder.Entity("Jellyfin.Data.Entities.ItemDisplayPreferences", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("Client")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("TEXT");
b.Property("IndexBy")
.HasColumnType("INTEGER");
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("RememberIndexing")
.HasColumnType("INTEGER");
b.Property("RememberSorting")
.HasColumnType("INTEGER");
b.Property("SortBy")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.Property("UserId")
.HasColumnType("TEXT");
b.Property("ViewType")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("ItemDisplayPreferences");
});
modelBuilder.Entity("Jellyfin.Data.Entities.ItemValue", b =>
{
b.Property("ItemValueId")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property("CleanValue")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Type")
.HasColumnType("INTEGER");
b.Property("Value")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("ItemValueId");
b.HasIndex("Type", "CleanValue");
b.ToTable("ItemValues");
});
modelBuilder.Entity("Jellyfin.Data.Entities.ItemValueMap", b =>
{
b.Property("ItemValueId")
.HasColumnType("TEXT");
b.Property("ItemId")
.HasColumnType("TEXT");
b.HasKey("ItemValueId", "ItemId");
b.HasIndex("ItemId");
b.ToTable("ItemValuesMap");
});
modelBuilder.Entity("Jellyfin.Data.Entities.MediaSegment", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property("EndTicks")
.HasColumnType("INTEGER");
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("SegmentProviderId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("StartTicks")
.HasColumnType("INTEGER");
b.Property("Type")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.ToTable("MediaSegments");
});
modelBuilder.Entity("Jellyfin.Data.Entities.MediaStreamInfo", b =>
{
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("StreamIndex")
.HasColumnType("INTEGER");
b.Property("AspectRatio")
.HasColumnType("TEXT");
b.Property("AverageFrameRate")
.HasColumnType("REAL");
b.Property("BitDepth")
.HasColumnType("INTEGER");
b.Property("BitRate")
.HasColumnType("INTEGER");
b.Property("BlPresentFlag")
.HasColumnType("INTEGER");
b.Property("ChannelLayout")
.HasColumnType("TEXT");
b.Property("Channels")
.HasColumnType("INTEGER");
b.Property("Codec")
.HasColumnType("TEXT");
b.Property("CodecTag")
.IsRequired()
.HasColumnType("TEXT");
b.Property("CodecTimeBase")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ColorPrimaries")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ColorSpace")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ColorTransfer")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Comment")
.IsRequired()
.HasColumnType("TEXT");
b.Property("DvBlSignalCompatibilityId")
.HasColumnType("INTEGER");
b.Property("DvLevel")
.HasColumnType("INTEGER");
b.Property("DvProfile")
.HasColumnType("INTEGER");
b.Property("DvVersionMajor")
.HasColumnType("INTEGER");
b.Property("DvVersionMinor")
.HasColumnType("INTEGER");
b.Property("ElPresentFlag")
.HasColumnType("INTEGER");
b.Property("Height")
.HasColumnType("INTEGER");
b.Property("IsAnamorphic")
.HasColumnType("INTEGER");
b.Property("IsAvc")
.HasColumnType("INTEGER");
b.Property("IsDefault")
.HasColumnType("INTEGER");
b.Property("IsExternal")
.HasColumnType("INTEGER");
b.Property("IsForced")
.HasColumnType("INTEGER");
b.Property("IsHearingImpaired")
.HasColumnType("INTEGER");
b.Property("IsInterlaced")
.HasColumnType("INTEGER");
b.Property("KeyFrames")
.HasColumnType("TEXT");
b.Property("Language")
.HasColumnType("TEXT");
b.Property("Level")
.HasColumnType("REAL");
b.Property("NalLengthSize")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Path")
.HasColumnType("TEXT");
b.Property("PixelFormat")
.HasColumnType("TEXT");
b.Property("Profile")
.HasColumnType("TEXT");
b.Property("RealFrameRate")
.HasColumnType("REAL");
b.Property("RefFrames")
.HasColumnType("INTEGER");
b.Property("Rotation")
.HasColumnType("INTEGER");
b.Property("RpuPresentFlag")
.HasColumnType("INTEGER");
b.Property("SampleRate")
.HasColumnType("INTEGER");
b.Property("StreamType")
.HasColumnType("INTEGER");
b.Property("TimeBase")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Title")
.IsRequired()
.HasColumnType("TEXT");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property("Name")
.IsRequired()
.HasColumnType("TEXT");
b.Property("PersonType")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("Name");
b.ToTable("Peoples");
});
modelBuilder.Entity("Jellyfin.Data.Entities.PeopleBaseItemMap", b =>
{
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("PeopleId")
.HasColumnType("TEXT");
b.Property("ListOrder")
.HasColumnType("INTEGER");
b.Property("Role")
.HasColumnType("TEXT");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("Kind")
.HasColumnType("INTEGER");
b.Property("Permission_Permissions_Guid")
.HasColumnType("TEXT");
b.Property("RowVersion")
.IsConcurrencyToken()
.HasColumnType("INTEGER");
b.Property("UserId")
.HasColumnType("TEXT");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("Kind")
.HasColumnType("INTEGER");
b.Property("Preference_Preferences_Guid")
.HasColumnType("TEXT");
b.Property("RowVersion")
.IsConcurrencyToken()
.HasColumnType("INTEGER");
b.Property("UserId")
.HasColumnType("TEXT");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AccessToken")
.IsRequired()
.HasColumnType("TEXT");
b.Property("DateCreated")
.HasColumnType("TEXT");
b.Property("DateLastActivity")
.HasColumnType("TEXT");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AccessToken")
.IsRequired()
.HasColumnType("TEXT");
b.Property("AppName")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("TEXT");
b.Property("AppVersion")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("TEXT");
b.Property("DateCreated")
.HasColumnType("TEXT");
b.Property("DateLastActivity")
.HasColumnType("TEXT");
b.Property("DateModified")
.HasColumnType("TEXT");
b.Property("DeviceId")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property("DeviceName")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("TEXT");
b.Property("IsActive")
.HasColumnType("INTEGER");
b.Property("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("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CustomName")
.HasColumnType("TEXT");
b.Property("DeviceId")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("DeviceId")
.IsUnique();
b.ToTable("DeviceOptions");
});
modelBuilder.Entity("Jellyfin.Data.Entities.TrickplayInfo", b =>
{
b.Property("ItemId")
.HasColumnType("TEXT");
b.Property("Width")
.HasColumnType("INTEGER");
b.Property