20250127174201_InitMigration.cs 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106
  1. using System;
  2. using Microsoft.EntityFrameworkCore.Migrations;
  3. using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
  4. #nullable disable
  5. namespace Jellyfin.Database.Providers.PgSql.Migrations
  6. {
  7. /// <inheritdoc />
  8. public partial class InitMigration : Migration
  9. {
  10. /// <inheritdoc />
  11. protected override void Up(MigrationBuilder migrationBuilder)
  12. {
  13. migrationBuilder.CreateTable(
  14. name: "ActivityLogs",
  15. columns: table => new
  16. {
  17. Id = table.Column<int>(type: "integer", nullable: false)
  18. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  19. Name = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false),
  20. Overview = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
  21. ShortOverview = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
  22. Type = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
  23. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  24. ItemId = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
  25. DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  26. LogSeverity = table.Column<int>(type: "integer", nullable: false),
  27. RowVersion = table.Column<long>(type: "bigint", nullable: false)
  28. },
  29. constraints: table =>
  30. {
  31. table.PrimaryKey("PK_ActivityLogs", x => x.Id);
  32. });
  33. migrationBuilder.CreateTable(
  34. name: "ApiKeys",
  35. columns: table => new
  36. {
  37. Id = table.Column<int>(type: "integer", nullable: false)
  38. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  39. DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  40. DateLastActivity = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  41. Name = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
  42. AccessToken = table.Column<string>(type: "text", nullable: false)
  43. },
  44. constraints: table =>
  45. {
  46. table.PrimaryKey("PK_ApiKeys", x => x.Id);
  47. });
  48. migrationBuilder.CreateTable(
  49. name: "BaseItems",
  50. columns: table => new
  51. {
  52. Id = table.Column<Guid>(type: "uuid", nullable: false),
  53. Type = table.Column<string>(type: "text", nullable: false),
  54. Data = table.Column<string>(type: "text", nullable: true),
  55. Path = table.Column<string>(type: "text", nullable: true),
  56. StartDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  57. EndDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  58. ChannelId = table.Column<string>(type: "text", nullable: true),
  59. IsMovie = table.Column<bool>(type: "boolean", nullable: false),
  60. CommunityRating = table.Column<float>(type: "real", nullable: true),
  61. CustomRating = table.Column<string>(type: "text", nullable: true),
  62. IndexNumber = table.Column<int>(type: "integer", nullable: true),
  63. IsLocked = table.Column<bool>(type: "boolean", nullable: false),
  64. Name = table.Column<string>(type: "text", nullable: true),
  65. OfficialRating = table.Column<string>(type: "text", nullable: true),
  66. MediaType = table.Column<string>(type: "text", nullable: true),
  67. Overview = table.Column<string>(type: "text", nullable: true),
  68. ParentIndexNumber = table.Column<int>(type: "integer", nullable: true),
  69. PremiereDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  70. ProductionYear = table.Column<int>(type: "integer", nullable: true),
  71. Genres = table.Column<string>(type: "text", nullable: true),
  72. SortName = table.Column<string>(type: "text", nullable: true),
  73. ForcedSortName = table.Column<string>(type: "text", nullable: true),
  74. RunTimeTicks = table.Column<long>(type: "bigint", nullable: true),
  75. DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  76. DateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  77. IsSeries = table.Column<bool>(type: "boolean", nullable: false),
  78. EpisodeTitle = table.Column<string>(type: "text", nullable: true),
  79. IsRepeat = table.Column<bool>(type: "boolean", nullable: false),
  80. PreferredMetadataLanguage = table.Column<string>(type: "text", nullable: true),
  81. PreferredMetadataCountryCode = table.Column<string>(type: "text", nullable: true),
  82. DateLastRefreshed = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  83. DateLastSaved = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  84. IsInMixedFolder = table.Column<bool>(type: "boolean", nullable: false),
  85. Studios = table.Column<string>(type: "text", nullable: true),
  86. ExternalServiceId = table.Column<string>(type: "text", nullable: true),
  87. Tags = table.Column<string>(type: "text", nullable: true),
  88. IsFolder = table.Column<bool>(type: "boolean", nullable: false),
  89. InheritedParentalRatingValue = table.Column<int>(type: "integer", nullable: true),
  90. UnratedType = table.Column<string>(type: "text", nullable: true),
  91. CriticRating = table.Column<float>(type: "real", nullable: true),
  92. CleanName = table.Column<string>(type: "text", nullable: true),
  93. PresentationUniqueKey = table.Column<string>(type: "text", nullable: true),
  94. OriginalTitle = table.Column<string>(type: "text", nullable: true),
  95. PrimaryVersionId = table.Column<string>(type: "text", nullable: true),
  96. DateLastMediaAdded = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  97. Album = table.Column<string>(type: "text", nullable: true),
  98. LUFS = table.Column<float>(type: "real", nullable: true),
  99. NormalizationGain = table.Column<float>(type: "real", nullable: true),
  100. IsVirtualItem = table.Column<bool>(type: "boolean", nullable: false),
  101. SeriesName = table.Column<string>(type: "text", nullable: true),
  102. SeasonName = table.Column<string>(type: "text", nullable: true),
  103. ExternalSeriesId = table.Column<string>(type: "text", nullable: true),
  104. Tagline = table.Column<string>(type: "text", nullable: true),
  105. ProductionLocations = table.Column<string>(type: "text", nullable: true),
  106. ExtraIds = table.Column<string>(type: "text", nullable: true),
  107. TotalBitrate = table.Column<int>(type: "integer", nullable: true),
  108. ExtraType = table.Column<int>(type: "integer", nullable: true),
  109. Artists = table.Column<string>(type: "text", nullable: true),
  110. AlbumArtists = table.Column<string>(type: "text", nullable: true),
  111. ExternalId = table.Column<string>(type: "text", nullable: true),
  112. SeriesPresentationUniqueKey = table.Column<string>(type: "text", nullable: true),
  113. ShowId = table.Column<string>(type: "text", nullable: true),
  114. OwnerId = table.Column<string>(type: "text", nullable: true),
  115. Width = table.Column<int>(type: "integer", nullable: true),
  116. Height = table.Column<int>(type: "integer", nullable: true),
  117. Size = table.Column<long>(type: "bigint", nullable: true),
  118. Audio = table.Column<int>(type: "integer", nullable: true),
  119. ParentId = table.Column<Guid>(type: "uuid", nullable: true),
  120. TopParentId = table.Column<Guid>(type: "uuid", nullable: true),
  121. SeasonId = table.Column<Guid>(type: "uuid", nullable: true),
  122. SeriesId = table.Column<Guid>(type: "uuid", nullable: true)
  123. },
  124. constraints: table =>
  125. {
  126. table.PrimaryKey("PK_BaseItems", x => x.Id);
  127. });
  128. migrationBuilder.CreateTable(
  129. name: "CustomItemDisplayPreferences",
  130. columns: table => new
  131. {
  132. Id = table.Column<int>(type: "integer", nullable: false)
  133. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  134. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  135. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  136. Client = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
  137. Key = table.Column<string>(type: "text", nullable: false),
  138. Value = table.Column<string>(type: "text", nullable: true)
  139. },
  140. constraints: table =>
  141. {
  142. table.PrimaryKey("PK_CustomItemDisplayPreferences", x => x.Id);
  143. });
  144. migrationBuilder.CreateTable(
  145. name: "DeviceOptions",
  146. columns: table => new
  147. {
  148. Id = table.Column<int>(type: "integer", nullable: false)
  149. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  150. DeviceId = table.Column<string>(type: "text", nullable: false),
  151. CustomName = table.Column<string>(type: "text", nullable: true)
  152. },
  153. constraints: table =>
  154. {
  155. table.PrimaryKey("PK_DeviceOptions", x => x.Id);
  156. });
  157. migrationBuilder.CreateTable(
  158. name: "ItemValues",
  159. columns: table => new
  160. {
  161. ItemValueId = table.Column<Guid>(type: "uuid", nullable: false),
  162. Type = table.Column<int>(type: "integer", nullable: false),
  163. Value = table.Column<string>(type: "text", nullable: false),
  164. CleanValue = table.Column<string>(type: "text", nullable: false)
  165. },
  166. constraints: table =>
  167. {
  168. table.PrimaryKey("PK_ItemValues", x => x.ItemValueId);
  169. });
  170. migrationBuilder.CreateTable(
  171. name: "MediaSegments",
  172. columns: table => new
  173. {
  174. Id = table.Column<Guid>(type: "uuid", nullable: false),
  175. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  176. Type = table.Column<int>(type: "integer", nullable: false),
  177. EndTicks = table.Column<long>(type: "bigint", nullable: false),
  178. StartTicks = table.Column<long>(type: "bigint", nullable: false),
  179. SegmentProviderId = table.Column<string>(type: "text", nullable: false)
  180. },
  181. constraints: table =>
  182. {
  183. table.PrimaryKey("PK_MediaSegments", x => x.Id);
  184. });
  185. migrationBuilder.CreateTable(
  186. name: "Peoples",
  187. columns: table => new
  188. {
  189. Id = table.Column<Guid>(type: "uuid", nullable: false),
  190. Name = table.Column<string>(type: "text", nullable: false),
  191. PersonType = table.Column<string>(type: "text", nullable: true)
  192. },
  193. constraints: table =>
  194. {
  195. table.PrimaryKey("PK_Peoples", x => x.Id);
  196. });
  197. migrationBuilder.CreateTable(
  198. name: "TrickplayInfos",
  199. columns: table => new
  200. {
  201. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  202. Width = table.Column<int>(type: "integer", nullable: false),
  203. Height = table.Column<int>(type: "integer", nullable: false),
  204. TileWidth = table.Column<int>(type: "integer", nullable: false),
  205. TileHeight = table.Column<int>(type: "integer", nullable: false),
  206. ThumbnailCount = table.Column<int>(type: "integer", nullable: false),
  207. Interval = table.Column<int>(type: "integer", nullable: false),
  208. Bandwidth = table.Column<int>(type: "integer", nullable: false)
  209. },
  210. constraints: table =>
  211. {
  212. table.PrimaryKey("PK_TrickplayInfos", x => new { x.ItemId, x.Width });
  213. });
  214. migrationBuilder.CreateTable(
  215. name: "Users",
  216. columns: table => new
  217. {
  218. Id = table.Column<Guid>(type: "uuid", nullable: false),
  219. Username = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
  220. Password = table.Column<string>(type: "character varying(65535)", maxLength: 65535, nullable: true),
  221. MustUpdatePassword = table.Column<bool>(type: "boolean", nullable: false),
  222. AudioLanguagePreference = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
  223. AuthenticationProviderId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
  224. PasswordResetProviderId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
  225. InvalidLoginAttemptCount = table.Column<int>(type: "integer", nullable: false),
  226. LastActivityDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  227. LastLoginDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  228. LoginAttemptsBeforeLockout = table.Column<int>(type: "integer", nullable: true),
  229. MaxActiveSessions = table.Column<int>(type: "integer", nullable: false),
  230. SubtitleMode = table.Column<int>(type: "integer", nullable: false),
  231. PlayDefaultAudioTrack = table.Column<bool>(type: "boolean", nullable: false),
  232. SubtitleLanguagePreference = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
  233. DisplayMissingEpisodes = table.Column<bool>(type: "boolean", nullable: false),
  234. DisplayCollectionsView = table.Column<bool>(type: "boolean", nullable: false),
  235. EnableLocalPassword = table.Column<bool>(type: "boolean", nullable: false),
  236. HidePlayedInLatest = table.Column<bool>(type: "boolean", nullable: false),
  237. RememberAudioSelections = table.Column<bool>(type: "boolean", nullable: false),
  238. RememberSubtitleSelections = table.Column<bool>(type: "boolean", nullable: false),
  239. EnableNextEpisodeAutoPlay = table.Column<bool>(type: "boolean", nullable: false),
  240. EnableAutoLogin = table.Column<bool>(type: "boolean", nullable: false),
  241. EnableUserPreferenceAccess = table.Column<bool>(type: "boolean", nullable: false),
  242. MaxParentalAgeRating = table.Column<int>(type: "integer", nullable: true),
  243. RemoteClientBitrateLimit = table.Column<int>(type: "integer", nullable: true),
  244. InternalId = table.Column<long>(type: "bigint", nullable: false),
  245. SyncPlayAccess = table.Column<int>(type: "integer", nullable: false),
  246. CastReceiverId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
  247. RowVersion = table.Column<long>(type: "bigint", nullable: false)
  248. },
  249. constraints: table =>
  250. {
  251. table.PrimaryKey("PK_Users", x => x.Id);
  252. });
  253. migrationBuilder.CreateTable(
  254. name: "AncestorIds",
  255. columns: table => new
  256. {
  257. ParentItemId = table.Column<Guid>(type: "uuid", nullable: false),
  258. ItemId = table.Column<Guid>(type: "uuid", nullable: false)
  259. },
  260. constraints: table =>
  261. {
  262. table.PrimaryKey("PK_AncestorIds", x => new { x.ItemId, x.ParentItemId });
  263. table.ForeignKey(
  264. name: "FK_AncestorIds_BaseItems_ItemId",
  265. column: x => x.ItemId,
  266. principalTable: "BaseItems",
  267. principalColumn: "Id",
  268. onDelete: ReferentialAction.Cascade);
  269. table.ForeignKey(
  270. name: "FK_AncestorIds_BaseItems_ParentItemId",
  271. column: x => x.ParentItemId,
  272. principalTable: "BaseItems",
  273. principalColumn: "Id",
  274. onDelete: ReferentialAction.Cascade);
  275. });
  276. migrationBuilder.CreateTable(
  277. name: "AttachmentStreamInfos",
  278. columns: table => new
  279. {
  280. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  281. Index = table.Column<int>(type: "integer", nullable: false),
  282. Codec = table.Column<string>(type: "text", nullable: false),
  283. CodecTag = table.Column<string>(type: "text", nullable: true),
  284. Comment = table.Column<string>(type: "text", nullable: true),
  285. Filename = table.Column<string>(type: "text", nullable: true),
  286. MimeType = table.Column<string>(type: "text", nullable: true)
  287. },
  288. constraints: table =>
  289. {
  290. table.PrimaryKey("PK_AttachmentStreamInfos", x => new { x.ItemId, x.Index });
  291. table.ForeignKey(
  292. name: "FK_AttachmentStreamInfos_BaseItems_ItemId",
  293. column: x => x.ItemId,
  294. principalTable: "BaseItems",
  295. principalColumn: "Id",
  296. onDelete: ReferentialAction.Cascade);
  297. });
  298. migrationBuilder.CreateTable(
  299. name: "BaseItemImageInfos",
  300. columns: table => new
  301. {
  302. Id = table.Column<Guid>(type: "uuid", nullable: false),
  303. Path = table.Column<string>(type: "text", nullable: false),
  304. DateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  305. ImageType = table.Column<int>(type: "integer", nullable: false),
  306. Width = table.Column<int>(type: "integer", nullable: false),
  307. Height = table.Column<int>(type: "integer", nullable: false),
  308. Blurhash = table.Column<byte[]>(type: "bytea", nullable: true),
  309. ItemId = table.Column<Guid>(type: "uuid", nullable: false)
  310. },
  311. constraints: table =>
  312. {
  313. table.PrimaryKey("PK_BaseItemImageInfos", x => x.Id);
  314. table.ForeignKey(
  315. name: "FK_BaseItemImageInfos_BaseItems_ItemId",
  316. column: x => x.ItemId,
  317. principalTable: "BaseItems",
  318. principalColumn: "Id",
  319. onDelete: ReferentialAction.Cascade);
  320. });
  321. migrationBuilder.CreateTable(
  322. name: "BaseItemMetadataFields",
  323. columns: table => new
  324. {
  325. Id = table.Column<int>(type: "integer", nullable: false),
  326. ItemId = table.Column<Guid>(type: "uuid", nullable: false)
  327. },
  328. constraints: table =>
  329. {
  330. table.PrimaryKey("PK_BaseItemMetadataFields", x => new { x.Id, x.ItemId });
  331. table.ForeignKey(
  332. name: "FK_BaseItemMetadataFields_BaseItems_ItemId",
  333. column: x => x.ItemId,
  334. principalTable: "BaseItems",
  335. principalColumn: "Id",
  336. onDelete: ReferentialAction.Cascade);
  337. });
  338. migrationBuilder.CreateTable(
  339. name: "BaseItemProviders",
  340. columns: table => new
  341. {
  342. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  343. ProviderId = table.Column<string>(type: "text", nullable: false),
  344. ProviderValue = table.Column<string>(type: "text", nullable: false)
  345. },
  346. constraints: table =>
  347. {
  348. table.PrimaryKey("PK_BaseItemProviders", x => new { x.ItemId, x.ProviderId });
  349. table.ForeignKey(
  350. name: "FK_BaseItemProviders_BaseItems_ItemId",
  351. column: x => x.ItemId,
  352. principalTable: "BaseItems",
  353. principalColumn: "Id",
  354. onDelete: ReferentialAction.Cascade);
  355. });
  356. migrationBuilder.CreateTable(
  357. name: "BaseItemTrailerTypes",
  358. columns: table => new
  359. {
  360. Id = table.Column<int>(type: "integer", nullable: false),
  361. ItemId = table.Column<Guid>(type: "uuid", nullable: false)
  362. },
  363. constraints: table =>
  364. {
  365. table.PrimaryKey("PK_BaseItemTrailerTypes", x => new { x.Id, x.ItemId });
  366. table.ForeignKey(
  367. name: "FK_BaseItemTrailerTypes_BaseItems_ItemId",
  368. column: x => x.ItemId,
  369. principalTable: "BaseItems",
  370. principalColumn: "Id",
  371. onDelete: ReferentialAction.Cascade);
  372. });
  373. migrationBuilder.CreateTable(
  374. name: "Chapters",
  375. columns: table => new
  376. {
  377. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  378. ChapterIndex = table.Column<int>(type: "integer", nullable: false),
  379. StartPositionTicks = table.Column<long>(type: "bigint", nullable: false),
  380. Name = table.Column<string>(type: "text", nullable: true),
  381. ImagePath = table.Column<string>(type: "text", nullable: true),
  382. ImageDateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: true)
  383. },
  384. constraints: table =>
  385. {
  386. table.PrimaryKey("PK_Chapters", x => new { x.ItemId, x.ChapterIndex });
  387. table.ForeignKey(
  388. name: "FK_Chapters_BaseItems_ItemId",
  389. column: x => x.ItemId,
  390. principalTable: "BaseItems",
  391. principalColumn: "Id",
  392. onDelete: ReferentialAction.Cascade);
  393. });
  394. migrationBuilder.CreateTable(
  395. name: "MediaStreamInfos",
  396. columns: table => new
  397. {
  398. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  399. StreamIndex = table.Column<int>(type: "integer", nullable: false),
  400. StreamType = table.Column<int>(type: "integer", nullable: false),
  401. Codec = table.Column<string>(type: "text", nullable: true),
  402. Language = table.Column<string>(type: "text", nullable: true),
  403. ChannelLayout = table.Column<string>(type: "text", nullable: true),
  404. Profile = table.Column<string>(type: "text", nullable: true),
  405. AspectRatio = table.Column<string>(type: "text", nullable: true),
  406. Path = table.Column<string>(type: "text", nullable: true),
  407. IsInterlaced = table.Column<bool>(type: "boolean", nullable: true),
  408. BitRate = table.Column<int>(type: "integer", nullable: true),
  409. Channels = table.Column<int>(type: "integer", nullable: true),
  410. SampleRate = table.Column<int>(type: "integer", nullable: true),
  411. IsDefault = table.Column<bool>(type: "boolean", nullable: false),
  412. IsForced = table.Column<bool>(type: "boolean", nullable: false),
  413. IsExternal = table.Column<bool>(type: "boolean", nullable: false),
  414. Height = table.Column<int>(type: "integer", nullable: true),
  415. Width = table.Column<int>(type: "integer", nullable: true),
  416. AverageFrameRate = table.Column<float>(type: "real", nullable: true),
  417. RealFrameRate = table.Column<float>(type: "real", nullable: true),
  418. Level = table.Column<float>(type: "real", nullable: true),
  419. PixelFormat = table.Column<string>(type: "text", nullable: true),
  420. BitDepth = table.Column<int>(type: "integer", nullable: true),
  421. IsAnamorphic = table.Column<bool>(type: "boolean", nullable: true),
  422. RefFrames = table.Column<int>(type: "integer", nullable: true),
  423. CodecTag = table.Column<string>(type: "text", nullable: true),
  424. Comment = table.Column<string>(type: "text", nullable: true),
  425. NalLengthSize = table.Column<string>(type: "text", nullable: true),
  426. IsAvc = table.Column<bool>(type: "boolean", nullable: true),
  427. Title = table.Column<string>(type: "text", nullable: true),
  428. TimeBase = table.Column<string>(type: "text", nullable: true),
  429. CodecTimeBase = table.Column<string>(type: "text", nullable: true),
  430. ColorPrimaries = table.Column<string>(type: "text", nullable: true),
  431. ColorSpace = table.Column<string>(type: "text", nullable: true),
  432. ColorTransfer = table.Column<string>(type: "text", nullable: true),
  433. DvVersionMajor = table.Column<int>(type: "integer", nullable: true),
  434. DvVersionMinor = table.Column<int>(type: "integer", nullable: true),
  435. DvProfile = table.Column<int>(type: "integer", nullable: true),
  436. DvLevel = table.Column<int>(type: "integer", nullable: true),
  437. RpuPresentFlag = table.Column<int>(type: "integer", nullable: true),
  438. ElPresentFlag = table.Column<int>(type: "integer", nullable: true),
  439. BlPresentFlag = table.Column<int>(type: "integer", nullable: true),
  440. DvBlSignalCompatibilityId = table.Column<int>(type: "integer", nullable: true),
  441. IsHearingImpaired = table.Column<bool>(type: "boolean", nullable: true),
  442. Rotation = table.Column<int>(type: "integer", nullable: true),
  443. KeyFrames = table.Column<string>(type: "text", nullable: true)
  444. },
  445. constraints: table =>
  446. {
  447. table.PrimaryKey("PK_MediaStreamInfos", x => new { x.ItemId, x.StreamIndex });
  448. table.ForeignKey(
  449. name: "FK_MediaStreamInfos_BaseItems_ItemId",
  450. column: x => x.ItemId,
  451. principalTable: "BaseItems",
  452. principalColumn: "Id",
  453. onDelete: ReferentialAction.Cascade);
  454. });
  455. migrationBuilder.CreateTable(
  456. name: "ItemValuesMap",
  457. columns: table => new
  458. {
  459. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  460. ItemValueId = table.Column<Guid>(type: "uuid", nullable: false)
  461. },
  462. constraints: table =>
  463. {
  464. table.PrimaryKey("PK_ItemValuesMap", x => new { x.ItemValueId, x.ItemId });
  465. table.ForeignKey(
  466. name: "FK_ItemValuesMap_BaseItems_ItemId",
  467. column: x => x.ItemId,
  468. principalTable: "BaseItems",
  469. principalColumn: "Id",
  470. onDelete: ReferentialAction.Cascade);
  471. table.ForeignKey(
  472. name: "FK_ItemValuesMap_ItemValues_ItemValueId",
  473. column: x => x.ItemValueId,
  474. principalTable: "ItemValues",
  475. principalColumn: "ItemValueId",
  476. onDelete: ReferentialAction.Cascade);
  477. });
  478. migrationBuilder.CreateTable(
  479. name: "PeopleBaseItemMap",
  480. columns: table => new
  481. {
  482. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  483. PeopleId = table.Column<Guid>(type: "uuid", nullable: false),
  484. SortOrder = table.Column<int>(type: "integer", nullable: true),
  485. ListOrder = table.Column<int>(type: "integer", nullable: true),
  486. Role = table.Column<string>(type: "text", nullable: true)
  487. },
  488. constraints: table =>
  489. {
  490. table.PrimaryKey("PK_PeopleBaseItemMap", x => new { x.ItemId, x.PeopleId });
  491. table.ForeignKey(
  492. name: "FK_PeopleBaseItemMap_BaseItems_ItemId",
  493. column: x => x.ItemId,
  494. principalTable: "BaseItems",
  495. principalColumn: "Id",
  496. onDelete: ReferentialAction.Cascade);
  497. table.ForeignKey(
  498. name: "FK_PeopleBaseItemMap_Peoples_PeopleId",
  499. column: x => x.PeopleId,
  500. principalTable: "Peoples",
  501. principalColumn: "Id",
  502. onDelete: ReferentialAction.Cascade);
  503. });
  504. migrationBuilder.CreateTable(
  505. name: "AccessSchedules",
  506. columns: table => new
  507. {
  508. Id = table.Column<int>(type: "integer", nullable: false)
  509. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  510. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  511. DayOfWeek = table.Column<int>(type: "integer", nullable: false),
  512. StartHour = table.Column<double>(type: "double precision", nullable: false),
  513. EndHour = table.Column<double>(type: "double precision", nullable: false)
  514. },
  515. constraints: table =>
  516. {
  517. table.PrimaryKey("PK_AccessSchedules", x => x.Id);
  518. table.ForeignKey(
  519. name: "FK_AccessSchedules_Users_UserId",
  520. column: x => x.UserId,
  521. principalTable: "Users",
  522. principalColumn: "Id",
  523. onDelete: ReferentialAction.Cascade);
  524. });
  525. migrationBuilder.CreateTable(
  526. name: "Devices",
  527. columns: table => new
  528. {
  529. Id = table.Column<int>(type: "integer", nullable: false)
  530. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  531. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  532. AccessToken = table.Column<string>(type: "text", nullable: false),
  533. AppName = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
  534. AppVersion = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
  535. DeviceName = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
  536. DeviceId = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
  537. IsActive = table.Column<bool>(type: "boolean", nullable: false),
  538. DateCreated = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  539. DateModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
  540. DateLastActivity = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
  541. },
  542. constraints: table =>
  543. {
  544. table.PrimaryKey("PK_Devices", x => x.Id);
  545. table.ForeignKey(
  546. name: "FK_Devices_Users_UserId",
  547. column: x => x.UserId,
  548. principalTable: "Users",
  549. principalColumn: "Id",
  550. onDelete: ReferentialAction.Cascade);
  551. });
  552. migrationBuilder.CreateTable(
  553. name: "DisplayPreferences",
  554. columns: table => new
  555. {
  556. Id = table.Column<int>(type: "integer", nullable: false)
  557. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  558. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  559. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  560. Client = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
  561. ShowSidebar = table.Column<bool>(type: "boolean", nullable: false),
  562. ShowBackdrop = table.Column<bool>(type: "boolean", nullable: false),
  563. ScrollDirection = table.Column<int>(type: "integer", nullable: false),
  564. IndexBy = table.Column<int>(type: "integer", nullable: true),
  565. SkipForwardLength = table.Column<int>(type: "integer", nullable: false),
  566. SkipBackwardLength = table.Column<int>(type: "integer", nullable: false),
  567. ChromecastVersion = table.Column<int>(type: "integer", nullable: false),
  568. EnableNextVideoInfoOverlay = table.Column<bool>(type: "boolean", nullable: false),
  569. DashboardTheme = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
  570. TvHome = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true)
  571. },
  572. constraints: table =>
  573. {
  574. table.PrimaryKey("PK_DisplayPreferences", x => x.Id);
  575. table.ForeignKey(
  576. name: "FK_DisplayPreferences_Users_UserId",
  577. column: x => x.UserId,
  578. principalTable: "Users",
  579. principalColumn: "Id",
  580. onDelete: ReferentialAction.Cascade);
  581. });
  582. migrationBuilder.CreateTable(
  583. name: "ImageInfos",
  584. columns: table => new
  585. {
  586. Id = table.Column<int>(type: "integer", nullable: false)
  587. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  588. UserId = table.Column<Guid>(type: "uuid", nullable: true),
  589. Path = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false),
  590. LastModified = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
  591. },
  592. constraints: table =>
  593. {
  594. table.PrimaryKey("PK_ImageInfos", x => x.Id);
  595. table.ForeignKey(
  596. name: "FK_ImageInfos_Users_UserId",
  597. column: x => x.UserId,
  598. principalTable: "Users",
  599. principalColumn: "Id",
  600. onDelete: ReferentialAction.Cascade);
  601. });
  602. migrationBuilder.CreateTable(
  603. name: "ItemDisplayPreferences",
  604. columns: table => new
  605. {
  606. Id = table.Column<int>(type: "integer", nullable: false)
  607. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  608. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  609. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  610. Client = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
  611. ViewType = table.Column<int>(type: "integer", nullable: false),
  612. RememberIndexing = table.Column<bool>(type: "boolean", nullable: false),
  613. IndexBy = table.Column<int>(type: "integer", nullable: true),
  614. RememberSorting = table.Column<bool>(type: "boolean", nullable: false),
  615. SortBy = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
  616. SortOrder = table.Column<int>(type: "integer", nullable: false)
  617. },
  618. constraints: table =>
  619. {
  620. table.PrimaryKey("PK_ItemDisplayPreferences", x => x.Id);
  621. table.ForeignKey(
  622. name: "FK_ItemDisplayPreferences_Users_UserId",
  623. column: x => x.UserId,
  624. principalTable: "Users",
  625. principalColumn: "Id",
  626. onDelete: ReferentialAction.Cascade);
  627. });
  628. migrationBuilder.CreateTable(
  629. name: "Permissions",
  630. columns: table => new
  631. {
  632. Id = table.Column<int>(type: "integer", nullable: false)
  633. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  634. UserId = table.Column<Guid>(type: "uuid", nullable: true),
  635. Kind = table.Column<int>(type: "integer", nullable: false),
  636. Value = table.Column<bool>(type: "boolean", nullable: false),
  637. RowVersion = table.Column<long>(type: "bigint", nullable: false),
  638. Permission_Permissions_Guid = table.Column<Guid>(type: "uuid", nullable: true)
  639. },
  640. constraints: table =>
  641. {
  642. table.PrimaryKey("PK_Permissions", x => x.Id);
  643. table.ForeignKey(
  644. name: "FK_Permissions_Users_UserId",
  645. column: x => x.UserId,
  646. principalTable: "Users",
  647. principalColumn: "Id",
  648. onDelete: ReferentialAction.Cascade);
  649. });
  650. migrationBuilder.CreateTable(
  651. name: "Preferences",
  652. columns: table => new
  653. {
  654. Id = table.Column<int>(type: "integer", nullable: false)
  655. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  656. UserId = table.Column<Guid>(type: "uuid", nullable: true),
  657. Kind = table.Column<int>(type: "integer", nullable: false),
  658. Value = table.Column<string>(type: "character varying(65535)", maxLength: 65535, nullable: false),
  659. RowVersion = table.Column<long>(type: "bigint", nullable: false),
  660. Preference_Preferences_Guid = table.Column<Guid>(type: "uuid", nullable: true)
  661. },
  662. constraints: table =>
  663. {
  664. table.PrimaryKey("PK_Preferences", x => x.Id);
  665. table.ForeignKey(
  666. name: "FK_Preferences_Users_UserId",
  667. column: x => x.UserId,
  668. principalTable: "Users",
  669. principalColumn: "Id",
  670. onDelete: ReferentialAction.Cascade);
  671. });
  672. migrationBuilder.CreateTable(
  673. name: "UserData",
  674. columns: table => new
  675. {
  676. CustomDataKey = table.Column<string>(type: "text", nullable: false),
  677. ItemId = table.Column<Guid>(type: "uuid", nullable: false),
  678. UserId = table.Column<Guid>(type: "uuid", nullable: false),
  679. Rating = table.Column<double>(type: "double precision", nullable: true),
  680. PlaybackPositionTicks = table.Column<long>(type: "bigint", nullable: false),
  681. PlayCount = table.Column<int>(type: "integer", nullable: false),
  682. IsFavorite = table.Column<bool>(type: "boolean", nullable: false),
  683. LastPlayedDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
  684. Played = table.Column<bool>(type: "boolean", nullable: false),
  685. AudioStreamIndex = table.Column<int>(type: "integer", nullable: true),
  686. SubtitleStreamIndex = table.Column<int>(type: "integer", nullable: true),
  687. Likes = table.Column<bool>(type: "boolean", nullable: true)
  688. },
  689. constraints: table =>
  690. {
  691. table.PrimaryKey("PK_UserData", x => new { x.ItemId, x.UserId, x.CustomDataKey });
  692. table.ForeignKey(
  693. name: "FK_UserData_BaseItems_ItemId",
  694. column: x => x.ItemId,
  695. principalTable: "BaseItems",
  696. principalColumn: "Id",
  697. onDelete: ReferentialAction.Cascade);
  698. table.ForeignKey(
  699. name: "FK_UserData_Users_UserId",
  700. column: x => x.UserId,
  701. principalTable: "Users",
  702. principalColumn: "Id",
  703. onDelete: ReferentialAction.Cascade);
  704. });
  705. migrationBuilder.CreateTable(
  706. name: "HomeSection",
  707. columns: table => new
  708. {
  709. Id = table.Column<int>(type: "integer", nullable: false)
  710. .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
  711. DisplayPreferencesId = table.Column<int>(type: "integer", nullable: false),
  712. Order = table.Column<int>(type: "integer", nullable: false),
  713. Type = table.Column<int>(type: "integer", nullable: false)
  714. },
  715. constraints: table =>
  716. {
  717. table.PrimaryKey("PK_HomeSection", x => x.Id);
  718. table.ForeignKey(
  719. name: "FK_HomeSection_DisplayPreferences_DisplayPreferencesId",
  720. column: x => x.DisplayPreferencesId,
  721. principalTable: "DisplayPreferences",
  722. principalColumn: "Id",
  723. onDelete: ReferentialAction.Cascade);
  724. });
  725. migrationBuilder.CreateIndex(
  726. name: "IX_AccessSchedules_UserId",
  727. table: "AccessSchedules",
  728. column: "UserId");
  729. migrationBuilder.CreateIndex(
  730. name: "IX_ActivityLogs_DateCreated",
  731. table: "ActivityLogs",
  732. column: "DateCreated");
  733. migrationBuilder.CreateIndex(
  734. name: "IX_AncestorIds_ParentItemId",
  735. table: "AncestorIds",
  736. column: "ParentItemId");
  737. migrationBuilder.CreateIndex(
  738. name: "IX_ApiKeys_AccessToken",
  739. table: "ApiKeys",
  740. column: "AccessToken",
  741. unique: true);
  742. migrationBuilder.CreateIndex(
  743. name: "IX_BaseItemImageInfos_ItemId",
  744. table: "BaseItemImageInfos",
  745. column: "ItemId");
  746. migrationBuilder.CreateIndex(
  747. name: "IX_BaseItemMetadataFields_ItemId",
  748. table: "BaseItemMetadataFields",
  749. column: "ItemId");
  750. migrationBuilder.CreateIndex(
  751. name: "IX_BaseItemProviders_ProviderId_ProviderValue_ItemId",
  752. table: "BaseItemProviders",
  753. columns: new[] { "ProviderId", "ProviderValue", "ItemId" });
  754. migrationBuilder.CreateIndex(
  755. name: "IX_BaseItems_Id_Type_IsFolder_IsVirtualItem",
  756. table: "BaseItems",
  757. columns: new[] { "Id", "Type", "IsFolder", "IsVirtualItem" });
  758. migrationBuilder.CreateIndex(
  759. name: "IX_BaseItems_IsFolder_TopParentId_IsVirtualItem_PresentationUn~",
  760. table: "BaseItems",
  761. columns: new[] { "IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated" });
  762. migrationBuilder.CreateIndex(
  763. name: "IX_BaseItems_MediaType_TopParentId_IsVirtualItem_PresentationU~",
  764. table: "BaseItems",
  765. columns: new[] { "MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey" });
  766. migrationBuilder.CreateIndex(
  767. name: "IX_BaseItems_ParentId",
  768. table: "BaseItems",
  769. column: "ParentId");
  770. migrationBuilder.CreateIndex(
  771. name: "IX_BaseItems_Path",
  772. table: "BaseItems",
  773. column: "Path");
  774. migrationBuilder.CreateIndex(
  775. name: "IX_BaseItems_PresentationUniqueKey",
  776. table: "BaseItems",
  777. column: "PresentationUniqueKey");
  778. migrationBuilder.CreateIndex(
  779. name: "IX_BaseItems_TopParentId_Id",
  780. table: "BaseItems",
  781. columns: new[] { "TopParentId", "Id" });
  782. migrationBuilder.CreateIndex(
  783. name: "IX_BaseItems_Type_SeriesPresentationUniqueKey_IsFolder_IsVirtu~",
  784. table: "BaseItems",
  785. columns: new[] { "Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem" });
  786. migrationBuilder.CreateIndex(
  787. name: "IX_BaseItems_Type_SeriesPresentationUniqueKey_PresentationUniq~",
  788. table: "BaseItems",
  789. columns: new[] { "Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName" });
  790. migrationBuilder.CreateIndex(
  791. name: "IX_BaseItems_Type_TopParentId_Id",
  792. table: "BaseItems",
  793. columns: new[] { "Type", "TopParentId", "Id" });
  794. migrationBuilder.CreateIndex(
  795. name: "IX_BaseItems_Type_TopParentId_IsVirtualItem_PresentationUnique~",
  796. table: "BaseItems",
  797. columns: new[] { "Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated" });
  798. migrationBuilder.CreateIndex(
  799. name: "IX_BaseItems_Type_TopParentId_PresentationUniqueKey",
  800. table: "BaseItems",
  801. columns: new[] { "Type", "TopParentId", "PresentationUniqueKey" });
  802. migrationBuilder.CreateIndex(
  803. name: "IX_BaseItems_Type_TopParentId_StartDate",
  804. table: "BaseItems",
  805. columns: new[] { "Type", "TopParentId", "StartDate" });
  806. migrationBuilder.CreateIndex(
  807. name: "IX_BaseItemTrailerTypes_ItemId",
  808. table: "BaseItemTrailerTypes",
  809. column: "ItemId");
  810. migrationBuilder.CreateIndex(
  811. name: "IX_CustomItemDisplayPreferences_UserId_ItemId_Client_Key",
  812. table: "CustomItemDisplayPreferences",
  813. columns: new[] { "UserId", "ItemId", "Client", "Key" },
  814. unique: true);
  815. migrationBuilder.CreateIndex(
  816. name: "IX_DeviceOptions_DeviceId",
  817. table: "DeviceOptions",
  818. column: "DeviceId",
  819. unique: true);
  820. migrationBuilder.CreateIndex(
  821. name: "IX_Devices_AccessToken_DateLastActivity",
  822. table: "Devices",
  823. columns: new[] { "AccessToken", "DateLastActivity" });
  824. migrationBuilder.CreateIndex(
  825. name: "IX_Devices_DeviceId",
  826. table: "Devices",
  827. column: "DeviceId");
  828. migrationBuilder.CreateIndex(
  829. name: "IX_Devices_DeviceId_DateLastActivity",
  830. table: "Devices",
  831. columns: new[] { "DeviceId", "DateLastActivity" });
  832. migrationBuilder.CreateIndex(
  833. name: "IX_Devices_UserId_DeviceId",
  834. table: "Devices",
  835. columns: new[] { "UserId", "DeviceId" });
  836. migrationBuilder.CreateIndex(
  837. name: "IX_DisplayPreferences_UserId_ItemId_Client",
  838. table: "DisplayPreferences",
  839. columns: new[] { "UserId", "ItemId", "Client" },
  840. unique: true);
  841. migrationBuilder.CreateIndex(
  842. name: "IX_HomeSection_DisplayPreferencesId",
  843. table: "HomeSection",
  844. column: "DisplayPreferencesId");
  845. migrationBuilder.CreateIndex(
  846. name: "IX_ImageInfos_UserId",
  847. table: "ImageInfos",
  848. column: "UserId",
  849. unique: true);
  850. migrationBuilder.CreateIndex(
  851. name: "IX_ItemDisplayPreferences_UserId",
  852. table: "ItemDisplayPreferences",
  853. column: "UserId");
  854. migrationBuilder.CreateIndex(
  855. name: "IX_ItemValues_Type_CleanValue",
  856. table: "ItemValues",
  857. columns: new[] { "Type", "CleanValue" },
  858. unique: true);
  859. migrationBuilder.CreateIndex(
  860. name: "IX_ItemValuesMap_ItemId",
  861. table: "ItemValuesMap",
  862. column: "ItemId");
  863. migrationBuilder.CreateIndex(
  864. name: "IX_MediaStreamInfos_StreamIndex",
  865. table: "MediaStreamInfos",
  866. column: "StreamIndex");
  867. migrationBuilder.CreateIndex(
  868. name: "IX_MediaStreamInfos_StreamIndex_StreamType",
  869. table: "MediaStreamInfos",
  870. columns: new[] { "StreamIndex", "StreamType" });
  871. migrationBuilder.CreateIndex(
  872. name: "IX_MediaStreamInfos_StreamIndex_StreamType_Language",
  873. table: "MediaStreamInfos",
  874. columns: new[] { "StreamIndex", "StreamType", "Language" });
  875. migrationBuilder.CreateIndex(
  876. name: "IX_MediaStreamInfos_StreamType",
  877. table: "MediaStreamInfos",
  878. column: "StreamType");
  879. migrationBuilder.CreateIndex(
  880. name: "IX_PeopleBaseItemMap_ItemId_ListOrder",
  881. table: "PeopleBaseItemMap",
  882. columns: new[] { "ItemId", "ListOrder" });
  883. migrationBuilder.CreateIndex(
  884. name: "IX_PeopleBaseItemMap_ItemId_SortOrder",
  885. table: "PeopleBaseItemMap",
  886. columns: new[] { "ItemId", "SortOrder" });
  887. migrationBuilder.CreateIndex(
  888. name: "IX_PeopleBaseItemMap_PeopleId",
  889. table: "PeopleBaseItemMap",
  890. column: "PeopleId");
  891. migrationBuilder.CreateIndex(
  892. name: "IX_Peoples_Name",
  893. table: "Peoples",
  894. column: "Name");
  895. // this was edited manually because "UserId" is a reserved name in pgsql
  896. migrationBuilder.CreateIndex(
  897. name: "IX_Permissions_UserId_Kind",
  898. table: "Permissions",
  899. columns: new[] { "UserId", "Kind" },
  900. unique: true,
  901. filter: "\"Permissions\".\"UserId\" IS NOT NULL");
  902. // this was edited manually because "UserId" is a reserved name in pgsql
  903. migrationBuilder.CreateIndex(
  904. name: "IX_Preferences_UserId_Kind",
  905. table: "Preferences",
  906. columns: new[] { "UserId", "Kind" },
  907. unique: true,
  908. filter: "\"Preferences\".\"UserId\" IS NOT NULL");
  909. migrationBuilder.CreateIndex(
  910. name: "IX_UserData_ItemId_UserId_IsFavorite",
  911. table: "UserData",
  912. columns: new[] { "ItemId", "UserId", "IsFavorite" });
  913. migrationBuilder.CreateIndex(
  914. name: "IX_UserData_ItemId_UserId_LastPlayedDate",
  915. table: "UserData",
  916. columns: new[] { "ItemId", "UserId", "LastPlayedDate" });
  917. migrationBuilder.CreateIndex(
  918. name: "IX_UserData_ItemId_UserId_PlaybackPositionTicks",
  919. table: "UserData",
  920. columns: new[] { "ItemId", "UserId", "PlaybackPositionTicks" });
  921. migrationBuilder.CreateIndex(
  922. name: "IX_UserData_ItemId_UserId_Played",
  923. table: "UserData",
  924. columns: new[] { "ItemId", "UserId", "Played" });
  925. migrationBuilder.CreateIndex(
  926. name: "IX_UserData_UserId",
  927. table: "UserData",
  928. column: "UserId");
  929. migrationBuilder.CreateIndex(
  930. name: "IX_Users_Username",
  931. table: "Users",
  932. column: "Username",
  933. unique: true);
  934. }
  935. /// <inheritdoc />
  936. protected override void Down(MigrationBuilder migrationBuilder)
  937. {
  938. migrationBuilder.DropTable(
  939. name: "AccessSchedules");
  940. migrationBuilder.DropTable(
  941. name: "ActivityLogs");
  942. migrationBuilder.DropTable(
  943. name: "AncestorIds");
  944. migrationBuilder.DropTable(
  945. name: "ApiKeys");
  946. migrationBuilder.DropTable(
  947. name: "AttachmentStreamInfos");
  948. migrationBuilder.DropTable(
  949. name: "BaseItemImageInfos");
  950. migrationBuilder.DropTable(
  951. name: "BaseItemMetadataFields");
  952. migrationBuilder.DropTable(
  953. name: "BaseItemProviders");
  954. migrationBuilder.DropTable(
  955. name: "BaseItemTrailerTypes");
  956. migrationBuilder.DropTable(
  957. name: "Chapters");
  958. migrationBuilder.DropTable(
  959. name: "CustomItemDisplayPreferences");
  960. migrationBuilder.DropTable(
  961. name: "DeviceOptions");
  962. migrationBuilder.DropTable(
  963. name: "Devices");
  964. migrationBuilder.DropTable(
  965. name: "HomeSection");
  966. migrationBuilder.DropTable(
  967. name: "ImageInfos");
  968. migrationBuilder.DropTable(
  969. name: "ItemDisplayPreferences");
  970. migrationBuilder.DropTable(
  971. name: "ItemValuesMap");
  972. migrationBuilder.DropTable(
  973. name: "MediaSegments");
  974. migrationBuilder.DropTable(
  975. name: "MediaStreamInfos");
  976. migrationBuilder.DropTable(
  977. name: "PeopleBaseItemMap");
  978. migrationBuilder.DropTable(
  979. name: "Permissions");
  980. migrationBuilder.DropTable(
  981. name: "Preferences");
  982. migrationBuilder.DropTable(
  983. name: "TrickplayInfos");
  984. migrationBuilder.DropTable(
  985. name: "UserData");
  986. migrationBuilder.DropTable(
  987. name: "DisplayPreferences");
  988. migrationBuilder.DropTable(
  989. name: "ItemValues");
  990. migrationBuilder.DropTable(
  991. name: "Peoples");
  992. migrationBuilder.DropTable(
  993. name: "BaseItems");
  994. migrationBuilder.DropTable(
  995. name: "Users");
  996. }
  997. }
  998. }