diff options
Diffstat (limited to 'Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs')
| -rw-r--r-- | Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs | 1106 |
1 files changed, 1106 insertions, 0 deletions
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs new file mode 100644 index 0000000000..ad1d28b136 --- /dev/null +++ b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs @@ -0,0 +1,1106 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Jellyfin.Database.Providers.PgSql.Migrations +{ + /// <inheritdoc /> + public partial class InitMigration : Migration + { + /// <inheritdoc /> + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ActivityLogs", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Name = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false), + Overview = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true), + ShortOverview = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true), + Type = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + ItemId = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true), + DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + LogSeverity = table.Column<int>(type: "integer", nullable: false), + RowVersion = table.Column<long>(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ActivityLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "ApiKeys", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + DateLastActivity = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + Name = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false), + AccessToken = table.Column<string>(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ApiKeys", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "BaseItems", + columns: table => new + { + Id = table.Column<Guid>(type: "uuid", nullable: false), + Type = table.Column<string>(type: "text", nullable: false), + Data = table.Column<string>(type: "text", nullable: true), + Path = table.Column<string>(type: "text", nullable: true), + StartDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + EndDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + ChannelId = table.Column<string>(type: "text", nullable: true), + IsMovie = table.Column<bool>(type: "boolean", nullable: false), + CommunityRating = table.Column<float>(type: "real", nullable: true), + CustomRating = table.Column<string>(type: "text", nullable: true), + IndexNumber = table.Column<int>(type: "integer", nullable: true), + IsLocked = table.Column<bool>(type: "boolean", nullable: false), + Name = table.Column<string>(type: "text", nullable: true), + OfficialRating = table.Column<string>(type: "text", nullable: true), + MediaType = table.Column<string>(type: "text", nullable: true), + Overview = table.Column<string>(type: "text", nullable: true), + ParentIndexNumber = table.Column<int>(type: "integer", nullable: true), + PremiereDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + ProductionYear = table.Column<int>(type: "integer", nullable: true), + Genres = table.Column<string>(type: "text", nullable: true), + SortName = table.Column<string>(type: "text", nullable: true), + ForcedSortName = table.Column<string>(type: "text", nullable: true), + RunTimeTicks = table.Column<long>(type: "bigint", nullable: true), + DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + DateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + IsSeries = table.Column<bool>(type: "boolean", nullable: false), + EpisodeTitle = table.Column<string>(type: "text", nullable: true), + IsRepeat = table.Column<bool>(type: "boolean", nullable: false), + PreferredMetadataLanguage = table.Column<string>(type: "text", nullable: true), + PreferredMetadataCountryCode = table.Column<string>(type: "text", nullable: true), + DateLastRefreshed = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + DateLastSaved = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + IsInMixedFolder = table.Column<bool>(type: "boolean", nullable: false), + Studios = table.Column<string>(type: "text", nullable: true), + ExternalServiceId = table.Column<string>(type: "text", nullable: true), + Tags = table.Column<string>(type: "text", nullable: true), + IsFolder = table.Column<bool>(type: "boolean", nullable: false), + InheritedParentalRatingValue = table.Column<int>(type: "integer", nullable: true), + UnratedType = table.Column<string>(type: "text", nullable: true), + CriticRating = table.Column<float>(type: "real", nullable: true), + CleanName = table.Column<string>(type: "text", nullable: true), + PresentationUniqueKey = table.Column<string>(type: "text", nullable: true), + OriginalTitle = table.Column<string>(type: "text", nullable: true), + PrimaryVersionId = table.Column<string>(type: "text", nullable: true), + DateLastMediaAdded = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + Album = table.Column<string>(type: "text", nullable: true), + LUFS = table.Column<float>(type: "real", nullable: true), + NormalizationGain = table.Column<float>(type: "real", nullable: true), + IsVirtualItem = table.Column<bool>(type: "boolean", nullable: false), + SeriesName = table.Column<string>(type: "text", nullable: true), + SeasonName = table.Column<string>(type: "text", nullable: true), + ExternalSeriesId = table.Column<string>(type: "text", nullable: true), + Tagline = table.Column<string>(type: "text", nullable: true), + ProductionLocations = table.Column<string>(type: "text", nullable: true), + ExtraIds = table.Column<string>(type: "text", nullable: true), + TotalBitrate = table.Column<int>(type: "integer", nullable: true), + ExtraType = table.Column<int>(type: "integer", nullable: true), + Artists = table.Column<string>(type: "text", nullable: true), + AlbumArtists = table.Column<string>(type: "text", nullable: true), + ExternalId = table.Column<string>(type: "text", nullable: true), + SeriesPresentationUniqueKey = table.Column<string>(type: "text", nullable: true), + ShowId = table.Column<string>(type: "text", nullable: true), + OwnerId = table.Column<string>(type: "text", nullable: true), + Width = table.Column<int>(type: "integer", nullable: true), + Height = table.Column<int>(type: "integer", nullable: true), + Size = table.Column<long>(type: "bigint", nullable: true), + Audio = table.Column<int>(type: "integer", nullable: true), + ParentId = table.Column<Guid>(type: "uuid", nullable: true), + TopParentId = table.Column<Guid>(type: "uuid", nullable: true), + SeasonId = table.Column<Guid>(type: "uuid", nullable: true), + SeriesId = table.Column<Guid>(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BaseItems", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CustomItemDisplayPreferences", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + Client = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false), + Key = table.Column<string>(type: "text", nullable: false), + Value = table.Column<string>(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CustomItemDisplayPreferences", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "DeviceOptions", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + DeviceId = table.Column<string>(type: "text", nullable: false), + CustomName = table.Column<string>(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DeviceOptions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "ItemValues", + columns: table => new + { + ItemValueId = table.Column<Guid>(type: "uuid", nullable: false), + Type = table.Column<int>(type: "integer", nullable: false), + Value = table.Column<string>(type: "text", nullable: false), + CleanValue = table.Column<string>(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ItemValues", x => x.ItemValueId); + }); + + migrationBuilder.CreateTable( + name: "MediaSegments", + columns: table => new + { + Id = table.Column<Guid>(type: "uuid", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + Type = table.Column<int>(type: "integer", nullable: false), + EndTicks = table.Column<long>(type: "bigint", nullable: false), + StartTicks = table.Column<long>(type: "bigint", nullable: false), + SegmentProviderId = table.Column<string>(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_MediaSegments", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Peoples", + columns: table => new + { + Id = table.Column<Guid>(type: "uuid", 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( + name: "TrickplayInfos", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + Width = table.Column<int>(type: "integer", nullable: false), + Height = table.Column<int>(type: "integer", nullable: false), + TileWidth = table.Column<int>(type: "integer", nullable: false), + TileHeight = table.Column<int>(type: "integer", nullable: false), + ThumbnailCount = table.Column<int>(type: "integer", nullable: false), + Interval = table.Column<int>(type: "integer", nullable: false), + Bandwidth = table.Column<int>(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_TrickplayInfos", x => new { x.ItemId, x.Width }); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column<Guid>(type: "uuid", nullable: false), + Username = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false), + Password = table.Column<string>(type: "character varying(65535)", maxLength: 65535, nullable: true), + MustUpdatePassword = table.Column<bool>(type: "boolean", nullable: false), + AudioLanguagePreference = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true), + AuthenticationProviderId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false), + PasswordResetProviderId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false), + InvalidLoginAttemptCount = table.Column<int>(type: "integer", nullable: false), + LastActivityDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + LastLoginDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + LoginAttemptsBeforeLockout = table.Column<int>(type: "integer", nullable: true), + MaxActiveSessions = table.Column<int>(type: "integer", nullable: false), + SubtitleMode = table.Column<int>(type: "integer", nullable: false), + PlayDefaultAudioTrack = table.Column<bool>(type: "boolean", nullable: false), + SubtitleLanguagePreference = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true), + DisplayMissingEpisodes = table.Column<bool>(type: "boolean", nullable: false), + DisplayCollectionsView = table.Column<bool>(type: "boolean", nullable: false), + EnableLocalPassword = table.Column<bool>(type: "boolean", nullable: false), + HidePlayedInLatest = table.Column<bool>(type: "boolean", nullable: false), + RememberAudioSelections = table.Column<bool>(type: "boolean", nullable: false), + RememberSubtitleSelections = table.Column<bool>(type: "boolean", nullable: false), + EnableNextEpisodeAutoPlay = table.Column<bool>(type: "boolean", nullable: false), + EnableAutoLogin = table.Column<bool>(type: "boolean", nullable: false), + EnableUserPreferenceAccess = table.Column<bool>(type: "boolean", nullable: false), + MaxParentalAgeRating = table.Column<int>(type: "integer", nullable: true), + RemoteClientBitrateLimit = table.Column<int>(type: "integer", nullable: true), + InternalId = table.Column<long>(type: "bigint", nullable: false), + SyncPlayAccess = table.Column<int>(type: "integer", nullable: false), + CastReceiverId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true), + RowVersion = table.Column<long>(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AncestorIds", + columns: table => new + { + ParentItemId = table.Column<Guid>(type: "uuid", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AncestorIds", x => new { x.ItemId, x.ParentItemId }); + table.ForeignKey( + name: "FK_AncestorIds_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AncestorIds_BaseItems_ParentItemId", + column: x => x.ParentItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AttachmentStreamInfos", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + Index = table.Column<int>(type: "integer", nullable: false), + Codec = table.Column<string>(type: "text", nullable: false), + CodecTag = table.Column<string>(type: "text", nullable: true), + Comment = table.Column<string>(type: "text", nullable: true), + Filename = table.Column<string>(type: "text", nullable: true), + MimeType = table.Column<string>(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AttachmentStreamInfos", x => new { x.ItemId, x.Index }); + table.ForeignKey( + name: "FK_AttachmentStreamInfos_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "BaseItemImageInfos", + columns: table => new + { + Id = table.Column<Guid>(type: "uuid", nullable: false), + Path = table.Column<string>(type: "text", nullable: false), + DateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + ImageType = table.Column<int>(type: "integer", nullable: false), + Width = table.Column<int>(type: "integer", nullable: false), + Height = table.Column<int>(type: "integer", nullable: false), + Blurhash = table.Column<byte[]>(type: "bytea", nullable: true), + ItemId = table.Column<Guid>(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_BaseItemImageInfos", x => x.Id); + table.ForeignKey( + name: "FK_BaseItemImageInfos_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "BaseItemMetadataFields", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_BaseItemMetadataFields", x => new { x.Id, x.ItemId }); + table.ForeignKey( + name: "FK_BaseItemMetadataFields_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "BaseItemProviders", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + ProviderId = table.Column<string>(type: "text", nullable: false), + ProviderValue = table.Column<string>(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_BaseItemProviders", x => new { x.ItemId, x.ProviderId }); + table.ForeignKey( + name: "FK_BaseItemProviders_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "BaseItemTrailerTypes", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_BaseItemTrailerTypes", x => new { x.Id, x.ItemId }); + table.ForeignKey( + name: "FK_BaseItemTrailerTypes_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Chapters", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + ChapterIndex = table.Column<int>(type: "integer", nullable: false), + StartPositionTicks = table.Column<long>(type: "bigint", nullable: false), + Name = table.Column<string>(type: "text", nullable: true), + ImagePath = table.Column<string>(type: "text", nullable: true), + ImageDateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Chapters", x => new { x.ItemId, x.ChapterIndex }); + table.ForeignKey( + name: "FK_Chapters_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "MediaStreamInfos", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + StreamIndex = table.Column<int>(type: "integer", nullable: false), + StreamType = table.Column<int>(type: "integer", nullable: false), + Codec = table.Column<string>(type: "text", nullable: true), + Language = table.Column<string>(type: "text", nullable: true), + ChannelLayout = table.Column<string>(type: "text", nullable: true), + Profile = table.Column<string>(type: "text", nullable: true), + AspectRatio = table.Column<string>(type: "text", nullable: true), + Path = table.Column<string>(type: "text", nullable: true), + IsInterlaced = table.Column<bool>(type: "boolean", nullable: true), + BitRate = table.Column<int>(type: "integer", nullable: true), + Channels = table.Column<int>(type: "integer", nullable: true), + SampleRate = table.Column<int>(type: "integer", nullable: true), + IsDefault = table.Column<bool>(type: "boolean", nullable: false), + IsForced = table.Column<bool>(type: "boolean", nullable: false), + IsExternal = table.Column<bool>(type: "boolean", nullable: false), + Height = table.Column<int>(type: "integer", nullable: true), + Width = table.Column<int>(type: "integer", nullable: true), + AverageFrameRate = table.Column<float>(type: "real", nullable: true), + RealFrameRate = table.Column<float>(type: "real", nullable: true), + Level = table.Column<float>(type: "real", nullable: true), + PixelFormat = table.Column<string>(type: "text", nullable: true), + BitDepth = table.Column<int>(type: "integer", nullable: true), + IsAnamorphic = table.Column<bool>(type: "boolean", nullable: true), + RefFrames = table.Column<int>(type: "integer", nullable: true), + CodecTag = table.Column<string>(type: "text", nullable: true), + Comment = table.Column<string>(type: "text", nullable: true), + NalLengthSize = table.Column<string>(type: "text", nullable: true), + IsAvc = table.Column<bool>(type: "boolean", nullable: true), + Title = table.Column<string>(type: "text", nullable: true), + TimeBase = table.Column<string>(type: "text", nullable: true), + CodecTimeBase = table.Column<string>(type: "text", nullable: true), + ColorPrimaries = table.Column<string>(type: "text", nullable: true), + ColorSpace = table.Column<string>(type: "text", nullable: true), + ColorTransfer = table.Column<string>(type: "text", nullable: true), + DvVersionMajor = table.Column<int>(type: "integer", nullable: true), + DvVersionMinor = table.Column<int>(type: "integer", nullable: true), + DvProfile = table.Column<int>(type: "integer", nullable: true), + DvLevel = table.Column<int>(type: "integer", nullable: true), + RpuPresentFlag = table.Column<int>(type: "integer", nullable: true), + ElPresentFlag = table.Column<int>(type: "integer", nullable: true), + BlPresentFlag = table.Column<int>(type: "integer", nullable: true), + DvBlSignalCompatibilityId = table.Column<int>(type: "integer", nullable: true), + IsHearingImpaired = table.Column<bool>(type: "boolean", nullable: true), + Rotation = table.Column<int>(type: "integer", nullable: true), + KeyFrames = table.Column<string>(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_MediaStreamInfos", x => new { x.ItemId, x.StreamIndex }); + table.ForeignKey( + name: "FK_MediaStreamInfos_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ItemValuesMap", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + ItemValueId = table.Column<Guid>(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ItemValuesMap", x => new { x.ItemValueId, x.ItemId }); + table.ForeignKey( + name: "FK_ItemValuesMap_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ItemValuesMap_ItemValues_ItemValueId", + column: x => x.ItemValueId, + principalTable: "ItemValues", + principalColumn: "ItemValueId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PeopleBaseItemMap", + columns: table => new + { + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + PeopleId = table.Column<Guid>(type: "uuid", 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.CreateTable( + name: "AccessSchedules", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + DayOfWeek = table.Column<int>(type: "integer", nullable: false), + StartHour = table.Column<double>(type: "double precision", nullable: false), + EndHour = table.Column<double>(type: "double precision", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AccessSchedules", x => x.Id); + table.ForeignKey( + name: "FK_AccessSchedules_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Devices", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + AccessToken = table.Column<string>(type: "text", nullable: false), + AppName = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false), + AppVersion = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false), + DeviceName = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false), + DeviceId = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false), + IsActive = table.Column<bool>(type: "boolean", nullable: false), + DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + DateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), + DateLastActivity = table.Column<DateTime>(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Devices", x => x.Id); + table.ForeignKey( + name: "FK_Devices_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "DisplayPreferences", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + Client = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false), + ShowSidebar = table.Column<bool>(type: "boolean", nullable: false), + ShowBackdrop = table.Column<bool>(type: "boolean", nullable: false), + ScrollDirection = table.Column<int>(type: "integer", nullable: false), + IndexBy = table.Column<int>(type: "integer", nullable: true), + SkipForwardLength = table.Column<int>(type: "integer", nullable: false), + SkipBackwardLength = table.Column<int>(type: "integer", nullable: false), + ChromecastVersion = table.Column<int>(type: "integer", nullable: false), + EnableNextVideoInfoOverlay = table.Column<bool>(type: "boolean", nullable: false), + DashboardTheme = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true), + TvHome = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DisplayPreferences", x => x.Id); + table.ForeignKey( + name: "FK_DisplayPreferences_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ImageInfos", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: true), + Path = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false), + LastModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ImageInfos", x => x.Id); + table.ForeignKey( + name: "FK_ImageInfos_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ItemDisplayPreferences", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + Client = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false), + ViewType = table.Column<int>(type: "integer", nullable: false), + RememberIndexing = table.Column<bool>(type: "boolean", nullable: false), + IndexBy = table.Column<int>(type: "integer", nullable: true), + RememberSorting = table.Column<bool>(type: "boolean", nullable: false), + SortBy = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false), + SortOrder = table.Column<int>(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ItemDisplayPreferences", x => x.Id); + table.ForeignKey( + name: "FK_ItemDisplayPreferences_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Permissions", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: true), + Kind = table.Column<int>(type: "integer", nullable: false), + Value = table.Column<bool>(type: "boolean", nullable: false), + RowVersion = table.Column<long>(type: "bigint", nullable: false), + Permission_Permissions_Guid = table.Column<Guid>(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Permissions", x => x.Id); + table.ForeignKey( + name: "FK_Permissions_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Preferences", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + UserId = table.Column<Guid>(type: "uuid", nullable: true), + Kind = table.Column<int>(type: "integer", nullable: false), + Value = table.Column<string>(type: "character varying(65535)", maxLength: 65535, nullable: false), + RowVersion = table.Column<long>(type: "bigint", nullable: false), + Preference_Preferences_Guid = table.Column<Guid>(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Preferences", x => x.Id); + table.ForeignKey( + name: "FK_Preferences_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserData", + columns: table => new + { + CustomDataKey = table.Column<string>(type: "text", nullable: false), + ItemId = table.Column<Guid>(type: "uuid", nullable: false), + UserId = table.Column<Guid>(type: "uuid", nullable: false), + Rating = table.Column<double>(type: "double precision", nullable: true), + PlaybackPositionTicks = table.Column<long>(type: "bigint", nullable: false), + PlayCount = table.Column<int>(type: "integer", nullable: false), + IsFavorite = table.Column<bool>(type: "boolean", nullable: false), + LastPlayedDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true), + Played = table.Column<bool>(type: "boolean", nullable: false), + AudioStreamIndex = table.Column<int>(type: "integer", nullable: true), + SubtitleStreamIndex = table.Column<int>(type: "integer", nullable: true), + Likes = table.Column<bool>(type: "boolean", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserData", x => new { x.ItemId, x.UserId, x.CustomDataKey }); + table.ForeignKey( + name: "FK_UserData_BaseItems_ItemId", + column: x => x.ItemId, + principalTable: "BaseItems", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserData_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "HomeSection", + columns: table => new + { + Id = table.Column<int>(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + DisplayPreferencesId = table.Column<int>(type: "integer", nullable: false), + Order = table.Column<int>(type: "integer", nullable: false), + Type = table.Column<int>(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_HomeSection", x => x.Id); + table.ForeignKey( + name: "FK_HomeSection_DisplayPreferences_DisplayPreferencesId", + column: x => x.DisplayPreferencesId, + principalTable: "DisplayPreferences", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AccessSchedules_UserId", + table: "AccessSchedules", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_ActivityLogs_DateCreated", + table: "ActivityLogs", + column: "DateCreated"); + + migrationBuilder.CreateIndex( + name: "IX_AncestorIds_ParentItemId", + table: "AncestorIds", + column: "ParentItemId"); + + migrationBuilder.CreateIndex( + name: "IX_ApiKeys_AccessToken", + table: "ApiKeys", + column: "AccessToken", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_BaseItemImageInfos_ItemId", + table: "BaseItemImageInfos", + column: "ItemId"); + + migrationBuilder.CreateIndex( + name: "IX_BaseItemMetadataFields_ItemId", + table: "BaseItemMetadataFields", + column: "ItemId"); + + migrationBuilder.CreateIndex( + name: "IX_BaseItemProviders_ProviderId_ProviderValue_ItemId", + table: "BaseItemProviders", + columns: new[] { "ProviderId", "ProviderValue", "ItemId" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Id_Type_IsFolder_IsVirtualItem", + table: "BaseItems", + columns: new[] { "Id", "Type", "IsFolder", "IsVirtualItem" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_IsFolder_TopParentId_IsVirtualItem_PresentationUn~", + table: "BaseItems", + columns: new[] { "IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_MediaType_TopParentId_IsVirtualItem_PresentationU~", + table: "BaseItems", + columns: new[] { "MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_ParentId", + table: "BaseItems", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Path", + table: "BaseItems", + column: "Path"); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_PresentationUniqueKey", + table: "BaseItems", + column: "PresentationUniqueKey"); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_TopParentId_Id", + table: "BaseItems", + columns: new[] { "TopParentId", "Id" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Type_SeriesPresentationUniqueKey_IsFolder_IsVirtu~", + table: "BaseItems", + columns: new[] { "Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Type_SeriesPresentationUniqueKey_PresentationUniq~", + table: "BaseItems", + columns: new[] { "Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Type_TopParentId_Id", + table: "BaseItems", + columns: new[] { "Type", "TopParentId", "Id" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Type_TopParentId_IsVirtualItem_PresentationUnique~", + table: "BaseItems", + columns: new[] { "Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Type_TopParentId_PresentationUniqueKey", + table: "BaseItems", + columns: new[] { "Type", "TopParentId", "PresentationUniqueKey" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItems_Type_TopParentId_StartDate", + table: "BaseItems", + columns: new[] { "Type", "TopParentId", "StartDate" }); + + migrationBuilder.CreateIndex( + name: "IX_BaseItemTrailerTypes_ItemId", + table: "BaseItemTrailerTypes", + column: "ItemId"); + + migrationBuilder.CreateIndex( + name: "IX_CustomItemDisplayPreferences_UserId_ItemId_Client_Key", + table: "CustomItemDisplayPreferences", + columns: new[] { "UserId", "ItemId", "Client", "Key" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_DeviceOptions_DeviceId", + table: "DeviceOptions", + column: "DeviceId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Devices_AccessToken_DateLastActivity", + table: "Devices", + columns: new[] { "AccessToken", "DateLastActivity" }); + + migrationBuilder.CreateIndex( + name: "IX_Devices_DeviceId", + table: "Devices", + column: "DeviceId"); + + migrationBuilder.CreateIndex( + name: "IX_Devices_DeviceId_DateLastActivity", + table: "Devices", + columns: new[] { "DeviceId", "DateLastActivity" }); + + migrationBuilder.CreateIndex( + name: "IX_Devices_UserId_DeviceId", + table: "Devices", + columns: new[] { "UserId", "DeviceId" }); + + migrationBuilder.CreateIndex( + name: "IX_DisplayPreferences_UserId_ItemId_Client", + table: "DisplayPreferences", + columns: new[] { "UserId", "ItemId", "Client" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_HomeSection_DisplayPreferencesId", + table: "HomeSection", + column: "DisplayPreferencesId"); + + migrationBuilder.CreateIndex( + name: "IX_ImageInfos_UserId", + table: "ImageInfos", + column: "UserId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ItemDisplayPreferences_UserId", + table: "ItemDisplayPreferences", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_ItemValues_Type_CleanValue", + table: "ItemValues", + columns: new[] { "Type", "CleanValue" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ItemValuesMap_ItemId", + table: "ItemValuesMap", + column: "ItemId"); + + migrationBuilder.CreateIndex( + name: "IX_MediaStreamInfos_StreamIndex", + table: "MediaStreamInfos", + column: "StreamIndex"); + + migrationBuilder.CreateIndex( + name: "IX_MediaStreamInfos_StreamIndex_StreamType", + table: "MediaStreamInfos", + columns: new[] { "StreamIndex", "StreamType" }); + + migrationBuilder.CreateIndex( + name: "IX_MediaStreamInfos_StreamIndex_StreamType_Language", + table: "MediaStreamInfos", + columns: new[] { "StreamIndex", "StreamType", "Language" }); + + migrationBuilder.CreateIndex( + name: "IX_MediaStreamInfos_StreamType", + table: "MediaStreamInfos", + column: "StreamType"); + + 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"); + + migrationBuilder.CreateIndex( + name: "IX_Peoples_Name", + table: "Peoples", + column: "Name"); + + // this was edited manually because "UserId" is a reserved name in pgsql + migrationBuilder.CreateIndex( + name: "IX_Permissions_UserId_Kind", + table: "Permissions", + columns: new[] { "UserId", "Kind" }, + unique: true, + filter: "\"Permissions\".\"UserId\" IS NOT NULL"); + + // this was edited manually because "UserId" is a reserved name in pgsql + migrationBuilder.CreateIndex( + name: "IX_Preferences_UserId_Kind", + table: "Preferences", + columns: new[] { "UserId", "Kind" }, + unique: true, + filter: "\"Preferences\".\"UserId\" IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_UserData_ItemId_UserId_IsFavorite", + table: "UserData", + columns: new[] { "ItemId", "UserId", "IsFavorite" }); + + migrationBuilder.CreateIndex( + name: "IX_UserData_ItemId_UserId_LastPlayedDate", + table: "UserData", + columns: new[] { "ItemId", "UserId", "LastPlayedDate" }); + + migrationBuilder.CreateIndex( + name: "IX_UserData_ItemId_UserId_PlaybackPositionTicks", + table: "UserData", + columns: new[] { "ItemId", "UserId", "PlaybackPositionTicks" }); + + migrationBuilder.CreateIndex( + name: "IX_UserData_ItemId_UserId_Played", + table: "UserData", + columns: new[] { "ItemId", "UserId", "Played" }); + + migrationBuilder.CreateIndex( + name: "IX_UserData_UserId", + table: "UserData", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Users_Username", + table: "Users", + column: "Username", + unique: true); + } + + /// <inheritdoc /> + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AccessSchedules"); + + migrationBuilder.DropTable( + name: "ActivityLogs"); + + migrationBuilder.DropTable( + name: "AncestorIds"); + + migrationBuilder.DropTable( + name: "ApiKeys"); + + migrationBuilder.DropTable( + name: "AttachmentStreamInfos"); + + migrationBuilder.DropTable( + name: "BaseItemImageInfos"); + + migrationBuilder.DropTable( + name: "BaseItemMetadataFields"); + + migrationBuilder.DropTable( + name: "BaseItemProviders"); + + migrationBuilder.DropTable( + name: "BaseItemTrailerTypes"); + + migrationBuilder.DropTable( + name: "Chapters"); + + migrationBuilder.DropTable( + name: "CustomItemDisplayPreferences"); + + migrationBuilder.DropTable( + name: "DeviceOptions"); + + migrationBuilder.DropTable( + name: "Devices"); + + migrationBuilder.DropTable( + name: "HomeSection"); + + migrationBuilder.DropTable( + name: "ImageInfos"); + + migrationBuilder.DropTable( + name: "ItemDisplayPreferences"); + + migrationBuilder.DropTable( + name: "ItemValuesMap"); + + migrationBuilder.DropTable( + name: "MediaSegments"); + + migrationBuilder.DropTable( + name: "MediaStreamInfos"); + + migrationBuilder.DropTable( + name: "PeopleBaseItemMap"); + + migrationBuilder.DropTable( + name: "Permissions"); + + migrationBuilder.DropTable( + name: "Preferences"); + + migrationBuilder.DropTable( + name: "TrickplayInfos"); + + migrationBuilder.DropTable( + name: "UserData"); + + migrationBuilder.DropTable( + name: "DisplayPreferences"); + + migrationBuilder.DropTable( + name: "ItemValues"); + + migrationBuilder.DropTable( + name: "Peoples"); + + migrationBuilder.DropTable( + name: "BaseItems"); + + migrationBuilder.DropTable( + name: "Users"); + } + } +} |
