diff --git a/Kyoo.Common/Models/LibraryItem.cs b/Kyoo.Common/Models/LibraryItem.cs
index 6bc61c2e..dda95343 100644
--- a/Kyoo.Common/Models/LibraryItem.cs
+++ b/Kyoo.Common/Models/LibraryItem.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq.Expressions;
using Kyoo.Models.Attributes;
@@ -18,7 +19,7 @@ namespace Kyoo.Models
/// A type union between and .
/// This is used to list content put inside a library.
///
- public class LibraryItem : IResource
+ public class LibraryItem : IResource, IThumbnails
{
///
public int ID { get; set; }
@@ -52,13 +53,17 @@ namespace Kyoo.Models
/// It can also be null if this is unknown.
///
public DateTime? EndAir { get; set; }
-
+
+ ///
+ public Dictionary Images { get; set; }
+
///
/// The path of this item's poster.
/// By default, the http path for this poster is returned from the public API.
/// This can be disabled using the internal query flag.
///
- [SerializeAs("{HOST}/api/{Type:l}/{Slug}/poster")] public string Poster { get; set; }
+ [SerializeAs("{HOST}/api/{Type:l}/{Slug}/poster")]
+ public string Poster => Images[Thumbnails.Poster];
///
/// The type of this item (ether a collection, a show or a movie).
@@ -84,7 +89,7 @@ namespace Kyoo.Models
Status = show.Status;
StartAir = show.StartAir;
EndAir = show.EndAir;
- Poster = show.Poster;
+ Images = show.Images;
Type = show.IsMovie ? ItemType.Movie : ItemType.Show;
}
@@ -101,7 +106,7 @@ namespace Kyoo.Models
Status = Models.Status.Unknown;
StartAir = null;
EndAir = null;
- Poster = collection.Poster;
+ Images = collection.Images;
Type = ItemType.Collection;
}
@@ -117,7 +122,7 @@ namespace Kyoo.Models
Status = x.Status,
StartAir = x.StartAir,
EndAir = x.EndAir,
- Poster= x.Poster,
+ Images = x.Images,
Type = x.IsMovie ? ItemType.Movie : ItemType.Show
};
@@ -133,7 +138,7 @@ namespace Kyoo.Models
Status = Models.Status.Unknown,
StartAir = null,
EndAir = null,
- Poster = x.Poster,
+ Images = x.Images,
Type = ItemType.Collection
};
}
diff --git a/Kyoo.Common/Models/MetadataID.cs b/Kyoo.Common/Models/MetadataID.cs
index e3bb42a6..cda4ce11 100644
--- a/Kyoo.Common/Models/MetadataID.cs
+++ b/Kyoo.Common/Models/MetadataID.cs
@@ -13,27 +13,22 @@ namespace Kyoo.Models
/// The ID of the resource which possess the metadata.
///
[SerializeIgnore] public int ResourceID { get; set; }
-
- ///
- /// The name of the resource type. This is only used internally to discriminate types.
- ///
- [SerializeIgnore] public string ResourceType { get; set; }
-
+
///
/// The ID of the provider.
///
[SerializeIgnore] public int ProviderID { get; set; }
-
+
///
/// The provider that can do something with this ID.
///
public Provider Provider { get; set; }
-
+
///
/// The ID of the resource on the external provider.
///
public string DataID { get; set; }
-
+
///
/// The URL of the resource on the external provider.
///
@@ -44,10 +39,7 @@ namespace Kyoo.Models
///
public static Expression> PrimaryKey
{
- get
- {
- return x => new {First = x.ResourceID, Second = x.ProviderID, Type = x.ResourceType};
- }
+ get { return x => new { First = x.ResourceID, Second = x.ProviderID }; }
}
}
}
\ No newline at end of file
diff --git a/Kyoo.Common/Models/Resources/Provider.cs b/Kyoo.Common/Models/Resources/Provider.cs
index e931479a..630a2880 100644
--- a/Kyoo.Common/Models/Resources/Provider.cs
+++ b/Kyoo.Common/Models/Resources/Provider.cs
@@ -65,7 +65,10 @@ namespace Kyoo.Models
{
Slug = Utility.ToSlug(name);
Name = name;
- Images[Thumbnails.Logo] = logo;
+ Images = new Dictionary
+ {
+ [Thumbnails.Logo] = logo
+ };
}
}
}
\ No newline at end of file
diff --git a/Kyoo.CommonAPI/DatabaseContext.cs b/Kyoo.CommonAPI/DatabaseContext.cs
index d0600da1..6d1fec11 100644
--- a/Kyoo.CommonAPI/DatabaseContext.cs
+++ b/Kyoo.CommonAPI/DatabaseContext.cs
@@ -60,10 +60,7 @@ namespace Kyoo
/// All providers of Kyoo. See .
///
public DbSet Providers { get; set; }
- ///
- /// All metadata ids, not discriminated by type. See .
- ///
- public DbSet MetadataIDs { get; set; }
+
///
/// The list of registered users.
///
@@ -87,6 +84,25 @@ namespace Kyoo
///
public DbSet LibraryItems { get; set; }
+ ///
+ /// Get the name of the metadata table of the given type.
+ ///
+ /// The type related to the metadata
+ /// The name of the table containing the metadata.
+ protected abstract string MetadataName()
+ where T : IMetadata;
+
+ ///
+ /// Get all metadataIDs (ExternalIDs) of a given resource. See .
+ ///
+ /// The metadata of this type will be returned.
+ /// A queryable of metadata ids for a type.
+ public DbSet MetadataIds()
+ where T : class, IMetadata
+ {
+ return Set(MetadataName());
+ }
+
///
/// Get a generic link between two resource types.
///
@@ -133,9 +149,12 @@ namespace Kyoo
private void _HasMetadata(ModelBuilder modelBuilder)
where T : class, IMetadata
{
- modelBuilder.Entity()
- .HasMany(x => x.ExternalIDs)
- .WithOne()
+ modelBuilder.SharedTypeEntity(MetadataName())
+ .HasKey(MetadataID.PrimaryKey);
+
+ modelBuilder.SharedTypeEntity(MetadataName())
+ .HasOne()
+ .WithMany(x => x.ExternalIDs)
.HasForeignKey(x => x.ResourceID)
.OnDelete(DeleteBehavior.Cascade);
}
@@ -149,6 +168,9 @@ namespace Kyoo
{
base.OnModelCreating(modelBuilder);
+ modelBuilder.Entity()
+ .Ignore(x => x.ForPeople);
+
modelBuilder.Entity()
.HasMany(x => x.Seasons)
.WithOne(x => x.Show)
@@ -243,14 +265,6 @@ namespace Kyoo
.WithMany(x => x.ShowLinks),
y => y.HasKey(Link.PrimaryKey));
- modelBuilder.Entity()
- .HasKey(MetadataID.PrimaryKey);
- modelBuilder.Entity()
- .Property(x => x.ResourceType)
- .IsRequired();
- modelBuilder.Entity()
- .HasDiscriminator(x => x.ResourceType);
-
_HasMetadata(modelBuilder);
_HasMetadata(modelBuilder);
_HasMetadata(modelBuilder);
@@ -259,7 +273,7 @@ namespace Kyoo
_HasMetadata(modelBuilder);
modelBuilder.Entity()
- .HasKey(x => new {First = x.FirstID, Second = x.SecondID});
+ .HasKey(x => new { First = x.FirstID, Second = x.SecondID });
modelBuilder.Entity().Property(x => x.Slug).IsRequired();
modelBuilder.Entity().Property(x => x.Slug).IsRequired();
diff --git a/Kyoo.Postgresql/Migrations/20210723224326_Initial.Designer.cs b/Kyoo.Postgresql/Migrations/20210728141410_Initial.Designer.cs
similarity index 82%
rename from Kyoo.Postgresql/Migrations/20210723224326_Initial.Designer.cs
rename to Kyoo.Postgresql/Migrations/20210728141410_Initial.Designer.cs
index 3016a040..8722ada5 100644
--- a/Kyoo.Postgresql/Migrations/20210723224326_Initial.Designer.cs
+++ b/Kyoo.Postgresql/Migrations/20210728141410_Initial.Designer.cs
@@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace Kyoo.Postgresql.Migrations
{
[DbContext(typeof(PostgresContext))]
- [Migration("20210723224326_Initial")]
+ [Migration("20210728141410_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -34,6 +34,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Name")
.HasColumnType("text")
.HasColumnName("name");
@@ -42,10 +46,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("overview");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.IsRequired()
.HasColumnType("text")
@@ -77,6 +77,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("integer")
.HasColumnName("episode_number");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@@ -106,10 +110,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("slug");
- b.Property("Thumb")
- .HasColumnType("text")
- .HasColumnName("thumb");
-
b.Property("Title")
.HasColumnType("text")
.HasColumnName("title");
@@ -200,14 +200,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.HasColumnType("text")
.HasColumnName("slug");
@@ -348,114 +348,6 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("link_user_show");
});
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_episode");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_episode_second_id");
-
- b.ToTable("metadata_id_episode");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_people");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_people_second_id");
-
- b.ToTable("metadata_id_people");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_season");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_season_second_id");
-
- b.ToTable("metadata_id_season");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_show");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_show_second_id");
-
- b.ToTable("metadata_id_show");
- });
-
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property("ID")
@@ -464,14 +356,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Name")
.HasColumnType("text")
.HasColumnName("name");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.IsRequired()
.HasColumnType("text")
@@ -495,10 +387,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
- b.Property("ForPeople")
- .HasColumnType("boolean")
- .HasColumnName("for_people");
-
b.Property("PeopleID")
.HasColumnType("integer")
.HasColumnName("people_id");
@@ -535,9 +423,9 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
- b.Property("Logo")
- .HasColumnType("text")
- .HasColumnName("logo");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
b.Property("LogoExtension")
.HasColumnType("text")
@@ -574,14 +462,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_date");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("SeasonNumber")
.HasColumnType("integer")
.HasColumnName("season_number");
@@ -629,22 +517,18 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text[]")
.HasColumnName("aliases");
- b.Property("Backdrop")
- .HasColumnType("text")
- .HasColumnName("backdrop");
-
b.Property("EndAir")
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("IsMovie")
.HasColumnType("boolean")
.HasColumnName("is_movie");
- b.Property("Logo")
- .HasColumnType("text")
- .HasColumnName("logo");
-
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@@ -653,10 +537,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("path");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.IsRequired()
.HasColumnType("text")
@@ -678,10 +558,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("title");
- b.Property("TrailerUrl")
- .HasColumnType("text")
- .HasColumnName("trailer_url");
-
b.HasKey("ID")
.HasName("pk_shows");
@@ -855,6 +731,168 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("watched_episodes");
});
+ modelBuilder.Entity("collection_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_collection_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_collection_metadata_id_provider_id");
+
+ b.ToTable("collection_metadata_id");
+ });
+
+ modelBuilder.Entity("episode_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_episode_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_episode_metadata_id_provider_id");
+
+ b.ToTable("episode_metadata_id");
+ });
+
+ modelBuilder.Entity("people_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_people_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_people_metadata_id_provider_id");
+
+ b.ToTable("people_metadata_id");
+ });
+
+ modelBuilder.Entity("season_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_season_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_season_metadata_id_provider_id");
+
+ b.ToTable("season_metadata_id");
+ });
+
+ modelBuilder.Entity("show_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_show_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_show_metadata_id_provider_id");
+
+ b.ToTable("show_metadata_id");
+ });
+
+ modelBuilder.Entity("studio_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_studio_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_studio_metadata_id_provider_id");
+
+ b.ToTable("studio_metadata_id");
+ });
+
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@@ -1001,90 +1039,6 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- 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();
-
- b.Navigation("First");
-
- b.Navigation("Second");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- 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();
-
- b.Navigation("First");
-
- b.Navigation("Second");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- 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();
-
- b.Navigation("First");
-
- b.Navigation("Second");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- 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();
-
- b.Navigation("First");
-
- b.Navigation("Second");
- });
-
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@@ -1162,8 +1116,124 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
+ modelBuilder.Entity("collection_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_collection_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Models.Collection", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_collection_metadata_id_collections_collection_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
+ modelBuilder.Entity("episode_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_episode_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Models.Episode", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
+ modelBuilder.Entity("people_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_people_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Models.People", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_people_metadata_id_people_people_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
+ modelBuilder.Entity("season_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_season_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Models.Season", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_season_metadata_id_seasons_season_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
+ modelBuilder.Entity("show_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_show_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Models.Show", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_show_metadata_id_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
+ modelBuilder.Entity("studio_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_studio_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Models.Studio", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_studio_metadata_id_studios_studio_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
+ b.Navigation("ExternalIDs");
+
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@@ -1228,6 +1298,8 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
+ b.Navigation("ExternalIDs");
+
b.Navigation("Shows");
});
diff --git a/Kyoo.Postgresql/Migrations/20210723224326_Initial.cs b/Kyoo.Postgresql/Migrations/20210728141410_Initial.cs
similarity index 82%
rename from Kyoo.Postgresql/Migrations/20210723224326_Initial.cs
rename to Kyoo.Postgresql/Migrations/20210728141410_Initial.cs
index 2ba22c6a..46c09222 100644
--- a/Kyoo.Postgresql/Migrations/20210723224326_Initial.cs
+++ b/Kyoo.Postgresql/Migrations/20210728141410_Initial.cs
@@ -23,7 +23,7 @@ namespace Kyoo.Postgresql.Migrations
.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),
+ images = table.Column>(type: "jsonb", nullable: true),
overview = table.Column(type: "text", nullable: true)
},
constraints: table =>
@@ -68,7 +68,7 @@ namespace Kyoo.Postgresql.Migrations
.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)
+ images = table.Column>(type: "jsonb", nullable: true)
},
constraints: table =>
{
@@ -83,7 +83,7 @@ namespace Kyoo.Postgresql.Migrations
.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),
+ images = table.Column>(type: "jsonb", nullable: true),
logo_extension = table.Column(type: "text", nullable: true)
},
constraints: table =>
@@ -147,6 +147,32 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
+ migrationBuilder.CreateTable(
+ name: "collection_metadata_id",
+ columns: table => new
+ {
+ resource_id = table.Column(type: "integer", nullable: false),
+ provider_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_collection_metadata_id", x => new { x.resource_id, x.provider_id });
+ table.ForeignKey(
+ name: "fk_collection_metadata_id_collections_collection_id",
+ column: x => x.resource_id,
+ principalTable: "collections",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "fk_collection_metadata_id_providers_provider_id",
+ column: x => x.provider_id,
+ principalTable: "providers",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
migrationBuilder.CreateTable(
name: "link_library_provider",
columns: table => new
@@ -172,26 +198,26 @@ namespace Kyoo.Postgresql.Migrations
});
migrationBuilder.CreateTable(
- name: "metadata_id_people",
+ name: "people_metadata_id",
columns: table => new
{
- first_id = table.Column(type: "integer", nullable: false),
- second_id = table.Column(type: "integer", nullable: false),
+ resource_id = table.Column(type: "integer", nullable: false),
+ provider_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.PrimaryKey("pk_people_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
- name: "fk_metadata_id_people_people_first_id",
- column: x => x.first_id,
+ name: "fk_people_metadata_id_people_people_id",
+ column: x => x.resource_id,
principalTable: "people",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
- name: "fk_metadata_id_people_providers_second_id",
- column: x => x.second_id,
+ name: "fk_people_metadata_id_providers_provider_id",
+ column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
@@ -209,12 +235,9 @@ namespace Kyoo.Postgresql.Migrations
path = table.Column(type: "text", nullable: true),
overview = table.Column(type: "text", nullable: true),
status = table.Column(type: "status", nullable: false),
- 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),
+ images = table.Column>(type: "jsonb", nullable: true),
is_movie = table.Column(type: "boolean", nullable: false),
studio_id = table.Column(type: "integer", nullable: true)
},
@@ -229,6 +252,32 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.SetNull);
});
+ migrationBuilder.CreateTable(
+ name: "studio_metadata_id",
+ columns: table => new
+ {
+ resource_id = table.Column(type: "integer", nullable: false),
+ provider_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_studio_metadata_id", x => new { x.resource_id, x.provider_id });
+ table.ForeignKey(
+ name: "fk_studio_metadata_id_providers_provider_id",
+ column: x => x.provider_id,
+ principalTable: "providers",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "fk_studio_metadata_id_studios_studio_id",
+ column: x => x.resource_id,
+ principalTable: "studios",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
migrationBuilder.CreateTable(
name: "link_collection_show",
columns: table => new
@@ -325,39 +374,12 @@ namespace Kyoo.Postgresql.Migrations
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),
@@ -393,7 +415,7 @@ namespace Kyoo.Postgresql.Migrations
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)
+ images = table.Column>(type: "jsonb", nullable: true)
},
constraints: table =>
{
@@ -406,6 +428,32 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
+ migrationBuilder.CreateTable(
+ name: "show_metadata_id",
+ columns: table => new
+ {
+ resource_id = table.Column(type: "integer", nullable: false),
+ provider_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_show_metadata_id", x => new { x.resource_id, x.provider_id });
+ table.ForeignKey(
+ name: "fk_show_metadata_id_providers_provider_id",
+ column: x => x.provider_id,
+ principalTable: "providers",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "fk_show_metadata_id_shows_show_id",
+ column: x => x.resource_id,
+ principalTable: "shows",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
migrationBuilder.CreateTable(
name: "episodes",
columns: table => new
@@ -419,7 +467,7 @@ namespace Kyoo.Postgresql.Migrations
episode_number = table.Column(type: "integer", nullable: true),
absolute_number = table.Column(type: "integer", nullable: true),
path = table.Column(type: "text", nullable: true),
- thumb = table.Column(type: "text", nullable: true),
+ images = table.Column>(type: "jsonb", 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)
@@ -442,52 +490,52 @@ namespace Kyoo.Postgresql.Migrations
});
migrationBuilder.CreateTable(
- name: "metadata_id_season",
+ name: "season_metadata_id",
columns: table => new
{
- first_id = table.Column(type: "integer", nullable: false),
- second_id = table.Column(type: "integer", nullable: false),
+ resource_id = table.Column(type: "integer", nullable: false),
+ provider_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.PrimaryKey("pk_season_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
- name: "fk_metadata_id_season_providers_second_id",
- column: x => x.second_id,
+ name: "fk_season_metadata_id_providers_provider_id",
+ column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
- name: "fk_metadata_id_season_seasons_first_id",
- column: x => x.first_id,
+ name: "fk_season_metadata_id_seasons_season_id",
+ column: x => x.resource_id,
principalTable: "seasons",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
- name: "metadata_id_episode",
+ name: "episode_metadata_id",
columns: table => new
{
- first_id = table.Column(type: "integer", nullable: false),
- second_id = table.Column(type: "integer", nullable: false),
+ resource_id = table.Column(type: "integer", nullable: false),
+ provider_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.PrimaryKey("pk_episode_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
- name: "fk_metadata_id_episode_episodes_first_id",
- column: x => x.first_id,
+ name: "fk_episode_metadata_id_episodes_episode_id",
+ column: x => x.resource_id,
principalTable: "episodes",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
- name: "fk_metadata_id_episode_providers_second_id",
- column: x => x.second_id,
+ name: "fk_episode_metadata_id_providers_provider_id",
+ column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
@@ -547,12 +595,22 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
+ migrationBuilder.CreateIndex(
+ name: "ix_collection_metadata_id_provider_id",
+ table: "collection_metadata_id",
+ column: "provider_id");
+
migrationBuilder.CreateIndex(
name: "ix_collections_slug",
table: "collections",
column: "slug",
unique: true);
+ migrationBuilder.CreateIndex(
+ name: "ix_episode_metadata_id_provider_id",
+ table: "episode_metadata_id",
+ column: "provider_id");
+
migrationBuilder.CreateIndex(
name: "ix_episodes_season_id",
table: "episodes",
@@ -612,32 +670,17 @@ namespace Kyoo.Postgresql.Migrations
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_metadata_id_provider_id",
+ table: "people_metadata_id",
+ column: "provider_id");
+
migrationBuilder.CreateIndex(
name: "ix_people_roles_people_id",
table: "people_roles",
@@ -654,6 +697,11 @@ namespace Kyoo.Postgresql.Migrations
column: "slug",
unique: true);
+ migrationBuilder.CreateIndex(
+ name: "ix_season_metadata_id_provider_id",
+ table: "season_metadata_id",
+ column: "provider_id");
+
migrationBuilder.CreateIndex(
name: "ix_seasons_show_id_season_number",
table: "seasons",
@@ -666,6 +714,11 @@ namespace Kyoo.Postgresql.Migrations
column: "slug",
unique: true);
+ migrationBuilder.CreateIndex(
+ name: "ix_show_metadata_id_provider_id",
+ table: "show_metadata_id",
+ column: "provider_id");
+
migrationBuilder.CreateIndex(
name: "ix_shows_slug",
table: "shows",
@@ -677,6 +730,11 @@ namespace Kyoo.Postgresql.Migrations
table: "shows",
column: "studio_id");
+ migrationBuilder.CreateIndex(
+ name: "ix_studio_metadata_id_provider_id",
+ table: "studio_metadata_id",
+ column: "provider_id");
+
migrationBuilder.CreateIndex(
name: "ix_studios_slug",
table: "studios",
@@ -709,6 +767,12 @@ namespace Kyoo.Postgresql.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
+ migrationBuilder.DropTable(
+ name: "collection_metadata_id");
+
+ migrationBuilder.DropTable(
+ name: "episode_metadata_id");
+
migrationBuilder.DropTable(
name: "link_collection_show");
@@ -728,20 +792,20 @@ namespace Kyoo.Postgresql.Migrations
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");
+ name: "people_metadata_id");
migrationBuilder.DropTable(
name: "people_roles");
+ migrationBuilder.DropTable(
+ name: "season_metadata_id");
+
+ migrationBuilder.DropTable(
+ name: "show_metadata_id");
+
+ migrationBuilder.DropTable(
+ name: "studio_metadata_id");
+
migrationBuilder.DropTable(
name: "tracks");
@@ -758,10 +822,10 @@ namespace Kyoo.Postgresql.Migrations
name: "genres");
migrationBuilder.DropTable(
- name: "providers");
+ name: "people");
migrationBuilder.DropTable(
- name: "people");
+ name: "providers");
migrationBuilder.DropTable(
name: "episodes");
diff --git a/Kyoo.Postgresql/Migrations/20210723224335_Triggers.Designer.cs b/Kyoo.Postgresql/Migrations/20210728142213_Triggers.Designer.cs
similarity index 82%
rename from Kyoo.Postgresql/Migrations/20210723224335_Triggers.Designer.cs
rename to Kyoo.Postgresql/Migrations/20210728142213_Triggers.Designer.cs
index d377a09f..708cd23b 100644
--- a/Kyoo.Postgresql/Migrations/20210723224335_Triggers.Designer.cs
+++ b/Kyoo.Postgresql/Migrations/20210728142213_Triggers.Designer.cs
@@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace Kyoo.Postgresql.Migrations
{
[DbContext(typeof(PostgresContext))]
- [Migration("20210723224335_Triggers")]
+ [Migration("20210728142213_Triggers")]
partial class Triggers
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -34,6 +34,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Name")
.HasColumnType("text")
.HasColumnName("name");
@@ -42,10 +46,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("overview");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.IsRequired()
.HasColumnType("text")
@@ -77,6 +77,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("integer")
.HasColumnName("episode_number");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@@ -106,10 +110,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("slug");
- b.Property("Thumb")
- .HasColumnType("text")
- .HasColumnName("thumb");
-
b.Property("Title")
.HasColumnType("text")
.HasColumnName("title");
@@ -200,14 +200,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.HasColumnType("text")
.HasColumnName("slug");
@@ -348,114 +348,6 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("link_user_show");
});
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_episode");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_episode_second_id");
-
- b.ToTable("metadata_id_episode");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_people");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_people_second_id");
-
- b.ToTable("metadata_id_people");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_season");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_season_second_id");
-
- b.ToTable("metadata_id_season");
- });
-
- modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
- {
- b.Property("FirstID")
- .HasColumnType("integer")
- .HasColumnName("first_id");
-
- b.Property("SecondID")
- .HasColumnType("integer")
- .HasColumnName("second_id");
-
- b.Property("DataID")
- .HasColumnType("text")
- .HasColumnName("data_id");
-
- b.Property("Link")
- .HasColumnType("text")
- .HasColumnName("link");
-
- b.HasKey("FirstID", "SecondID")
- .HasName("pk_metadata_id_show");
-
- b.HasIndex("SecondID")
- .HasDatabaseName("ix_metadata_id_show_second_id");
-
- b.ToTable("metadata_id_show");
- });
-
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property("ID")
@@ -464,14 +356,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Name")
.HasColumnType("text")
.HasColumnName("name");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.IsRequired()
.HasColumnType("text")
@@ -495,10 +387,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
- b.Property("ForPeople")
- .HasColumnType("boolean")
- .HasColumnName("for_people");
-
b.Property("PeopleID")
.HasColumnType("integer")
.HasColumnName("people_id");
@@ -535,9 +423,9 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
- b.Property("Logo")
- .HasColumnType("text")
- .HasColumnName("logo");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
b.Property("LogoExtension")
.HasColumnType("text")
@@ -574,14 +462,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_date");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("SeasonNumber")
.HasColumnType("integer")
.HasColumnName("season_number");
@@ -629,22 +517,18 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text[]")
.HasColumnName("aliases");
- b.Property("Backdrop")
- .HasColumnType("text")
- .HasColumnName("backdrop");
-
b.Property("EndAir")
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
+ b.Property>("Images")
+ .HasColumnType("jsonb")
+ .HasColumnName("images");
+
b.Property("IsMovie")
.HasColumnType("boolean")
.HasColumnName("is_movie");
- b.Property("Logo")
- .HasColumnType("text")
- .HasColumnName("logo");
-
b.Property("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@@ -653,10 +537,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("path");
- b.Property("Poster")
- .HasColumnType("text")
- .HasColumnName("poster");
-
b.Property("Slug")
.IsRequired()
.HasColumnType("text")
@@ -678,10 +558,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("title");
- b.Property("TrailerUrl")
- .HasColumnType("text")
- .HasColumnName("trailer_url");
-
b.HasKey("ID")
.HasName("pk_shows");
@@ -855,6 +731,168 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("watched_episodes");
});
+ modelBuilder.Entity("collection_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property("Link")
+ .HasColumnType("text")
+ .HasColumnName("link");
+
+ b.HasKey("ResourceID", "ProviderID")
+ .HasName("pk_collection_metadata_id");
+
+ b.HasIndex("ProviderID")
+ .HasDatabaseName("ix_collection_metadata_id_provider_id");
+
+ b.ToTable("collection_metadata_id");
+ });
+
+ modelBuilder.Entity("episode_metadata_id", b =>
+ {
+ b.Property("ResourceID")
+ .HasColumnType("integer")
+ .HasColumnName("resource_id");
+
+ b.Property("ProviderID")
+ .HasColumnType("integer")
+ .HasColumnName("provider_id");
+
+ b.Property("DataID")
+ .HasColumnType("text")
+ .HasColumnName("data_id");
+
+ b.Property