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