From dc16223e3e954b0086e0554b569696a5e452ddb0 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Wed, 23 Jun 2021 20:15:39 +0200 Subject: [PATCH] Using snake case for postgresql --- Kyoo.Postgresql/Kyoo.Postgresql.csproj | 1 + .../Migrations/20210621175845_Initial.cs | 782 ------------------ ....cs => 20210623174924_Initial.Designer.cs} | 559 +++++++++---- .../Migrations/20210623174924_Initial.cs | 782 ++++++++++++++++++ ...cs => 20210623174932_Triggers.Designer.cs} | 559 +++++++++---- ...Triggers.cs => 20210623174932_Triggers.cs} | 16 +- .../PostgresContextModelSnapshot.cs | 557 +++++++++---- Kyoo.Postgresql/PostgresContext.cs | 1 + 8 files changed, 1925 insertions(+), 1332 deletions(-) delete mode 100644 Kyoo.Postgresql/Migrations/20210621175845_Initial.cs rename Kyoo.Postgresql/Migrations/{20210621175845_Initial.Designer.cs => 20210623174924_Initial.Designer.cs} (57%) create mode 100644 Kyoo.Postgresql/Migrations/20210623174924_Initial.cs rename Kyoo.Postgresql/Migrations/{20210621175855_Triggers.Designer.cs => 20210623174932_Triggers.Designer.cs} (57%) rename Kyoo.Postgresql/Migrations/{20210621175855_Triggers.cs => 20210623174932_Triggers.cs} (70%) diff --git a/Kyoo.Postgresql/Kyoo.Postgresql.csproj b/Kyoo.Postgresql/Kyoo.Postgresql.csproj index 6c67a653..096b1bcc 100644 --- a/Kyoo.Postgresql/Kyoo.Postgresql.csproj +++ b/Kyoo.Postgresql/Kyoo.Postgresql.csproj @@ -18,6 +18,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Kyoo.Postgresql/Migrations/20210621175845_Initial.cs b/Kyoo.Postgresql/Migrations/20210621175845_Initial.cs deleted file mode 100644 index 7fe643bd..00000000 --- a/Kyoo.Postgresql/Migrations/20210621175845_Initial.cs +++ /dev/null @@ -1,782 +0,0 @@ -using System; -using System.Collections.Generic; -using Kyoo.Models; -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -namespace Kyoo.Postgresql.Migrations -{ - public partial class Initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterDatabase() - .Annotation("Npgsql:Enum:item_type", "show,movie,collection") - .Annotation("Npgsql:Enum:status", "finished,airing,planned,unknown") - .Annotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle,attachment"); - - migrationBuilder.CreateTable( - name: "Collections", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: true), - Poster = table.Column(type: "text", nullable: true), - Overview = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Collections", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "Genres", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Genres", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "Libraries", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: true), - Paths = table.Column(type: "text[]", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Libraries", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "People", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: true), - Poster = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_People", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "Providers", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: true), - Logo = table.Column(type: "text", nullable: true), - LogoExtension = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Providers", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "Studios", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Studios", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "Users", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Username = table.Column(type: "text", nullable: true), - Email = table.Column(type: "text", nullable: true), - Password = table.Column(type: "text", nullable: true), - Permissions = table.Column(type: "text[]", nullable: true), - ExtraData = table.Column>(type: "jsonb", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Users", x => x.ID); - }); - - migrationBuilder.CreateTable( - name: "Link", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Link", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_Link_Collections_SecondID", - column: x => x.SecondID, - principalTable: "Collections", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Link_Libraries_FirstID", - column: x => x.FirstID, - principalTable: "Libraries", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Link", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Link", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_Link_Libraries_FirstID", - column: x => x.FirstID, - principalTable: "Libraries", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Link_Providers_SecondID", - column: x => x.SecondID, - principalTable: "Providers", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "MetadataID", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false), - DataID = table.Column(type: "text", nullable: true), - Link = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_MetadataID", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_MetadataID_People_FirstID", - column: x => x.FirstID, - principalTable: "People", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataID_Providers_SecondID", - column: x => x.SecondID, - principalTable: "Providers", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Shows", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: false), - Title = table.Column(type: "text", nullable: true), - Aliases = table.Column(type: "text[]", nullable: true), - Path = table.Column(type: "text", nullable: true), - Overview = table.Column(type: "text", nullable: true), - Status = table.Column(type: "status", nullable: true), - TrailerUrl = table.Column(type: "text", nullable: true), - StartAir = table.Column(type: "timestamp without time zone", nullable: true), - EndAir = table.Column(type: "timestamp without time zone", nullable: true), - Poster = table.Column(type: "text", nullable: true), - Logo = table.Column(type: "text", nullable: true), - Backdrop = table.Column(type: "text", nullable: true), - IsMovie = table.Column(type: "boolean", nullable: false), - StudioID = table.Column(type: "integer", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Shows", x => x.ID); - table.ForeignKey( - name: "FK_Shows_Studios_StudioID", - column: x => x.StudioID, - principalTable: "Studios", - principalColumn: "ID", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "Link", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Link", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_Link_Collections_FirstID", - column: x => x.FirstID, - principalTable: "Collections", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Link_Shows_SecondID", - column: x => x.SecondID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Link", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Link", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_Link_Libraries_FirstID", - column: x => x.FirstID, - principalTable: "Libraries", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Link_Shows_SecondID", - column: x => x.SecondID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Link", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Link", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_Link_Genres_SecondID", - column: x => x.SecondID, - principalTable: "Genres", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Link_Shows_FirstID", - column: x => x.FirstID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Link", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Link", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_Link_Shows_SecondID", - column: x => x.SecondID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Link_Users_FirstID", - column: x => x.FirstID, - principalTable: "Users", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "MetadataID", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false), - DataID = table.Column(type: "text", nullable: true), - Link = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_MetadataID", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_MetadataID_Providers_SecondID", - column: x => x.SecondID, - principalTable: "Providers", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataID_Shows_FirstID", - column: x => x.FirstID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PeopleRoles", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ForPeople = table.Column(type: "boolean", nullable: false), - PeopleID = table.Column(type: "integer", nullable: false), - ShowID = table.Column(type: "integer", nullable: false), - Type = table.Column(type: "text", nullable: true), - Role = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PeopleRoles", x => x.ID); - table.ForeignKey( - name: "FK_PeopleRoles_People_PeopleID", - column: x => x.PeopleID, - principalTable: "People", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PeopleRoles_Shows_ShowID", - column: x => x.ShowID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Seasons", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: true), - ShowID = table.Column(type: "integer", nullable: false), - SeasonNumber = table.Column(type: "integer", nullable: false), - Title = table.Column(type: "text", nullable: true), - Overview = table.Column(type: "text", nullable: true), - StartDate = table.Column(type: "timestamp without time zone", nullable: true), - EndDate = table.Column(type: "timestamp without time zone", nullable: true), - Poster = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Seasons", x => x.ID); - table.ForeignKey( - name: "FK_Seasons_Shows_ShowID", - column: x => x.ShowID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Episodes", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: true), - ShowID = table.Column(type: "integer", nullable: false), - SeasonID = table.Column(type: "integer", nullable: true), - SeasonNumber = table.Column(type: "integer", nullable: false), - EpisodeNumber = table.Column(type: "integer", nullable: false), - AbsoluteNumber = table.Column(type: "integer", nullable: false), - Path = table.Column(type: "text", nullable: true), - Thumb = table.Column(type: "text", nullable: true), - Title = table.Column(type: "text", nullable: true), - Overview = table.Column(type: "text", nullable: true), - ReleaseDate = table.Column(type: "timestamp without time zone", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Episodes", x => x.ID); - table.ForeignKey( - name: "FK_Episodes_Seasons_SeasonID", - column: x => x.SeasonID, - principalTable: "Seasons", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Episodes_Shows_ShowID", - column: x => x.ShowID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "MetadataID", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false), - DataID = table.Column(type: "text", nullable: true), - Link = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_MetadataID", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_MetadataID_Providers_SecondID", - column: x => x.SecondID, - principalTable: "Providers", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataID_Seasons_FirstID", - column: x => x.FirstID, - principalTable: "Seasons", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "MetadataID", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false), - DataID = table.Column(type: "text", nullable: true), - Link = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_MetadataID", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_MetadataID_Episodes_FirstID", - column: x => x.FirstID, - principalTable: "Episodes", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataID_Providers_SecondID", - column: x => x.SecondID, - principalTable: "Providers", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Tracks", - columns: table => new - { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Slug = table.Column(type: "text", nullable: true), - Title = table.Column(type: "text", nullable: true), - Language = table.Column(type: "text", nullable: true), - Codec = table.Column(type: "text", nullable: true), - IsDefault = table.Column(type: "boolean", nullable: false), - IsForced = table.Column(type: "boolean", nullable: false), - IsExternal = table.Column(type: "boolean", nullable: false), - Path = table.Column(type: "text", nullable: true), - Type = table.Column(type: "stream_type", nullable: false), - EpisodeID = table.Column(type: "integer", nullable: false), - TrackIndex = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Tracks", x => x.ID); - table.ForeignKey( - name: "FK_Tracks_Episodes_EpisodeID", - column: x => x.EpisodeID, - principalTable: "Episodes", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "WatchedEpisodes", - columns: table => new - { - FirstID = table.Column(type: "integer", nullable: false), - SecondID = table.Column(type: "integer", nullable: false), - WatchedPercentage = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_WatchedEpisodes", x => new { x.FirstID, x.SecondID }); - table.ForeignKey( - name: "FK_WatchedEpisodes_Episodes_SecondID", - column: x => x.SecondID, - principalTable: "Episodes", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_WatchedEpisodes_Users_FirstID", - column: x => x.FirstID, - principalTable: "Users", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_Collections_Slug", - table: "Collections", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Episodes_SeasonID", - table: "Episodes", - column: "SeasonID"); - - migrationBuilder.CreateIndex( - name: "IX_Episodes_ShowID_SeasonNumber_EpisodeNumber_AbsoluteNumber", - table: "Episodes", - columns: new[] { "ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Episodes_Slug", - table: "Episodes", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Genres_Slug", - table: "Genres", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Libraries_Slug", - table: "Libraries", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Link_SecondID", - table: "Link", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_Link_SecondID", - table: "Link", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_Link_SecondID", - table: "Link", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_Link_SecondID", - table: "Link", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_Link_SecondID", - table: "Link", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_Link_SecondID", - table: "Link", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_MetadataID_SecondID", - table: "MetadataID", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_MetadataID_SecondID", - table: "MetadataID", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_MetadataID_SecondID", - table: "MetadataID", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_MetadataID_SecondID", - table: "MetadataID", - column: "SecondID"); - - migrationBuilder.CreateIndex( - name: "IX_People_Slug", - table: "People", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_PeopleRoles_PeopleID", - table: "PeopleRoles", - column: "PeopleID"); - - migrationBuilder.CreateIndex( - name: "IX_PeopleRoles_ShowID", - table: "PeopleRoles", - column: "ShowID"); - - migrationBuilder.CreateIndex( - name: "IX_Providers_Slug", - table: "Providers", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Seasons_ShowID_SeasonNumber", - table: "Seasons", - columns: new[] { "ShowID", "SeasonNumber" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Seasons_Slug", - table: "Seasons", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Shows_Slug", - table: "Shows", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Shows_StudioID", - table: "Shows", - column: "StudioID"); - - migrationBuilder.CreateIndex( - name: "IX_Studios_Slug", - table: "Studios", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Tracks_EpisodeID_Type_Language_TrackIndex_IsForced", - table: "Tracks", - columns: new[] { "EpisodeID", "Type", "Language", "TrackIndex", "IsForced" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Tracks_Slug", - table: "Tracks", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Users_Slug", - table: "Users", - column: "Slug", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_WatchedEpisodes_SecondID", - table: "WatchedEpisodes", - column: "SecondID"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Link"); - - migrationBuilder.DropTable( - name: "Link"); - - migrationBuilder.DropTable( - name: "Link"); - - migrationBuilder.DropTable( - name: "Link"); - - migrationBuilder.DropTable( - name: "Link"); - - migrationBuilder.DropTable( - name: "Link"); - - migrationBuilder.DropTable( - name: "MetadataID"); - - migrationBuilder.DropTable( - name: "MetadataID"); - - migrationBuilder.DropTable( - name: "MetadataID"); - - migrationBuilder.DropTable( - name: "MetadataID"); - - migrationBuilder.DropTable( - name: "PeopleRoles"); - - migrationBuilder.DropTable( - name: "Tracks"); - - migrationBuilder.DropTable( - name: "WatchedEpisodes"); - - migrationBuilder.DropTable( - name: "Collections"); - - migrationBuilder.DropTable( - name: "Libraries"); - - migrationBuilder.DropTable( - name: "Genres"); - - migrationBuilder.DropTable( - name: "Providers"); - - migrationBuilder.DropTable( - name: "People"); - - migrationBuilder.DropTable( - name: "Episodes"); - - migrationBuilder.DropTable( - name: "Users"); - - migrationBuilder.DropTable( - name: "Seasons"); - - migrationBuilder.DropTable( - name: "Shows"); - - migrationBuilder.DropTable( - name: "Studios"); - } - } -} diff --git a/Kyoo.Postgresql/Migrations/20210621175845_Initial.Designer.cs b/Kyoo.Postgresql/Migrations/20210623174924_Initial.Designer.cs similarity index 57% rename from Kyoo.Postgresql/Migrations/20210621175845_Initial.Designer.cs rename to Kyoo.Postgresql/Migrations/20210623174924_Initial.Designer.cs index 8b99205c..c6943ac2 100644 --- a/Kyoo.Postgresql/Migrations/20210621175845_Initial.Designer.cs +++ b/Kyoo.Postgresql/Migrations/20210623174924_Initial.Designer.cs @@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Kyoo.Postgresql.Migrations { [DbContext(typeof(PostgresContext))] - [Migration("20210621175845_Initial")] + [Migration("20210623174924_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -31,27 +31,34 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_collections"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_collections_slug"); - b.ToTable("Collections"); + b.ToTable("collections"); }); modelBuilder.Entity("Kyoo.Models.Episode", b => @@ -59,53 +66,69 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("AbsoluteNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("absolute_number"); b.Property("EpisodeNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("episode_number"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("ReleaseDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("release_date"); b.Property("SeasonID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_id"); b.Property("SeasonNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_number"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Thumb") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("thumb"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_episodes"); - b.HasIndex("SeasonID"); + b.HasIndex("SeasonID") + .HasDatabaseName("ix_episodes_season_id"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_episodes_slug"); b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_episodes_show_id_season_number_episode_number_absolute_numb"); - b.ToTable("Episodes"); + b.ToTable("episodes"); }); modelBuilder.Entity("Kyoo.Models.Genre", b => @@ -113,21 +136,26 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_genres"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_genres_slug"); - b.ToTable("Genres"); + b.ToTable("genres"); }); modelBuilder.Entity("Kyoo.Models.Library", b => @@ -135,198 +163,252 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Paths") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("paths"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_libraries"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_libraries_slug"); - b.ToTable("Libraries"); + b.ToTable("libraries"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_collection_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_collection_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_collection_show"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_collection"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_collection_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_collection"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_provider"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_provider_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_provider"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_show"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_show_genre"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_show_genre_second_id"); - b.ToTable("Link"); + b.ToTable("link_show_genre"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_user_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_user_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_user_show"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_episode"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_episode_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_episode"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_people"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_people_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_people"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_season"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_season_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_season"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_show_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_show"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -334,24 +416,30 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_people"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_people_slug"); - b.ToTable("People"); + b.ToTable("people"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -359,30 +447,39 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ForPeople") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("for_people"); b.Property("PeopleID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("people_id"); b.Property("Role") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("role"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Type") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("type"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_people_roles"); - b.HasIndex("PeopleID"); + b.HasIndex("PeopleID") + .HasDatabaseName("ix_people_roles_people_id"); - b.HasIndex("ShowID"); + b.HasIndex("ShowID") + .HasDatabaseName("ix_people_roles_show_id"); - b.ToTable("PeopleRoles"); + b.ToTable("people_roles"); }); modelBuilder.Entity("Kyoo.Models.Provider", b => @@ -390,27 +487,34 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Logo") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo"); b.Property("LogoExtension") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo_extension"); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_providers"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_providers_slug"); - b.ToTable("Providers"); + b.ToTable("providers"); }); modelBuilder.Entity("Kyoo.Models.Season", b => @@ -418,42 +522,54 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("EndDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("end_date"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("SeasonNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_number"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("StartDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("start_date"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_seasons"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_seasons_slug"); b.HasIndex("ShowID", "SeasonNumber") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_seasons_show_id_season_number"); - b.ToTable("Seasons"); + b.ToTable("seasons"); }); modelBuilder.Entity("Kyoo.Models.Show", b => @@ -461,59 +577,77 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Aliases") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("aliases"); b.Property("Backdrop") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("backdrop"); b.Property("EndAir") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("end_air"); b.Property("IsMovie") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_movie"); b.Property("Logo") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("StartAir") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("start_air"); b.Property("Status") - .HasColumnType("status"); + .HasColumnType("status") + .HasColumnName("status"); b.Property("StudioID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("studio_id"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); b.Property("TrailerUrl") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("trailer_url"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_shows"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_shows_slug"); - b.HasIndex("StudioID"); + b.HasIndex("StudioID") + .HasDatabaseName("ix_shows_studio_id"); - b.ToTable("Shows"); + b.ToTable("shows"); }); modelBuilder.Entity("Kyoo.Models.Studio", b => @@ -521,21 +655,26 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_studios"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_studios_slug"); - b.ToTable("Studios"); + b.ToTable("studios"); }); modelBuilder.Entity("Kyoo.Models.Track", b => @@ -543,51 +682,66 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Codec") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("codec"); b.Property("EpisodeID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("episode_id"); b.Property("IsDefault") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_default"); b.Property("IsExternal") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_external"); b.Property("IsForced") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_forced"); b.Property("Language") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("language"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); b.Property("TrackIndex") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("track_index"); b.Property("Type") - .HasColumnType("stream_type"); + .HasColumnType("stream_type") + .HasColumnName("type"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_tracks"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_tracks_slug"); b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_tracks_episode_id_type_language_track_index_is_forced"); - b.ToTable("Tracks"); + b.ToTable("tracks"); }); modelBuilder.Entity("Kyoo.Models.User", b => @@ -595,51 +749,65 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Email") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("email"); b.Property>("ExtraData") - .HasColumnType("jsonb"); + .HasColumnType("jsonb") + .HasColumnName("extra_data"); b.Property("Password") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("password"); b.Property("Permissions") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("permissions"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Username") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("username"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_users"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_users_slug"); - b.ToTable("Users"); + b.ToTable("users"); }); modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("WatchedPercentage") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("watched_percentage"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_watched_episodes"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_watched_episodes_second_id"); - b.ToTable("WatchedEpisodes"); + b.ToTable("watched_episodes"); }); modelBuilder.Entity("Kyoo.Models.Episode", b => @@ -647,11 +815,13 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Season", "Season") .WithMany("Episodes") .HasForeignKey("SeasonID") + .HasConstraintName("fk_episodes_seasons_season_id") .OnDelete(DeleteBehavior.Cascade); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("Episodes") .HasForeignKey("ShowID") + .HasConstraintName("fk_episodes_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -665,12 +835,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Collection", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_collection_show_collections_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany("CollectionLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_collection_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -684,12 +856,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("CollectionLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_collection_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Collection", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_collection_collections_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -703,12 +877,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("ProviderLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_provider_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_provider_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -722,12 +898,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_show_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -741,12 +919,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "First") .WithMany("GenreLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_show_genre_shows_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Genre", "Second") .WithMany("ShowLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_show_genre_genres_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -760,12 +940,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.User", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_user_show_users_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_link_user_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -779,12 +961,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_episode_episodes_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_episode_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -798,12 +982,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_people_people_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_people_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -817,12 +1003,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_season_seasons_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_season_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -836,12 +1024,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_show_shows_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_show_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -855,12 +1045,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.People", "People") .WithMany("Roles") .HasForeignKey("PeopleID") + .HasConstraintName("fk_people_roles_people_people_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("People") .HasForeignKey("ShowID") + .HasConstraintName("fk_people_roles_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -874,6 +1066,7 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "Show") .WithMany("Seasons") .HasForeignKey("ShowID") + .HasConstraintName("fk_seasons_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -884,7 +1077,8 @@ namespace Kyoo.Postgresql.Migrations { b.HasOne("Kyoo.Models.Studio", "Studio") .WithMany("Shows") - .HasForeignKey("StudioID"); + .HasForeignKey("StudioID") + .HasConstraintName("fk_shows_studios_studio_id"); b.Navigation("Studio"); }); @@ -894,6 +1088,7 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Episode", "Episode") .WithMany("Tracks") .HasForeignKey("EpisodeID") + .HasConstraintName("fk_tracks_episodes_episode_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -905,12 +1100,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.User", "First") .WithMany("CurrentlyWatching") .HasForeignKey("FirstID") + .HasConstraintName("fk_watched_episodes_users_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Episode", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_watched_episodes_episodes_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); diff --git a/Kyoo.Postgresql/Migrations/20210623174924_Initial.cs b/Kyoo.Postgresql/Migrations/20210623174924_Initial.cs new file mode 100644 index 00000000..45c8e00d --- /dev/null +++ b/Kyoo.Postgresql/Migrations/20210623174924_Initial.cs @@ -0,0 +1,782 @@ +using System; +using System.Collections.Generic; +using Kyoo.Models; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +namespace Kyoo.Postgresql.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("Npgsql:Enum:item_type", "show,movie,collection") + .Annotation("Npgsql:Enum:status", "finished,airing,planned,unknown") + .Annotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle,attachment"); + + migrationBuilder.CreateTable( + name: "collections", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: true), + poster = table.Column(type: "text", nullable: true), + overview = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_collections", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "genres", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_genres", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "libraries", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: true), + paths = table.Column(type: "text[]", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_libraries", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "people", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: true), + poster = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_people", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "providers", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: true), + logo = table.Column(type: "text", nullable: true), + logo_extension = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_providers", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "studios", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + name = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_studios", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "users", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + username = table.Column(type: "text", nullable: true), + email = table.Column(type: "text", nullable: true), + password = table.Column(type: "text", nullable: true), + permissions = table.Column(type: "text[]", nullable: true), + extra_data = table.Column>(type: "jsonb", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_users", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "link_library_collection", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_link_library_collection", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_link_library_collection_collections_second_id", + column: x => x.second_id, + principalTable: "collections", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_link_library_collection_libraries_first_id", + column: x => x.first_id, + principalTable: "libraries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "link_library_provider", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_link_library_provider", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_link_library_provider_libraries_first_id", + column: x => x.first_id, + principalTable: "libraries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_link_library_provider_providers_second_id", + column: x => x.second_id, + principalTable: "providers", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "metadata_id_people", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false), + data_id = table.Column(type: "text", nullable: true), + link = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_metadata_id_people", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_metadata_id_people_people_first_id", + column: x => x.first_id, + principalTable: "people", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_metadata_id_people_providers_second_id", + column: x => x.second_id, + principalTable: "providers", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "shows", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false), + title = table.Column(type: "text", nullable: true), + aliases = table.Column(type: "text[]", nullable: true), + path = table.Column(type: "text", nullable: true), + overview = table.Column(type: "text", nullable: true), + status = table.Column(type: "status", nullable: true), + trailer_url = table.Column(type: "text", nullable: true), + start_air = table.Column(type: "timestamp without time zone", nullable: true), + end_air = table.Column(type: "timestamp without time zone", nullable: true), + poster = table.Column(type: "text", nullable: true), + logo = table.Column(type: "text", nullable: true), + backdrop = table.Column(type: "text", nullable: true), + is_movie = table.Column(type: "boolean", nullable: false), + studio_id = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_shows", x => x.id); + table.ForeignKey( + name: "fk_shows_studios_studio_id", + column: x => x.studio_id, + principalTable: "studios", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "link_collection_show", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_link_collection_show", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_link_collection_show_collections_first_id", + column: x => x.first_id, + principalTable: "collections", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_link_collection_show_shows_second_id", + column: x => x.second_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "link_library_show", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_link_library_show", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_link_library_show_libraries_first_id", + column: x => x.first_id, + principalTable: "libraries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_link_library_show_shows_second_id", + column: x => x.second_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "link_show_genre", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_link_show_genre", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_link_show_genre_genres_second_id", + column: x => x.second_id, + principalTable: "genres", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_link_show_genre_shows_first_id", + column: x => x.first_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "link_user_show", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_link_user_show", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_link_user_show_shows_second_id", + column: x => x.second_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_link_user_show_users_first_id", + column: x => x.first_id, + principalTable: "users", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "metadata_id_show", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false), + data_id = table.Column(type: "text", nullable: true), + link = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_metadata_id_show", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_metadata_id_show_providers_second_id", + column: x => x.second_id, + principalTable: "providers", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_metadata_id_show_shows_first_id", + column: x => x.first_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "people_roles", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + for_people = table.Column(type: "boolean", nullable: false), + people_id = table.Column(type: "integer", nullable: false), + show_id = table.Column(type: "integer", nullable: false), + type = table.Column(type: "text", nullable: true), + role = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_people_roles", x => x.id); + table.ForeignKey( + name: "fk_people_roles_people_people_id", + column: x => x.people_id, + principalTable: "people", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_people_roles_shows_show_id", + column: x => x.show_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "seasons", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: true), + show_id = table.Column(type: "integer", nullable: false), + season_number = table.Column(type: "integer", nullable: false), + title = table.Column(type: "text", nullable: true), + overview = table.Column(type: "text", nullable: true), + start_date = table.Column(type: "timestamp without time zone", nullable: true), + end_date = table.Column(type: "timestamp without time zone", nullable: true), + poster = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_seasons", x => x.id); + table.ForeignKey( + name: "fk_seasons_shows_show_id", + column: x => x.show_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "episodes", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: true), + show_id = table.Column(type: "integer", nullable: false), + season_id = table.Column(type: "integer", nullable: true), + season_number = table.Column(type: "integer", nullable: false), + episode_number = table.Column(type: "integer", nullable: false), + absolute_number = table.Column(type: "integer", nullable: false), + path = table.Column(type: "text", nullable: true), + thumb = table.Column(type: "text", nullable: true), + title = table.Column(type: "text", nullable: true), + overview = table.Column(type: "text", nullable: true), + release_date = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_episodes", x => x.id); + table.ForeignKey( + name: "fk_episodes_seasons_season_id", + column: x => x.season_id, + principalTable: "seasons", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_episodes_shows_show_id", + column: x => x.show_id, + principalTable: "shows", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "metadata_id_season", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false), + data_id = table.Column(type: "text", nullable: true), + link = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_metadata_id_season", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_metadata_id_season_providers_second_id", + column: x => x.second_id, + principalTable: "providers", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_metadata_id_season_seasons_first_id", + column: x => x.first_id, + principalTable: "seasons", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "metadata_id_episode", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false), + data_id = table.Column(type: "text", nullable: true), + link = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_metadata_id_episode", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_metadata_id_episode_episodes_first_id", + column: x => x.first_id, + principalTable: "episodes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_metadata_id_episode_providers_second_id", + column: x => x.second_id, + principalTable: "providers", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "tracks", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: true), + title = table.Column(type: "text", nullable: true), + language = table.Column(type: "text", nullable: true), + codec = table.Column(type: "text", nullable: true), + is_default = table.Column(type: "boolean", nullable: false), + is_forced = table.Column(type: "boolean", nullable: false), + is_external = table.Column(type: "boolean", nullable: false), + path = table.Column(type: "text", nullable: true), + type = table.Column(type: "stream_type", nullable: false), + episode_id = table.Column(type: "integer", nullable: false), + track_index = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_tracks", x => x.id); + table.ForeignKey( + name: "fk_tracks_episodes_episode_id", + column: x => x.episode_id, + principalTable: "episodes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "watched_episodes", + columns: table => new + { + first_id = table.Column(type: "integer", nullable: false), + second_id = table.Column(type: "integer", nullable: false), + watched_percentage = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_watched_episodes", x => new { x.first_id, x.second_id }); + table.ForeignKey( + name: "fk_watched_episodes_episodes_second_id", + column: x => x.second_id, + principalTable: "episodes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_watched_episodes_users_first_id", + column: x => x.first_id, + principalTable: "users", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "ix_collections_slug", + table: "collections", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_episodes_season_id", + table: "episodes", + column: "season_id"); + + migrationBuilder.CreateIndex( + name: "ix_episodes_show_id_season_number_episode_number_absolute_numb", + table: "episodes", + columns: new[] { "show_id", "season_number", "episode_number", "absolute_number" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_episodes_slug", + table: "episodes", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_genres_slug", + table: "genres", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_libraries_slug", + table: "libraries", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_link_collection_show_second_id", + table: "link_collection_show", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_link_library_collection_second_id", + table: "link_library_collection", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_link_library_provider_second_id", + table: "link_library_provider", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_link_library_show_second_id", + table: "link_library_show", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_link_show_genre_second_id", + table: "link_show_genre", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_link_user_show_second_id", + table: "link_user_show", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_metadata_id_episode_second_id", + table: "metadata_id_episode", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_metadata_id_people_second_id", + table: "metadata_id_people", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_metadata_id_season_second_id", + table: "metadata_id_season", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_metadata_id_show_second_id", + table: "metadata_id_show", + column: "second_id"); + + migrationBuilder.CreateIndex( + name: "ix_people_slug", + table: "people", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_people_roles_people_id", + table: "people_roles", + column: "people_id"); + + migrationBuilder.CreateIndex( + name: "ix_people_roles_show_id", + table: "people_roles", + column: "show_id"); + + migrationBuilder.CreateIndex( + name: "ix_providers_slug", + table: "providers", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_seasons_show_id_season_number", + table: "seasons", + columns: new[] { "show_id", "season_number" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_seasons_slug", + table: "seasons", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_shows_slug", + table: "shows", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_shows_studio_id", + table: "shows", + column: "studio_id"); + + migrationBuilder.CreateIndex( + name: "ix_studios_slug", + table: "studios", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_tracks_episode_id_type_language_track_index_is_forced", + table: "tracks", + columns: new[] { "episode_id", "type", "language", "track_index", "is_forced" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_tracks_slug", + table: "tracks", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_users_slug", + table: "users", + column: "slug", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_watched_episodes_second_id", + table: "watched_episodes", + column: "second_id"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "link_collection_show"); + + migrationBuilder.DropTable( + name: "link_library_collection"); + + migrationBuilder.DropTable( + name: "link_library_provider"); + + migrationBuilder.DropTable( + name: "link_library_show"); + + migrationBuilder.DropTable( + name: "link_show_genre"); + + migrationBuilder.DropTable( + name: "link_user_show"); + + migrationBuilder.DropTable( + name: "metadata_id_episode"); + + migrationBuilder.DropTable( + name: "metadata_id_people"); + + migrationBuilder.DropTable( + name: "metadata_id_season"); + + migrationBuilder.DropTable( + name: "metadata_id_show"); + + migrationBuilder.DropTable( + name: "people_roles"); + + migrationBuilder.DropTable( + name: "tracks"); + + migrationBuilder.DropTable( + name: "watched_episodes"); + + migrationBuilder.DropTable( + name: "collections"); + + migrationBuilder.DropTable( + name: "libraries"); + + migrationBuilder.DropTable( + name: "genres"); + + migrationBuilder.DropTable( + name: "providers"); + + migrationBuilder.DropTable( + name: "people"); + + migrationBuilder.DropTable( + name: "episodes"); + + migrationBuilder.DropTable( + name: "users"); + + migrationBuilder.DropTable( + name: "seasons"); + + migrationBuilder.DropTable( + name: "shows"); + + migrationBuilder.DropTable( + name: "studios"); + } + } +} diff --git a/Kyoo.Postgresql/Migrations/20210621175855_Triggers.Designer.cs b/Kyoo.Postgresql/Migrations/20210623174932_Triggers.Designer.cs similarity index 57% rename from Kyoo.Postgresql/Migrations/20210621175855_Triggers.Designer.cs rename to Kyoo.Postgresql/Migrations/20210623174932_Triggers.Designer.cs index 6a4a0163..ebd1669f 100644 --- a/Kyoo.Postgresql/Migrations/20210621175855_Triggers.Designer.cs +++ b/Kyoo.Postgresql/Migrations/20210623174932_Triggers.Designer.cs @@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Kyoo.Postgresql.Migrations { [DbContext(typeof(PostgresContext))] - [Migration("20210621175855_Triggers")] + [Migration("20210623174932_Triggers")] partial class Triggers { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -31,27 +31,34 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_collections"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_collections_slug"); - b.ToTable("Collections"); + b.ToTable("collections"); }); modelBuilder.Entity("Kyoo.Models.Episode", b => @@ -59,53 +66,69 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("AbsoluteNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("absolute_number"); b.Property("EpisodeNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("episode_number"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("ReleaseDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("release_date"); b.Property("SeasonID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_id"); b.Property("SeasonNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_number"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Thumb") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("thumb"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_episodes"); - b.HasIndex("SeasonID"); + b.HasIndex("SeasonID") + .HasDatabaseName("ix_episodes_season_id"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_episodes_slug"); b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_episodes_show_id_season_number_episode_number_absolute_numb"); - b.ToTable("Episodes"); + b.ToTable("episodes"); }); modelBuilder.Entity("Kyoo.Models.Genre", b => @@ -113,21 +136,26 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_genres"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_genres_slug"); - b.ToTable("Genres"); + b.ToTable("genres"); }); modelBuilder.Entity("Kyoo.Models.Library", b => @@ -135,198 +163,252 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Paths") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("paths"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_libraries"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_libraries_slug"); - b.ToTable("Libraries"); + b.ToTable("libraries"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_collection_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_collection_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_collection_show"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_collection"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_collection_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_collection"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_provider"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_provider_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_provider"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_show"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_show_genre"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_show_genre_second_id"); - b.ToTable("Link"); + b.ToTable("link_show_genre"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_user_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_user_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_user_show"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_episode"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_episode_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_episode"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_people"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_people_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_people"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_season"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_season_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_season"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_show_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_show"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -334,24 +416,30 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_people"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_people_slug"); - b.ToTable("People"); + b.ToTable("people"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -359,30 +447,39 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ForPeople") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("for_people"); b.Property("PeopleID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("people_id"); b.Property("Role") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("role"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Type") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("type"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_people_roles"); - b.HasIndex("PeopleID"); + b.HasIndex("PeopleID") + .HasDatabaseName("ix_people_roles_people_id"); - b.HasIndex("ShowID"); + b.HasIndex("ShowID") + .HasDatabaseName("ix_people_roles_show_id"); - b.ToTable("PeopleRoles"); + b.ToTable("people_roles"); }); modelBuilder.Entity("Kyoo.Models.Provider", b => @@ -390,27 +487,34 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Logo") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo"); b.Property("LogoExtension") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo_extension"); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_providers"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_providers_slug"); - b.ToTable("Providers"); + b.ToTable("providers"); }); modelBuilder.Entity("Kyoo.Models.Season", b => @@ -418,42 +522,54 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("EndDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("end_date"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("SeasonNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_number"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("StartDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("start_date"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_seasons"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_seasons_slug"); b.HasIndex("ShowID", "SeasonNumber") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_seasons_show_id_season_number"); - b.ToTable("Seasons"); + b.ToTable("seasons"); }); modelBuilder.Entity("Kyoo.Models.Show", b => @@ -461,59 +577,77 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Aliases") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("aliases"); b.Property("Backdrop") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("backdrop"); b.Property("EndAir") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("end_air"); b.Property("IsMovie") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_movie"); b.Property("Logo") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("StartAir") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("start_air"); b.Property("Status") - .HasColumnType("status"); + .HasColumnType("status") + .HasColumnName("status"); b.Property("StudioID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("studio_id"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); b.Property("TrailerUrl") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("trailer_url"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_shows"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_shows_slug"); - b.HasIndex("StudioID"); + b.HasIndex("StudioID") + .HasDatabaseName("ix_shows_studio_id"); - b.ToTable("Shows"); + b.ToTable("shows"); }); modelBuilder.Entity("Kyoo.Models.Studio", b => @@ -521,21 +655,26 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_studios"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_studios_slug"); - b.ToTable("Studios"); + b.ToTable("studios"); }); modelBuilder.Entity("Kyoo.Models.Track", b => @@ -543,51 +682,66 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Codec") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("codec"); b.Property("EpisodeID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("episode_id"); b.Property("IsDefault") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_default"); b.Property("IsExternal") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_external"); b.Property("IsForced") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_forced"); b.Property("Language") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("language"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); b.Property("TrackIndex") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("track_index"); b.Property("Type") - .HasColumnType("stream_type"); + .HasColumnType("stream_type") + .HasColumnName("type"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_tracks"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_tracks_slug"); b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_tracks_episode_id_type_language_track_index_is_forced"); - b.ToTable("Tracks"); + b.ToTable("tracks"); }); modelBuilder.Entity("Kyoo.Models.User", b => @@ -595,51 +749,65 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Email") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("email"); b.Property>("ExtraData") - .HasColumnType("jsonb"); + .HasColumnType("jsonb") + .HasColumnName("extra_data"); b.Property("Password") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("password"); b.Property("Permissions") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("permissions"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Username") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("username"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_users"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_users_slug"); - b.ToTable("Users"); + b.ToTable("users"); }); modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("WatchedPercentage") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("watched_percentage"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_watched_episodes"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_watched_episodes_second_id"); - b.ToTable("WatchedEpisodes"); + b.ToTable("watched_episodes"); }); modelBuilder.Entity("Kyoo.Models.Episode", b => @@ -647,11 +815,13 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Season", "Season") .WithMany("Episodes") .HasForeignKey("SeasonID") + .HasConstraintName("fk_episodes_seasons_season_id") .OnDelete(DeleteBehavior.Cascade); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("Episodes") .HasForeignKey("ShowID") + .HasConstraintName("fk_episodes_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -665,12 +835,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Collection", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_collection_show_collections_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany("CollectionLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_collection_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -684,12 +856,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("CollectionLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_collection_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Collection", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_collection_collections_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -703,12 +877,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("ProviderLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_provider_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_provider_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -722,12 +898,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_show_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -741,12 +919,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "First") .WithMany("GenreLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_show_genre_shows_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Genre", "Second") .WithMany("ShowLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_show_genre_genres_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -760,12 +940,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.User", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_user_show_users_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_link_user_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -779,12 +961,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_episode_episodes_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_episode_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -798,12 +982,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_people_people_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_people_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -817,12 +1003,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_season_seasons_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_season_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -836,12 +1024,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_show_shows_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_show_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -855,12 +1045,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.People", "People") .WithMany("Roles") .HasForeignKey("PeopleID") + .HasConstraintName("fk_people_roles_people_people_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("People") .HasForeignKey("ShowID") + .HasConstraintName("fk_people_roles_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -874,6 +1066,7 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "Show") .WithMany("Seasons") .HasForeignKey("ShowID") + .HasConstraintName("fk_seasons_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -884,7 +1077,8 @@ namespace Kyoo.Postgresql.Migrations { b.HasOne("Kyoo.Models.Studio", "Studio") .WithMany("Shows") - .HasForeignKey("StudioID"); + .HasForeignKey("StudioID") + .HasConstraintName("fk_shows_studios_studio_id"); b.Navigation("Studio"); }); @@ -894,6 +1088,7 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Episode", "Episode") .WithMany("Tracks") .HasForeignKey("EpisodeID") + .HasConstraintName("fk_tracks_episodes_episode_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -905,12 +1100,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.User", "First") .WithMany("CurrentlyWatching") .HasForeignKey("FirstID") + .HasConstraintName("fk_watched_episodes_users_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Episode", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_watched_episodes_episodes_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); diff --git a/Kyoo.Postgresql/Migrations/20210621175855_Triggers.cs b/Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs similarity index 70% rename from Kyoo.Postgresql/Migrations/20210621175855_Triggers.cs rename to Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs index 25e3d51f..ffd88fc3 100644 --- a/Kyoo.Postgresql/Migrations/20210621175855_Triggers.cs +++ b/Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs @@ -13,10 +13,10 @@ namespace Kyoo.Postgresql.Migrations LANGUAGE PLPGSQL AS $$ BEGIN - NEW.""Slug"" := CONCAT( - (SELECT ""Slug"" FROM ""Shows"" WHERE ""ID"" = NEW.""ShowID""), + NEW.slug := CONCAT( + (SELECT slug FROM shows WHERE id = NEW.show_id), '-s', - NEW.""SeasonNumber"" + NEW.season_number ); RETURN NEW; END @@ -24,7 +24,7 @@ namespace Kyoo.Postgresql.Migrations // language=PostgreSQL migrationBuilder.Sql(@" - CREATE TRIGGER season_slug_trigger BEFORE INSERT OR UPDATE OF ""SeasonNumber"", ""ShowID"" ON ""Seasons"" + CREATE TRIGGER season_slug_trigger BEFORE INSERT OR UPDATE OF season_number, show_id ON seasons FOR EACH ROW EXECUTE PROCEDURE season_slug_update();"); @@ -35,14 +35,14 @@ namespace Kyoo.Postgresql.Migrations LANGUAGE PLPGSQL AS $$ BEGIN - UPDATE ""Seasons"" SET ""Slug"" = CONCAT(new.""Slug"", '-s', ""SeasonNumber"") WHERE ""ShowID"" = NEW.""ID""; + UPDATE seasons SET slug = CONCAT(NEW.slug, '-s', season_number) WHERE show_id = NEW.id; RETURN NEW; END $$;"); // language=PostgreSQL migrationBuilder.Sql(@" - CREATE TRIGGER show_slug_trigger AFTER UPDATE OF ""Slug"" ON ""Shows"" + CREATE TRIGGER show_slug_trigger AFTER UPDATE OF slug ON shows FOR EACH ROW EXECUTE PROCEDURE show_slug_update();"); } @@ -51,11 +51,11 @@ namespace Kyoo.Postgresql.Migrations // language=PostgreSQL migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;"); // language=PostgreSQL - migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON \"Shows\";"); + migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON shows;"); // language=PostgreSQL migrationBuilder.Sql(@"DROP FUNCTION show_slug_update;"); // language=PostgreSQL - migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger;"); + migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger ON seasons;"); } } } \ No newline at end of file diff --git a/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs b/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs index 14f61708..554ef95f 100644 --- a/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs +++ b/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs @@ -29,27 +29,34 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_collections"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_collections_slug"); - b.ToTable("Collections"); + b.ToTable("collections"); }); modelBuilder.Entity("Kyoo.Models.Episode", b => @@ -57,53 +64,69 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("AbsoluteNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("absolute_number"); b.Property("EpisodeNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("episode_number"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("ReleaseDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("release_date"); b.Property("SeasonID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_id"); b.Property("SeasonNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_number"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Thumb") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("thumb"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_episodes"); - b.HasIndex("SeasonID"); + b.HasIndex("SeasonID") + .HasDatabaseName("ix_episodes_season_id"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_episodes_slug"); b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_episodes_show_id_season_number_episode_number_absolute_numb"); - b.ToTable("Episodes"); + b.ToTable("episodes"); }); modelBuilder.Entity("Kyoo.Models.Genre", b => @@ -111,21 +134,26 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_genres"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_genres_slug"); - b.ToTable("Genres"); + b.ToTable("genres"); }); modelBuilder.Entity("Kyoo.Models.Library", b => @@ -133,198 +161,252 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Paths") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("paths"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_libraries"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_libraries_slug"); - b.ToTable("Libraries"); + b.ToTable("libraries"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_collection_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_collection_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_collection_show"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_collection"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_collection_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_collection"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_provider"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_provider_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_provider"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_library_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_library_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_library_show"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_show_genre"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_show_genre_second_id"); - b.ToTable("Link"); + b.ToTable("link_show_genre"); }); modelBuilder.Entity("Kyoo.Models.Link", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_link_user_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_link_user_show_second_id"); - b.ToTable("Link"); + b.ToTable("link_user_show"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_episode"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_episode_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_episode"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_people"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_people_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_people"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_season"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_season_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_season"); }); modelBuilder.Entity("Kyoo.Models.MetadataID", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("DataID") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("data_id"); b.Property("Link") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_metadata_id_show"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_metadata_id_show_second_id"); - b.ToTable("MetadataID"); + b.ToTable("metadata_id_show"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -332,24 +414,30 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_people"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_people_slug"); - b.ToTable("People"); + b.ToTable("people"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -357,30 +445,39 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ForPeople") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("for_people"); b.Property("PeopleID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("people_id"); b.Property("Role") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("role"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Type") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("type"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_people_roles"); - b.HasIndex("PeopleID"); + b.HasIndex("PeopleID") + .HasDatabaseName("ix_people_roles_people_id"); - b.HasIndex("ShowID"); + b.HasIndex("ShowID") + .HasDatabaseName("ix_people_roles_show_id"); - b.ToTable("PeopleRoles"); + b.ToTable("people_roles"); }); modelBuilder.Entity("Kyoo.Models.Provider", b => @@ -388,27 +485,34 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Logo") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo"); b.Property("LogoExtension") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo_extension"); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_providers"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_providers_slug"); - b.ToTable("Providers"); + b.ToTable("providers"); }); modelBuilder.Entity("Kyoo.Models.Season", b => @@ -416,42 +520,54 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("EndDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("end_date"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("SeasonNumber") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("season_number"); b.Property("ShowID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("show_id"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("StartDate") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("start_date"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_seasons"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_seasons_slug"); b.HasIndex("ShowID", "SeasonNumber") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_seasons_show_id_season_number"); - b.ToTable("Seasons"); + b.ToTable("seasons"); }); modelBuilder.Entity("Kyoo.Models.Show", b => @@ -459,59 +575,77 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Aliases") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("aliases"); b.Property("Backdrop") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("backdrop"); b.Property("EndAir") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("end_air"); b.Property("IsMovie") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_movie"); b.Property("Logo") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("logo"); b.Property("Overview") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("overview"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("Poster") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("poster"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("StartAir") - .HasColumnType("timestamp without time zone"); + .HasColumnType("timestamp without time zone") + .HasColumnName("start_air"); b.Property("Status") - .HasColumnType("status"); + .HasColumnType("status") + .HasColumnName("status"); b.Property("StudioID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("studio_id"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); b.Property("TrailerUrl") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("trailer_url"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_shows"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_shows_slug"); - b.HasIndex("StudioID"); + b.HasIndex("StudioID") + .HasDatabaseName("ix_shows_studio_id"); - b.ToTable("Shows"); + b.ToTable("shows"); }); modelBuilder.Entity("Kyoo.Models.Studio", b => @@ -519,21 +653,26 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("name"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_studios"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_studios_slug"); - b.ToTable("Studios"); + b.ToTable("studios"); }); modelBuilder.Entity("Kyoo.Models.Track", b => @@ -541,51 +680,66 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Codec") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("codec"); b.Property("EpisodeID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("episode_id"); b.Property("IsDefault") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_default"); b.Property("IsExternal") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_external"); b.Property("IsForced") - .HasColumnType("boolean"); + .HasColumnType("boolean") + .HasColumnName("is_forced"); b.Property("Language") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("language"); b.Property("Path") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("path"); b.Property("Slug") .ValueGeneratedOnAddOrUpdate() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Title") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("title"); b.Property("TrackIndex") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("track_index"); b.Property("Type") - .HasColumnType("stream_type"); + .HasColumnType("stream_type") + .HasColumnName("type"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_tracks"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_tracks_slug"); b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_tracks_episode_id_type_language_track_index_is_forced"); - b.ToTable("Tracks"); + b.ToTable("tracks"); }); modelBuilder.Entity("Kyoo.Models.User", b => @@ -593,51 +747,65 @@ namespace Kyoo.Postgresql.Migrations b.Property("ID") .ValueGeneratedOnAdd() .HasColumnType("integer") + .HasColumnName("id") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Email") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("email"); b.Property>("ExtraData") - .HasColumnType("jsonb"); + .HasColumnType("jsonb") + .HasColumnName("extra_data"); b.Property("Password") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("password"); b.Property("Permissions") - .HasColumnType("text[]"); + .HasColumnType("text[]") + .HasColumnName("permissions"); b.Property("Slug") .IsRequired() - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("slug"); b.Property("Username") - .HasColumnType("text"); + .HasColumnType("text") + .HasColumnName("username"); - b.HasKey("ID"); + b.HasKey("ID") + .HasName("pk_users"); b.HasIndex("Slug") - .IsUnique(); + .IsUnique() + .HasDatabaseName("ix_users_slug"); - b.ToTable("Users"); + b.ToTable("users"); }); modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b => { b.Property("FirstID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("first_id"); b.Property("SecondID") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("second_id"); b.Property("WatchedPercentage") - .HasColumnType("integer"); + .HasColumnType("integer") + .HasColumnName("watched_percentage"); - b.HasKey("FirstID", "SecondID"); + b.HasKey("FirstID", "SecondID") + .HasName("pk_watched_episodes"); - b.HasIndex("SecondID"); + b.HasIndex("SecondID") + .HasDatabaseName("ix_watched_episodes_second_id"); - b.ToTable("WatchedEpisodes"); + b.ToTable("watched_episodes"); }); modelBuilder.Entity("Kyoo.Models.Episode", b => @@ -645,11 +813,13 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Season", "Season") .WithMany("Episodes") .HasForeignKey("SeasonID") + .HasConstraintName("fk_episodes_seasons_season_id") .OnDelete(DeleteBehavior.Cascade); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("Episodes") .HasForeignKey("ShowID") + .HasConstraintName("fk_episodes_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -663,12 +833,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Collection", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_collection_show_collections_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany("CollectionLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_collection_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -682,12 +854,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("CollectionLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_collection_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Collection", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_collection_collections_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -701,12 +875,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("ProviderLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_provider_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_provider_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -720,12 +896,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Library", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_library_show_libraries_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany("LibraryLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_library_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -739,12 +917,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "First") .WithMany("GenreLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_show_genre_shows_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Genre", "Second") .WithMany("ShowLinks") .HasForeignKey("SecondID") + .HasConstraintName("fk_link_show_genre_genres_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -758,12 +938,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.User", "First") .WithMany("ShowLinks") .HasForeignKey("FirstID") + .HasConstraintName("fk_link_user_show_users_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_link_user_show_shows_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -777,12 +959,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_episode_episodes_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_episode_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -796,12 +980,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_people_people_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_people_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -815,12 +1001,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_season_seasons_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_season_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -834,12 +1022,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "First") .WithMany("ExternalIDs") .HasForeignKey("FirstID") + .HasConstraintName("fk_metadata_id_show_shows_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Provider", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_metadata_id_show_providers_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -853,12 +1043,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.People", "People") .WithMany("Roles") .HasForeignKey("PeopleID") + .HasConstraintName("fk_people_roles_people_people_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("People") .HasForeignKey("ShowID") + .HasConstraintName("fk_people_roles_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -872,6 +1064,7 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Show", "Show") .WithMany("Seasons") .HasForeignKey("ShowID") + .HasConstraintName("fk_seasons_shows_show_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -882,7 +1075,8 @@ namespace Kyoo.Postgresql.Migrations { b.HasOne("Kyoo.Models.Studio", "Studio") .WithMany("Shows") - .HasForeignKey("StudioID"); + .HasForeignKey("StudioID") + .HasConstraintName("fk_shows_studios_studio_id"); b.Navigation("Studio"); }); @@ -892,6 +1086,7 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.Episode", "Episode") .WithMany("Tracks") .HasForeignKey("EpisodeID") + .HasConstraintName("fk_tracks_episodes_episode_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -903,12 +1098,14 @@ namespace Kyoo.Postgresql.Migrations b.HasOne("Kyoo.Models.User", "First") .WithMany("CurrentlyWatching") .HasForeignKey("FirstID") + .HasConstraintName("fk_watched_episodes_users_first_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Kyoo.Models.Episode", "Second") .WithMany() .HasForeignKey("SecondID") + .HasConstraintName("fk_watched_episodes_episodes_second_id") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); diff --git a/Kyoo.Postgresql/PostgresContext.cs b/Kyoo.Postgresql/PostgresContext.cs index a12d52fa..f070a805 100644 --- a/Kyoo.Postgresql/PostgresContext.cs +++ b/Kyoo.Postgresql/PostgresContext.cs @@ -77,6 +77,7 @@ namespace Kyoo.Postgresql optionsBuilder.EnableDetailedErrors().EnableSensitiveDataLogging(); } + optionsBuilder.UseSnakeCaseNamingConvention(); base.OnConfiguring(optionsBuilder); }