From cc672876aee7470f36525c175903536aed3f52da Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 7 Jun 2021 22:30:40 +0200 Subject: [PATCH] Fixing metadata ids --- Kyoo.Common/Models/MetadataID.cs | 14 ++ Kyoo.CommonAPI/DatabaseContext.cs | 8 + Kyoo.CommonAPI/Kyoo.CommonAPI.csproj | 4 +- Kyoo.Postgresql/Kyoo.Postgresql.csproj | 4 +- ....cs => 20210607202403_Initial.Designer.cs} | 193 ++++++++++++------ ...9_Initial.cs => 20210607202403_Initial.cs} | 178 ++++++++++------ .../PostgresContextModelSnapshot.cs | 191 ++++++++++++----- Kyoo.SqLite/Kyoo.SqLite.csproj | 2 +- ....cs => 20210607202259_Initial.Designer.cs} | 190 ++++++++++++----- ...8_Initial.cs => 20210607202259_Initial.cs} | 180 ++++++++++------ .../Migrations/SqLiteContextModelSnapshot.cs | 188 ++++++++++++----- Kyoo.Tests/Kyoo.Tests.csproj | 2 +- Kyoo/Kyoo.csproj | 6 +- 13 files changed, 810 insertions(+), 350 deletions(-) rename Kyoo.Postgresql/Migrations/{20210507203809_Initial.Designer.cs => 20210607202403_Initial.Designer.cs} (84%) rename Kyoo.Postgresql/Migrations/{20210507203809_Initial.cs => 20210607202403_Initial.cs} (84%) rename Kyoo.SqLite/Migrations/{20210529124408_Initial.Designer.cs => 20210607202259_Initial.Designer.cs} (83%) rename Kyoo.SqLite/Migrations/{20210529124408_Initial.cs => 20210607202259_Initial.cs} (84%) diff --git a/Kyoo.Common/Models/MetadataID.cs b/Kyoo.Common/Models/MetadataID.cs index d9ebd933..34872314 100644 --- a/Kyoo.Common/Models/MetadataID.cs +++ b/Kyoo.Common/Models/MetadataID.cs @@ -1,3 +1,6 @@ +using System; +using System.Linq.Expressions; + namespace Kyoo.Models { /// @@ -16,5 +19,16 @@ namespace Kyoo.Models /// The URL of the resource on the external provider. /// public string Link { get; set; } + + /// + /// The expression to retrieve the unique ID of a MetadataID. This is an aggregate of the two resources IDs. + /// + public new static Expression, object>> PrimaryKey + { + get + { + return x => new {First = x.FirstID, Second = x.SecondID}; + } + } } } \ No newline at end of file diff --git a/Kyoo.CommonAPI/DatabaseContext.cs b/Kyoo.CommonAPI/DatabaseContext.cs index 97e0421c..b106a2fb 100644 --- a/Kyoo.CommonAPI/DatabaseContext.cs +++ b/Kyoo.CommonAPI/DatabaseContext.cs @@ -212,18 +212,26 @@ namespace Kyoo .WithMany(x => x.ShowLinks), y => y.HasKey(Link.PrimaryKey)); + modelBuilder.Entity>() + .HasKey(MetadataID.PrimaryKey); modelBuilder.Entity>() .HasOne(x => x.First) .WithMany(x => x.ExternalIDs) .OnDelete(DeleteBehavior.Cascade); + modelBuilder.Entity>() + .HasKey(MetadataID.PrimaryKey); modelBuilder.Entity>() .HasOne(x => x.First) .WithMany(x => x.ExternalIDs) .OnDelete(DeleteBehavior.Cascade); + modelBuilder.Entity>() + .HasKey(MetadataID.PrimaryKey); modelBuilder.Entity>() .HasOne(x => x.First) .WithMany(x => x.ExternalIDs) .OnDelete(DeleteBehavior.Cascade); + modelBuilder.Entity>() + .HasKey(MetadataID.PrimaryKey); modelBuilder.Entity>() .HasOne(x => x.First) .WithMany(x => x.ExternalIDs) diff --git a/Kyoo.CommonAPI/Kyoo.CommonAPI.csproj b/Kyoo.CommonAPI/Kyoo.CommonAPI.csproj index 5288b814..3181be71 100644 --- a/Kyoo.CommonAPI/Kyoo.CommonAPI.csproj +++ b/Kyoo.CommonAPI/Kyoo.CommonAPI.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/Kyoo.Postgresql/Kyoo.Postgresql.csproj b/Kyoo.Postgresql/Kyoo.Postgresql.csproj index 3ef6e4c2..05b767ab 100644 --- a/Kyoo.Postgresql/Kyoo.Postgresql.csproj +++ b/Kyoo.Postgresql/Kyoo.Postgresql.csproj @@ -18,11 +18,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Kyoo.Postgresql/Migrations/20210507203809_Initial.Designer.cs b/Kyoo.Postgresql/Migrations/20210607202403_Initial.Designer.cs similarity index 84% rename from Kyoo.Postgresql/Migrations/20210507203809_Initial.Designer.cs rename to Kyoo.Postgresql/Migrations/20210607202403_Initial.Designer.cs index 834321b2..fe975800 100644 --- a/Kyoo.Postgresql/Migrations/20210507203809_Initial.Designer.cs +++ b/Kyoo.Postgresql/Migrations/20210607202403_Initial.Designer.cs @@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Kyoo.Postgresql.Migrations { [DbContext(typeof(PostgresContext))] - [Migration("20210507203809_Initial")] + [Migration("20210607202403_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -23,7 +23,7 @@ namespace Kyoo.Postgresql.Migrations .HasPostgresEnum(null, "status", new[] { "finished", "airing", "planned", "unknown" }) .HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle", "attachment" }) .HasAnnotation("Relational:MaxIdentifierLength", 63) - .HasAnnotation("ProductVersion", "5.0.5") + .HasAnnotation("ProductVersion", "5.0.6") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); modelBuilder.Entity("Kyoo.Models.Collection", b => @@ -76,9 +76,6 @@ namespace Kyoo.Postgresql.Migrations b.Property("ReleaseDate") .HasColumnType("timestamp without time zone"); - b.Property("Runtime") - .HasColumnType("integer"); - b.Property("SeasonID") .HasColumnType("integer"); @@ -241,47 +238,88 @@ namespace Kyoo.Postgresql.Migrations b.ToTable("Link"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("FirstID") + .HasColumnType("integer"); + + b.Property("SecondID") + .HasColumnType("integer"); b.Property("DataID") .HasColumnType("text"); - b.Property("EpisodeID") + b.Property("Link") + .HasColumnType("text"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("integer"); + b.Property("SecondID") + .HasColumnType("integer"); + + b.Property("DataID") + .HasColumnType("text"); + b.Property("Link") .HasColumnType("text"); - b.Property("PeopleID") + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("integer"); - b.Property("ProviderID") + b.Property("SecondID") .HasColumnType("integer"); - b.Property("SeasonID") + b.Property("DataID") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("integer"); - b.Property("ShowID") + b.Property("SecondID") .HasColumnType("integer"); - b.HasKey("ID"); + b.Property("DataID") + .HasColumnType("text"); - b.HasIndex("EpisodeID"); + b.Property("Link") + .HasColumnType("text"); - b.HasIndex("PeopleID"); + b.HasKey("FirstID", "SecondID"); - b.HasIndex("ProviderID"); + b.HasIndex("SecondID"); - b.HasIndex("SeasonID"); - - b.HasIndex("ShowID"); - - b.ToTable("MetadataIds"); + b.ToTable("MetadataID"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -316,6 +354,9 @@ namespace Kyoo.Postgresql.Migrations .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("ForPeople") + .HasColumnType("boolean"); + b.Property("PeopleID") .HasColumnType("integer"); @@ -372,6 +413,9 @@ namespace Kyoo.Postgresql.Migrations .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("EndDate") + .HasColumnType("timestamp without time zone"); + b.Property("Overview") .HasColumnType("text"); @@ -384,12 +428,12 @@ namespace Kyoo.Postgresql.Migrations b.Property("ShowID") .HasColumnType("integer"); + b.Property("StartDate") + .HasColumnType("timestamp without time zone"); + b.Property("Title") .HasColumnType("text"); - b.Property("Year") - .HasColumnType("integer"); - b.HasKey("ID"); b.HasIndex("ShowID", "SeasonNumber") @@ -411,8 +455,8 @@ namespace Kyoo.Postgresql.Migrations b.Property("Backdrop") .HasColumnType("text"); - b.Property("EndYear") - .HasColumnType("integer"); + b.Property("EndAir") + .HasColumnType("timestamp without time zone"); b.Property("IsMovie") .HasColumnType("boolean"); @@ -433,8 +477,8 @@ namespace Kyoo.Postgresql.Migrations .IsRequired() .HasColumnType("text"); - b.Property("StartYear") - .HasColumnType("integer"); + b.Property("StartAir") + .HasColumnType("timestamp without time zone"); b.Property("Status") .HasColumnType("status"); @@ -708,43 +752,80 @@ namespace Kyoo.Postgresql.Migrations b.Navigation("Second"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.HasOne("Kyoo.Models.Episode", "Episode") + b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") - .HasForeignKey("EpisodeID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.People", "People") - .WithMany("ExternalIDs") - .HasForeignKey("PeopleID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.Provider", "Provider") - .WithMany("MetadataLinks") - .HasForeignKey("ProviderID") + .HasForeignKey("FirstID") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Kyoo.Models.Season", "Season") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") - .HasForeignKey("SeasonID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.HasOne("Kyoo.Models.Show", "Show") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Episode"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("People"); + b.Navigation("First"); - b.Navigation("Provider"); + b.Navigation("Second"); + }); - b.Navigation("Season"); + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Show", "First") + .WithMany("ExternalIDs") + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Show"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -854,8 +935,6 @@ namespace Kyoo.Postgresql.Migrations modelBuilder.Entity("Kyoo.Models.Provider", b => { b.Navigation("LibraryLinks"); - - b.Navigation("MetadataLinks"); }); modelBuilder.Entity("Kyoo.Models.Season", b => diff --git a/Kyoo.Postgresql/Migrations/20210507203809_Initial.cs b/Kyoo.Postgresql/Migrations/20210607202403_Initial.cs similarity index 84% rename from Kyoo.Postgresql/Migrations/20210507203809_Initial.cs rename to Kyoo.Postgresql/Migrations/20210607202403_Initial.cs index 678e90ee..18df2ec7 100644 --- a/Kyoo.Postgresql/Migrations/20210507203809_Initial.cs +++ b/Kyoo.Postgresql/Migrations/20210607202403_Initial.cs @@ -171,6 +171,32 @@ namespace Kyoo.Postgresql.Migrations 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 @@ -184,8 +210,8 @@ namespace Kyoo.Postgresql.Migrations Overview = table.Column(type: "text", nullable: true), Status = table.Column(type: "status", nullable: true), TrailerUrl = table.Column(type: "text", nullable: true), - StartYear = table.Column(type: "integer", nullable: true), - EndYear = table.Column(type: "integer", 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), @@ -299,16 +325,43 @@ namespace Kyoo.Postgresql.Migrations 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), - Role = table.Column(type: "text", nullable: true), - Type = table.Column(type: "text", nullable: true) + Type = table.Column(type: "text", nullable: true), + Role = table.Column(type: "text", nullable: true) }, constraints: table => { @@ -337,7 +390,8 @@ namespace Kyoo.Postgresql.Migrations SeasonNumber = table.Column(type: "integer", nullable: false), Title = table.Column(type: "text", nullable: true), Overview = table.Column(type: "text", nullable: true), - Year = table.Column(type: "integer", 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 => @@ -366,8 +420,7 @@ namespace Kyoo.Postgresql.Migrations 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), - Runtime = table.Column(type: "integer", nullable: false) + ReleaseDate = table.Column(type: "timestamp without time zone", nullable: true) }, constraints: table => { @@ -387,50 +440,53 @@ namespace Kyoo.Postgresql.Migrations }); migrationBuilder.CreateTable( - name: "MetadataIds", + name: "MetadataID", columns: table => new { - ID = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ProviderID = table.Column(type: "integer", nullable: false), - ShowID = table.Column(type: "integer", nullable: true), - EpisodeID = table.Column(type: "integer", nullable: true), - SeasonID = table.Column(type: "integer", nullable: true), - PeopleID = table.Column(type: "integer", nullable: true), + 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_MetadataIds", x => x.ID); + table.PrimaryKey("PK_MetadataID", x => new { x.FirstID, x.SecondID }); table.ForeignKey( - name: "FK_MetadataIds_Episodes_EpisodeID", - column: x => x.EpisodeID, - principalTable: "Episodes", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataIds_People_PeopleID", - column: x => x.PeopleID, - principalTable: "People", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataIds_Providers_ProviderID", - column: x => x.ProviderID, + name: "FK_MetadataID_Providers_SecondID", + column: x => x.SecondID, principalTable: "Providers", principalColumn: "ID", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_MetadataIds_Seasons_SeasonID", - column: x => x.SeasonID, + 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_MetadataIds_Shows_ShowID", - column: x => x.ShowID, - principalTable: "Shows", + 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); }); @@ -441,16 +497,16 @@ namespace Kyoo.Postgresql.Migrations { ID = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - EpisodeID = table.Column(type: "integer", nullable: false), - TrackIndex = table.Column(type: "integer", nullable: false), - IsDefault = table.Column(type: "boolean", nullable: false), - IsForced = table.Column(type: "boolean", nullable: false), - IsExternal = table.Column(type: "boolean", nullable: false), 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) + Type = table.Column(type: "stream_type", nullable: false), + EpisodeID = table.Column(type: "integer", nullable: false), + TrackIndex = table.Column(type: "integer", nullable: false) }, constraints: table => { @@ -548,29 +604,24 @@ namespace Kyoo.Postgresql.Migrations column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_EpisodeID", - table: "MetadataIds", - column: "EpisodeID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_PeopleID", - table: "MetadataIds", - column: "PeopleID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_ProviderID", - table: "MetadataIds", - column: "ProviderID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_SeasonID", - table: "MetadataIds", - column: "SeasonID"); - - migrationBuilder.CreateIndex( - name: "IX_MetadataIds_ShowID", - table: "MetadataIds", - column: "ShowID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( name: "IX_People_Slug", @@ -656,7 +707,16 @@ namespace Kyoo.Postgresql.Migrations name: "Link"); migrationBuilder.DropTable( - name: "MetadataIds"); + name: "MetadataID"); + + migrationBuilder.DropTable( + name: "MetadataID"); + + migrationBuilder.DropTable( + name: "MetadataID"); + + migrationBuilder.DropTable( + name: "MetadataID"); migrationBuilder.DropTable( name: "PeopleRoles"); diff --git a/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs b/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs index 4c6ceac7..0e8a675c 100644 --- a/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs +++ b/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs @@ -21,7 +21,7 @@ namespace Kyoo.Postgresql.Migrations .HasPostgresEnum(null, "status", new[] { "finished", "airing", "planned", "unknown" }) .HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle", "attachment" }) .HasAnnotation("Relational:MaxIdentifierLength", 63) - .HasAnnotation("ProductVersion", "5.0.5") + .HasAnnotation("ProductVersion", "5.0.6") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); modelBuilder.Entity("Kyoo.Models.Collection", b => @@ -74,9 +74,6 @@ namespace Kyoo.Postgresql.Migrations b.Property("ReleaseDate") .HasColumnType("timestamp without time zone"); - b.Property("Runtime") - .HasColumnType("integer"); - b.Property("SeasonID") .HasColumnType("integer"); @@ -239,47 +236,88 @@ namespace Kyoo.Postgresql.Migrations b.ToTable("Link"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("FirstID") + .HasColumnType("integer"); + + b.Property("SecondID") + .HasColumnType("integer"); b.Property("DataID") .HasColumnType("text"); - b.Property("EpisodeID") + b.Property("Link") + .HasColumnType("text"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("integer"); + b.Property("SecondID") + .HasColumnType("integer"); + + b.Property("DataID") + .HasColumnType("text"); + b.Property("Link") .HasColumnType("text"); - b.Property("PeopleID") + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("integer"); - b.Property("ProviderID") + b.Property("SecondID") .HasColumnType("integer"); - b.Property("SeasonID") + b.Property("DataID") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("integer"); - b.Property("ShowID") + b.Property("SecondID") .HasColumnType("integer"); - b.HasKey("ID"); + b.Property("DataID") + .HasColumnType("text"); - b.HasIndex("EpisodeID"); + b.Property("Link") + .HasColumnType("text"); - b.HasIndex("PeopleID"); + b.HasKey("FirstID", "SecondID"); - b.HasIndex("ProviderID"); + b.HasIndex("SecondID"); - b.HasIndex("SeasonID"); - - b.HasIndex("ShowID"); - - b.ToTable("MetadataIds"); + b.ToTable("MetadataID"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -314,6 +352,9 @@ namespace Kyoo.Postgresql.Migrations .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("ForPeople") + .HasColumnType("boolean"); + b.Property("PeopleID") .HasColumnType("integer"); @@ -370,6 +411,9 @@ namespace Kyoo.Postgresql.Migrations .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + b.Property("EndDate") + .HasColumnType("timestamp without time zone"); + b.Property("Overview") .HasColumnType("text"); @@ -382,12 +426,12 @@ namespace Kyoo.Postgresql.Migrations b.Property("ShowID") .HasColumnType("integer"); + b.Property("StartDate") + .HasColumnType("timestamp without time zone"); + b.Property("Title") .HasColumnType("text"); - b.Property("Year") - .HasColumnType("integer"); - b.HasKey("ID"); b.HasIndex("ShowID", "SeasonNumber") @@ -409,8 +453,8 @@ namespace Kyoo.Postgresql.Migrations b.Property("Backdrop") .HasColumnType("text"); - b.Property("EndYear") - .HasColumnType("integer"); + b.Property("EndAir") + .HasColumnType("timestamp without time zone"); b.Property("IsMovie") .HasColumnType("boolean"); @@ -431,8 +475,8 @@ namespace Kyoo.Postgresql.Migrations .IsRequired() .HasColumnType("text"); - b.Property("StartYear") - .HasColumnType("integer"); + b.Property("StartAir") + .HasColumnType("timestamp without time zone"); b.Property("Status") .HasColumnType("status"); @@ -706,43 +750,80 @@ namespace Kyoo.Postgresql.Migrations b.Navigation("Second"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.HasOne("Kyoo.Models.Episode", "Episode") + b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") - .HasForeignKey("EpisodeID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.People", "People") - .WithMany("ExternalIDs") - .HasForeignKey("PeopleID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.Provider", "Provider") - .WithMany("MetadataLinks") - .HasForeignKey("ProviderID") + .HasForeignKey("FirstID") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Kyoo.Models.Season", "Season") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") - .HasForeignKey("SeasonID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.HasOne("Kyoo.Models.Show", "Show") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Episode"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("People"); + b.Navigation("First"); - b.Navigation("Provider"); + b.Navigation("Second"); + }); - b.Navigation("Season"); + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Show", "First") + .WithMany("ExternalIDs") + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Show"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -852,8 +933,6 @@ namespace Kyoo.Postgresql.Migrations modelBuilder.Entity("Kyoo.Models.Provider", b => { b.Navigation("LibraryLinks"); - - b.Navigation("MetadataLinks"); }); modelBuilder.Entity("Kyoo.Models.Season", b => diff --git a/Kyoo.SqLite/Kyoo.SqLite.csproj b/Kyoo.SqLite/Kyoo.SqLite.csproj index 43c2634f..0d5ab21c 100644 --- a/Kyoo.SqLite/Kyoo.SqLite.csproj +++ b/Kyoo.SqLite/Kyoo.SqLite.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Kyoo.SqLite/Migrations/20210529124408_Initial.Designer.cs b/Kyoo.SqLite/Migrations/20210607202259_Initial.Designer.cs similarity index 83% rename from Kyoo.SqLite/Migrations/20210529124408_Initial.Designer.cs rename to Kyoo.SqLite/Migrations/20210607202259_Initial.Designer.cs index ffdeefad..c0f57c7f 100644 --- a/Kyoo.SqLite/Migrations/20210529124408_Initial.Designer.cs +++ b/Kyoo.SqLite/Migrations/20210607202259_Initial.Designer.cs @@ -6,10 +6,10 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Kyoo.SQLite.Migrations +namespace Kyoo.SqLite.Migrations { [DbContext(typeof(SqLiteContext))] - [Migration("20210529124408_Initial")] + [Migration("20210607202259_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -66,9 +66,6 @@ namespace Kyoo.SQLite.Migrations b.Property("ReleaseDate") .HasColumnType("TEXT"); - b.Property("Runtime") - .HasColumnType("INTEGER"); - b.Property("SeasonID") .HasColumnType("INTEGER"); @@ -229,46 +226,88 @@ namespace Kyoo.SQLite.Migrations b.ToTable("Link"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.Property("ID") - .ValueGeneratedOnAdd() + b.Property("FirstID") + .HasColumnType("INTEGER"); + + b.Property("SecondID") .HasColumnType("INTEGER"); b.Property("DataID") .HasColumnType("TEXT"); - b.Property("EpisodeID") + b.Property("Link") + .HasColumnType("TEXT"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("INTEGER"); + b.Property("SecondID") + .HasColumnType("INTEGER"); + + b.Property("DataID") + .HasColumnType("TEXT"); + b.Property("Link") .HasColumnType("TEXT"); - b.Property("PeopleID") + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("INTEGER"); - b.Property("ProviderID") + b.Property("SecondID") .HasColumnType("INTEGER"); - b.Property("SeasonID") + b.Property("DataID") + .HasColumnType("TEXT"); + + b.Property("Link") + .HasColumnType("TEXT"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("INTEGER"); - b.Property("ShowID") + b.Property("SecondID") .HasColumnType("INTEGER"); - b.HasKey("ID"); + b.Property("DataID") + .HasColumnType("TEXT"); - b.HasIndex("EpisodeID"); + b.Property("Link") + .HasColumnType("TEXT"); - b.HasIndex("PeopleID"); + b.HasKey("FirstID", "SecondID"); - b.HasIndex("ProviderID"); + b.HasIndex("SecondID"); - b.HasIndex("SeasonID"); - - b.HasIndex("ShowID"); - - b.ToTable("MetadataIds"); + b.ToTable("MetadataID"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -301,6 +340,9 @@ namespace Kyoo.SQLite.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("ForPeople") + .HasColumnType("INTEGER"); + b.Property("PeopleID") .HasColumnType("INTEGER"); @@ -355,6 +397,9 @@ namespace Kyoo.SQLite.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("EndDate") + .HasColumnType("TEXT"); + b.Property("Overview") .HasColumnType("TEXT"); @@ -367,11 +412,11 @@ namespace Kyoo.SQLite.Migrations b.Property("ShowID") .HasColumnType("INTEGER"); - b.Property("Title") + b.Property("StartDate") .HasColumnType("TEXT"); - b.Property("Year") - .HasColumnType("INTEGER"); + b.Property("Title") + .HasColumnType("TEXT"); b.HasKey("ID"); @@ -393,8 +438,8 @@ namespace Kyoo.SQLite.Migrations b.Property("Backdrop") .HasColumnType("TEXT"); - b.Property("EndYear") - .HasColumnType("INTEGER"); + b.Property("EndAir") + .HasColumnType("TEXT"); b.Property("IsMovie") .HasColumnType("INTEGER"); @@ -415,8 +460,8 @@ namespace Kyoo.SQLite.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("StartYear") - .HasColumnType("INTEGER"); + b.Property("StartAir") + .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); @@ -687,43 +732,80 @@ namespace Kyoo.SQLite.Migrations b.Navigation("Second"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.HasOne("Kyoo.Models.Episode", "Episode") + b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") - .HasForeignKey("EpisodeID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.People", "People") - .WithMany("ExternalIDs") - .HasForeignKey("PeopleID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.Provider", "Provider") - .WithMany("MetadataLinks") - .HasForeignKey("ProviderID") + .HasForeignKey("FirstID") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Kyoo.Models.Season", "Season") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") - .HasForeignKey("SeasonID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.HasOne("Kyoo.Models.Show", "Show") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Episode"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("People"); + b.Navigation("First"); - b.Navigation("Provider"); + b.Navigation("Second"); + }); - b.Navigation("Season"); + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Show", "First") + .WithMany("ExternalIDs") + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Show"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -833,8 +915,6 @@ namespace Kyoo.SQLite.Migrations modelBuilder.Entity("Kyoo.Models.Provider", b => { b.Navigation("LibraryLinks"); - - b.Navigation("MetadataLinks"); }); modelBuilder.Entity("Kyoo.Models.Season", b => diff --git a/Kyoo.SqLite/Migrations/20210529124408_Initial.cs b/Kyoo.SqLite/Migrations/20210607202259_Initial.cs similarity index 84% rename from Kyoo.SqLite/Migrations/20210529124408_Initial.cs rename to Kyoo.SqLite/Migrations/20210607202259_Initial.cs index 68a28ec5..a75d0b03 100644 --- a/Kyoo.SqLite/Migrations/20210529124408_Initial.cs +++ b/Kyoo.SqLite/Migrations/20210607202259_Initial.cs @@ -1,7 +1,7 @@ using System; using Microsoft.EntityFrameworkCore.Migrations; -namespace Kyoo.SQLite.Migrations +namespace Kyoo.SqLite.Migrations { public partial class Initial : Migration { @@ -163,6 +163,32 @@ namespace Kyoo.SQLite.Migrations 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 @@ -176,8 +202,8 @@ namespace Kyoo.SQLite.Migrations Overview = table.Column(type: "TEXT", nullable: true), Status = table.Column(type: "INTEGER", nullable: true), TrailerUrl = table.Column(type: "TEXT", nullable: true), - StartYear = table.Column(type: "INTEGER", nullable: true), - EndYear = table.Column(type: "INTEGER", nullable: true), + StartAir = table.Column(type: "TEXT", nullable: true), + EndAir = table.Column(type: "TEXT", nullable: true), Poster = table.Column(type: "TEXT", nullable: true), Logo = table.Column(type: "TEXT", nullable: true), Backdrop = table.Column(type: "TEXT", nullable: true), @@ -291,16 +317,43 @@ namespace Kyoo.SQLite.Migrations 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("Sqlite:Autoincrement", true), + ForPeople = table.Column(type: "INTEGER", nullable: false), PeopleID = table.Column(type: "INTEGER", nullable: false), ShowID = table.Column(type: "INTEGER", nullable: false), - Role = table.Column(type: "TEXT", nullable: true), - Type = table.Column(type: "TEXT", nullable: true) + Type = table.Column(type: "TEXT", nullable: true), + Role = table.Column(type: "TEXT", nullable: true) }, constraints: table => { @@ -329,7 +382,8 @@ namespace Kyoo.SQLite.Migrations SeasonNumber = table.Column(type: "INTEGER", nullable: false), Title = table.Column(type: "TEXT", nullable: true), Overview = table.Column(type: "TEXT", nullable: true), - Year = table.Column(type: "INTEGER", nullable: true), + StartDate = table.Column(type: "TEXT", nullable: true), + EndDate = table.Column(type: "TEXT", nullable: true), Poster = table.Column(type: "TEXT", nullable: true) }, constraints: table => @@ -358,8 +412,7 @@ namespace Kyoo.SQLite.Migrations 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: "TEXT", nullable: true), - Runtime = table.Column(type: "INTEGER", nullable: false) + ReleaseDate = table.Column(type: "TEXT", nullable: true) }, constraints: table => { @@ -379,50 +432,53 @@ namespace Kyoo.SQLite.Migrations }); migrationBuilder.CreateTable( - name: "MetadataIds", + name: "MetadataID", columns: table => new { - ID = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - ProviderID = table.Column(type: "INTEGER", nullable: false), - ShowID = table.Column(type: "INTEGER", nullable: true), - EpisodeID = table.Column(type: "INTEGER", nullable: true), - SeasonID = table.Column(type: "INTEGER", nullable: true), - PeopleID = table.Column(type: "INTEGER", nullable: true), + 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_MetadataIds", x => x.ID); + table.PrimaryKey("PK_MetadataID", x => new { x.FirstID, x.SecondID }); table.ForeignKey( - name: "FK_MetadataIds_Episodes_EpisodeID", - column: x => x.EpisodeID, - principalTable: "Episodes", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataIds_People_PeopleID", - column: x => x.PeopleID, - principalTable: "People", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataIds_Providers_ProviderID", - column: x => x.ProviderID, + name: "FK_MetadataID_Providers_SecondID", + column: x => x.SecondID, principalTable: "Providers", principalColumn: "ID", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_MetadataIds_Seasons_SeasonID", - column: x => x.SeasonID, + 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_MetadataIds_Shows_ShowID", - column: x => x.ShowID, - principalTable: "Shows", + 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); }); @@ -433,16 +489,16 @@ namespace Kyoo.SQLite.Migrations { ID = table.Column(type: "INTEGER", nullable: false) .Annotation("Sqlite:Autoincrement", true), - EpisodeID = table.Column(type: "INTEGER", nullable: false), - TrackIndex = table.Column(type: "INTEGER", nullable: false), - IsDefault = table.Column(type: "INTEGER", nullable: false), - IsForced = table.Column(type: "INTEGER", nullable: false), - IsExternal = table.Column(type: "INTEGER", nullable: false), 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: "INTEGER", nullable: false), + IsForced = table.Column(type: "INTEGER", nullable: false), + IsExternal = table.Column(type: "INTEGER", nullable: false), Path = table.Column(type: "TEXT", nullable: true), - Type = table.Column(type: "INTEGER", nullable: false) + Type = table.Column(type: "INTEGER", nullable: false), + EpisodeID = table.Column(type: "INTEGER", nullable: false), + TrackIndex = table.Column(type: "INTEGER", nullable: false) }, constraints: table => { @@ -540,29 +596,24 @@ namespace Kyoo.SQLite.Migrations column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_EpisodeID", - table: "MetadataIds", - column: "EpisodeID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_PeopleID", - table: "MetadataIds", - column: "PeopleID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_ProviderID", - table: "MetadataIds", - column: "ProviderID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( - name: "IX_MetadataIds_SeasonID", - table: "MetadataIds", - column: "SeasonID"); - - migrationBuilder.CreateIndex( - name: "IX_MetadataIds_ShowID", - table: "MetadataIds", - column: "ShowID"); + name: "IX_MetadataID_SecondID", + table: "MetadataID", + column: "SecondID"); migrationBuilder.CreateIndex( name: "IX_People_Slug", @@ -648,7 +699,16 @@ namespace Kyoo.SQLite.Migrations name: "Link"); migrationBuilder.DropTable( - name: "MetadataIds"); + name: "MetadataID"); + + migrationBuilder.DropTable( + name: "MetadataID"); + + migrationBuilder.DropTable( + name: "MetadataID"); + + migrationBuilder.DropTable( + name: "MetadataID"); migrationBuilder.DropTable( name: "PeopleRoles"); diff --git a/Kyoo.SqLite/Migrations/SqLiteContextModelSnapshot.cs b/Kyoo.SqLite/Migrations/SqLiteContextModelSnapshot.cs index 60379986..086c55a5 100644 --- a/Kyoo.SqLite/Migrations/SqLiteContextModelSnapshot.cs +++ b/Kyoo.SqLite/Migrations/SqLiteContextModelSnapshot.cs @@ -5,7 +5,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Kyoo.SQLite.Migrations +namespace Kyoo.SqLite.Migrations { [DbContext(typeof(SqLiteContext))] partial class SqLiteContextModelSnapshot : ModelSnapshot @@ -64,9 +64,6 @@ namespace Kyoo.SQLite.Migrations b.Property("ReleaseDate") .HasColumnType("TEXT"); - b.Property("Runtime") - .HasColumnType("INTEGER"); - b.Property("SeasonID") .HasColumnType("INTEGER"); @@ -227,46 +224,88 @@ namespace Kyoo.SQLite.Migrations b.ToTable("Link"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.Property("ID") - .ValueGeneratedOnAdd() + b.Property("FirstID") + .HasColumnType("INTEGER"); + + b.Property("SecondID") .HasColumnType("INTEGER"); b.Property("DataID") .HasColumnType("TEXT"); - b.Property("EpisodeID") + b.Property("Link") + .HasColumnType("TEXT"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("INTEGER"); + b.Property("SecondID") + .HasColumnType("INTEGER"); + + b.Property("DataID") + .HasColumnType("TEXT"); + b.Property("Link") .HasColumnType("TEXT"); - b.Property("PeopleID") + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("INTEGER"); - b.Property("ProviderID") + b.Property("SecondID") .HasColumnType("INTEGER"); - b.Property("SeasonID") + b.Property("DataID") + .HasColumnType("TEXT"); + + b.Property("Link") + .HasColumnType("TEXT"); + + b.HasKey("FirstID", "SecondID"); + + b.HasIndex("SecondID"); + + b.ToTable("MetadataID"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.Property("FirstID") .HasColumnType("INTEGER"); - b.Property("ShowID") + b.Property("SecondID") .HasColumnType("INTEGER"); - b.HasKey("ID"); + b.Property("DataID") + .HasColumnType("TEXT"); - b.HasIndex("EpisodeID"); + b.Property("Link") + .HasColumnType("TEXT"); - b.HasIndex("PeopleID"); + b.HasKey("FirstID", "SecondID"); - b.HasIndex("ProviderID"); + b.HasIndex("SecondID"); - b.HasIndex("SeasonID"); - - b.HasIndex("ShowID"); - - b.ToTable("MetadataIds"); + b.ToTable("MetadataID"); }); modelBuilder.Entity("Kyoo.Models.People", b => @@ -299,6 +338,9 @@ namespace Kyoo.SQLite.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("ForPeople") + .HasColumnType("INTEGER"); + b.Property("PeopleID") .HasColumnType("INTEGER"); @@ -353,6 +395,9 @@ namespace Kyoo.SQLite.Migrations .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("EndDate") + .HasColumnType("TEXT"); + b.Property("Overview") .HasColumnType("TEXT"); @@ -365,11 +410,11 @@ namespace Kyoo.SQLite.Migrations b.Property("ShowID") .HasColumnType("INTEGER"); - b.Property("Title") + b.Property("StartDate") .HasColumnType("TEXT"); - b.Property("Year") - .HasColumnType("INTEGER"); + b.Property("Title") + .HasColumnType("TEXT"); b.HasKey("ID"); @@ -391,8 +436,8 @@ namespace Kyoo.SQLite.Migrations b.Property("Backdrop") .HasColumnType("TEXT"); - b.Property("EndYear") - .HasColumnType("INTEGER"); + b.Property("EndAir") + .HasColumnType("TEXT"); b.Property("IsMovie") .HasColumnType("INTEGER"); @@ -413,8 +458,8 @@ namespace Kyoo.SQLite.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("StartYear") - .HasColumnType("INTEGER"); + b.Property("StartAir") + .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); @@ -685,43 +730,80 @@ namespace Kyoo.SQLite.Migrations b.Navigation("Second"); }); - modelBuilder.Entity("Kyoo.Models.MetadataID", b => + modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.HasOne("Kyoo.Models.Episode", "Episode") + b.HasOne("Kyoo.Models.Episode", "First") .WithMany("ExternalIDs") - .HasForeignKey("EpisodeID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.People", "People") - .WithMany("ExternalIDs") - .HasForeignKey("PeopleID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Kyoo.Models.Provider", "Provider") - .WithMany("MetadataLinks") - .HasForeignKey("ProviderID") + .HasForeignKey("FirstID") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("Kyoo.Models.Season", "Season") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.People", "First") .WithMany("ExternalIDs") - .HasForeignKey("SeasonID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.HasOne("Kyoo.Models.Show", "Show") + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); + }); + + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Season", "First") .WithMany("ExternalIDs") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade); + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Episode"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("People"); + b.Navigation("First"); - b.Navigation("Provider"); + b.Navigation("Second"); + }); - b.Navigation("Season"); + modelBuilder.Entity("Kyoo.Models.MetadataID", b => + { + b.HasOne("Kyoo.Models.Show", "First") + .WithMany("ExternalIDs") + .HasForeignKey("FirstID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Show"); + b.HasOne("Kyoo.Models.Provider", "Second") + .WithMany() + .HasForeignKey("SecondID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("First"); + + b.Navigation("Second"); }); modelBuilder.Entity("Kyoo.Models.PeopleRole", b => @@ -831,8 +913,6 @@ namespace Kyoo.SQLite.Migrations modelBuilder.Entity("Kyoo.Models.Provider", b => { b.Navigation("LibraryLinks"); - - b.Navigation("MetadataLinks"); }); modelBuilder.Entity("Kyoo.Models.Season", b => diff --git a/Kyoo.Tests/Kyoo.Tests.csproj b/Kyoo.Tests/Kyoo.Tests.csproj index dfb1d2c4..265ccb98 100644 --- a/Kyoo.Tests/Kyoo.Tests.csproj +++ b/Kyoo.Tests/Kyoo.Tests.csproj @@ -14,7 +14,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Kyoo/Kyoo.csproj b/Kyoo/Kyoo.csproj index 583341f6..5a369ea9 100644 --- a/Kyoo/Kyoo.csproj +++ b/Kyoo/Kyoo.csproj @@ -35,9 +35,9 @@ - - - + + +