From e6f263b6de141eab67f6c437b0f4a4d25629c69c Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 31 Jul 2023 16:00:39 +0900 Subject: [PATCH] Remove track table --- .../20230726100747_Timestamp.Designer.cs | 2 +- .../20230731065523_RemoveTracks.Designer.cs | 1189 ++++++++++ .../Migrations/20230731065523_RemoveTracks.cs | 95 + .../PostgresContextModelSnapshot.cs | 2048 ++++++++--------- 4 files changed, 2266 insertions(+), 1068 deletions(-) create mode 100644 back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.Designer.cs create mode 100644 back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.cs diff --git a/back/src/Kyoo.Postgresql/Migrations/20230726100747_Timestamp.Designer.cs b/back/src/Kyoo.Postgresql/Migrations/20230726100747_Timestamp.Designer.cs index a486764a..2a80f33b 100644 --- a/back/src/Kyoo.Postgresql/Migrations/20230726100747_Timestamp.Designer.cs +++ b/back/src/Kyoo.Postgresql/Migrations/20230726100747_Timestamp.Designer.cs @@ -543,7 +543,7 @@ namespace Kyoo.Postgresql.Migrations .HasColumnType("integer") .HasColumnName("track_index"); - b.Property("Type") + b.Property("Type") .HasColumnType("stream_type") .HasColumnName("type"); diff --git a/back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.Designer.cs b/back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.Designer.cs new file mode 100644 index 00000000..e86a0b3f --- /dev/null +++ b/back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.Designer.cs @@ -0,0 +1,1189 @@ +// +using System; +using System.Collections.Generic; +using Kyoo.Abstractions.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Kyoo.Postgresql.Migrations +{ + [DbContext(typeof(PostgresContext))] + [Migration("20230731065523_RemoveTracks")] + partial class RemoveTracks + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "item_type", new[] { "show", "movie", "collection" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "status", new[] { "unknown", "finished", "airing", "planned" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.HasKey("ID") + .HasName("pk_collections"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_collections_slug"); + + b.ToTable("collections", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("AbsoluteNumber") + .HasColumnType("integer") + .HasColumnName("absolute_number"); + + b.Property("EpisodeNumber") + .HasColumnType("integer") + .HasColumnName("episode_number"); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); + + b.Property("Path") + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("ReleaseDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("release_date"); + + b.Property("SeasonID") + .HasColumnType("integer") + .HasColumnName("season_id"); + + b.Property("SeasonNumber") + .HasColumnType("integer") + .HasColumnName("season_number"); + + b.Property("ShowID") + .HasColumnType("integer") + .HasColumnName("show_id"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("ID") + .HasName("pk_episodes"); + + b.HasIndex("SeasonID") + .HasDatabaseName("ix_episodes_season_id"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_episodes_slug"); + + b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber") + .IsUnique() + .HasDatabaseName("ix_episodes_show_id_season_number_episode_number_absolute_numb"); + + b.ToTable("episodes", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Genre", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.HasKey("ID") + .HasName("pk_genres"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_genres_slug"); + + b.ToTable("genres", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Library", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Paths") + .HasColumnType("text[]") + .HasColumnName("paths"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.HasKey("ID") + .HasName("pk_libraries"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_libraries_slug"); + + b.ToTable("libraries", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.LibraryItem", b => + { + b.Property("ID") + .HasColumnType("integer") + .HasColumnName("id"); + + b.Property("EndAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_air"); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); + + b.Property("Slug") + .HasColumnType("text") + .HasColumnName("slug"); + + b.Property("StartAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_air"); + + b.Property("Status") + .HasColumnType("status") + .HasColumnName("status"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.Property("Type") + .HasColumnType("item_type") + .HasColumnName("type"); + + b.HasKey("ID") + .HasName("pk_library_items"); + + b.ToTable((string)null); + + b.ToView("library_items", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.People", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.HasKey("ID") + .HasName("pk_people"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_people_slug"); + + b.ToTable("people", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("PeopleID") + .HasColumnType("integer") + .HasColumnName("people_id"); + + b.Property("Role") + .HasColumnType("text") + .HasColumnName("role"); + + b.Property("ShowID") + .HasColumnType("integer") + .HasColumnName("show_id"); + + b.Property("Type") + .HasColumnType("text") + .HasColumnName("type"); + + b.HasKey("ID") + .HasName("pk_people_roles"); + + b.HasIndex("PeopleID") + .HasDatabaseName("ix_people_roles_people_id"); + + b.HasIndex("ShowID") + .HasDatabaseName("ix_people_roles_show_id"); + + b.ToTable("people_roles", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Provider", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.HasKey("ID") + .HasName("pk_providers"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_providers_slug"); + + b.ToTable("providers", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("EndDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_date"); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); + + b.Property("SeasonNumber") + .HasColumnType("integer") + .HasColumnName("season_number"); + + b.Property("ShowID") + .HasColumnType("integer") + .HasColumnName("show_id"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("ID") + .HasName("pk_seasons"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_seasons_slug"); + + b.HasIndex("ShowID", "SeasonNumber") + .IsUnique() + .HasDatabaseName("ix_seasons_show_id_season_number"); + + b.ToTable("seasons", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("Aliases") + .HasColumnType("text[]") + .HasColumnName("aliases"); + + b.Property("EndAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_air"); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("IsMovie") + .HasColumnType("boolean") + .HasColumnName("is_movie"); + + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); + + b.Property("Path") + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.Property("StartAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_air"); + + b.Property("Status") + .HasColumnType("status") + .HasColumnName("status"); + + b.Property("StudioID") + .HasColumnType("integer") + .HasColumnName("studio_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("ID") + .HasName("pk_shows"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_shows_slug"); + + b.HasIndex("StudioID") + .HasDatabaseName("ix_shows_studio_id"); + + b.ToTable("shows", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.HasKey("ID") + .HasName("pk_studios"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_studios_slug"); + + b.ToTable("studios", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.User", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + + b.Property("Email") + .HasColumnType("text") + .HasColumnName("email"); + + b.Property>("ExtraData") + .HasColumnType("jsonb") + .HasColumnName("extra_data"); + + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Password") + .HasColumnType("text") + .HasColumnName("password"); + + b.Property("Permissions") + .HasColumnType("text[]") + .HasColumnName("permissions"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); + + b.Property("Username") + .HasColumnType("text") + .HasColumnName("username"); + + b.HasKey("ID") + .HasName("pk_users"); + + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_users_slug"); + + b.ToTable("users", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b => + { + b.Property("UserID") + .HasColumnType("integer") + .HasColumnName("user_id"); + + b.Property("EpisodeID") + .HasColumnType("integer") + .HasColumnName("episode_id"); + + b.Property("WatchedPercentage") + .HasColumnType("integer") + .HasColumnName("watched_percentage"); + + b.HasKey("UserID", "EpisodeID") + .HasName("pk_watched_episodes"); + + b.HasIndex("EpisodeID") + .HasDatabaseName("ix_watched_episodes_episode_id"); + + b.ToTable("watched_episodes", (string)null); + }); + + modelBuilder.Entity("ShowUser", b => + { + b.Property("UsersID") + .HasColumnType("integer") + .HasColumnName("users_id"); + + b.Property("WatchedID") + .HasColumnType("integer") + .HasColumnName("watched_id"); + + b.HasKey("UsersID", "WatchedID") + .HasName("pk_link_user_show"); + + b.HasIndex("WatchedID") + .HasDatabaseName("ix_link_user_show_watched_id"); + + b.ToTable("link_user_show", (string)null); + }); + + 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", (string)null); + }); + + 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", (string)null); + }); + + modelBuilder.Entity("link_collection_show", b => + { + b.Property("collection_id") + .HasColumnType("integer") + .HasColumnName("collection_id"); + + b.Property("show_id") + .HasColumnType("integer") + .HasColumnName("show_id"); + + b.HasKey("collection_id", "show_id") + .HasName("pk_link_collection_show"); + + b.HasIndex("show_id") + .HasDatabaseName("ix_link_collection_show_show_id"); + + b.ToTable("link_collection_show", (string)null); + }); + + modelBuilder.Entity("link_library_collection", b => + { + b.Property("collection_id") + .HasColumnType("integer") + .HasColumnName("collection_id"); + + b.Property("library_id") + .HasColumnType("integer") + .HasColumnName("library_id"); + + b.HasKey("collection_id", "library_id") + .HasName("pk_link_library_collection"); + + b.HasIndex("library_id") + .HasDatabaseName("ix_link_library_collection_library_id"); + + b.ToTable("link_library_collection", (string)null); + }); + + modelBuilder.Entity("link_library_provider", b => + { + b.Property("library_id") + .HasColumnType("integer") + .HasColumnName("library_id"); + + b.Property("provider_id") + .HasColumnType("integer") + .HasColumnName("provider_id"); + + b.HasKey("library_id", "provider_id") + .HasName("pk_link_library_provider"); + + b.HasIndex("provider_id") + .HasDatabaseName("ix_link_library_provider_provider_id"); + + b.ToTable("link_library_provider", (string)null); + }); + + modelBuilder.Entity("link_library_show", b => + { + b.Property("library_id") + .HasColumnType("integer") + .HasColumnName("library_id"); + + b.Property("show_id") + .HasColumnType("integer") + .HasColumnName("show_id"); + + b.HasKey("library_id", "show_id") + .HasName("pk_link_library_show"); + + b.HasIndex("show_id") + .HasDatabaseName("ix_link_library_show_show_id"); + + b.ToTable("link_library_show", (string)null); + }); + + modelBuilder.Entity("link_show_genre", b => + { + b.Property("genre_id") + .HasColumnType("integer") + .HasColumnName("genre_id"); + + b.Property("show_id") + .HasColumnType("integer") + .HasColumnName("show_id"); + + b.HasKey("genre_id", "show_id") + .HasName("pk_link_show_genre"); + + b.HasIndex("show_id") + .HasDatabaseName("ix_link_show_genre_show_id"); + + b.ToTable("link_show_genre", (string)null); + }); + + 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", (string)null); + }); + + 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", (string)null); + }); + + 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", (string)null); + }); + + 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", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => + { + b.HasOne("Kyoo.Abstractions.Models.Season", "Season") + .WithMany("Episodes") + .HasForeignKey("SeasonID") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_episodes_seasons_season_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", "Show") + .WithMany("Episodes") + .HasForeignKey("ShowID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_episodes_shows_show_id"); + + b.Navigation("Season"); + + b.Navigation("Show"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b => + { + b.HasOne("Kyoo.Abstractions.Models.People", "People") + .WithMany("Roles") + .HasForeignKey("PeopleID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_roles_people_people_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", "Show") + .WithMany("People") + .HasForeignKey("ShowID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_roles_shows_show_id"); + + b.Navigation("People"); + + b.Navigation("Show"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => + { + b.HasOne("Kyoo.Abstractions.Models.Show", "Show") + .WithMany("Seasons") + .HasForeignKey("ShowID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_seasons_shows_show_id"); + + b.Navigation("Show"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => + { + b.HasOne("Kyoo.Abstractions.Models.Studio", "Studio") + .WithMany("Shows") + .HasForeignKey("StudioID") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("fk_shows_studios_studio_id"); + + b.Navigation("Studio"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b => + { + b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode") + .WithMany() + .HasForeignKey("EpisodeID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_watched_episodes_episodes_episode_id"); + + b.HasOne("Kyoo.Abstractions.Models.User", null) + .WithMany("CurrentlyWatching") + .HasForeignKey("UserID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_watched_episodes_users_user_id"); + + b.Navigation("Episode"); + }); + + modelBuilder.Entity("ShowUser", b => + { + b.HasOne("Kyoo.Abstractions.Models.User", null) + .WithMany() + .HasForeignKey("UsersID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_user_show_users_users_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("WatchedID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_user_show_shows_watched_id"); + }); + + modelBuilder.Entity("collection_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_collection_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Collection", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_collection_metadata_id_collections_collection_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("episode_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_episode_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Episode", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_episode_metadata_id_episodes_episode_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("link_collection_show", b => + { + b.HasOne("Kyoo.Abstractions.Models.Collection", null) + .WithMany() + .HasForeignKey("collection_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_collection_show_collections_collection_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("show_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_collection_show_shows_show_id"); + }); + + modelBuilder.Entity("link_library_collection", b => + { + b.HasOne("Kyoo.Abstractions.Models.Collection", null) + .WithMany() + .HasForeignKey("collection_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_collection_collections_collection_id"); + + b.HasOne("Kyoo.Abstractions.Models.Library", null) + .WithMany() + .HasForeignKey("library_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_collection_libraries_library_id"); + }); + + modelBuilder.Entity("link_library_provider", b => + { + b.HasOne("Kyoo.Abstractions.Models.Library", null) + .WithMany() + .HasForeignKey("library_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_provider_libraries_library_id"); + + b.HasOne("Kyoo.Abstractions.Models.Provider", null) + .WithMany() + .HasForeignKey("provider_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_provider_providers_provider_id"); + }); + + modelBuilder.Entity("link_library_show", b => + { + b.HasOne("Kyoo.Abstractions.Models.Library", null) + .WithMany() + .HasForeignKey("library_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_show_libraries_library_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("show_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_show_shows_show_id"); + }); + + modelBuilder.Entity("link_show_genre", b => + { + b.HasOne("Kyoo.Abstractions.Models.Genre", null) + .WithMany() + .HasForeignKey("genre_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_show_genre_genres_genre_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("show_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_show_genre_shows_show_id"); + }); + + modelBuilder.Entity("people_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.People", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_metadata_id_people_people_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("season_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_season_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Season", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_season_metadata_id_seasons_season_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("show_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_show_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_show_metadata_id_shows_show_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("studio_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_studio_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Studio", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_studio_metadata_id_studios_studio_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b => + { + b.Navigation("ExternalIDs"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => + { + b.Navigation("ExternalIDs"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.People", b => + { + b.Navigation("ExternalIDs"); + + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => + { + b.Navigation("Episodes"); + + b.Navigation("ExternalIDs"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => + { + b.Navigation("Episodes"); + + b.Navigation("ExternalIDs"); + + b.Navigation("People"); + + b.Navigation("Seasons"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b => + { + b.Navigation("ExternalIDs"); + + b.Navigation("Shows"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.User", b => + { + b.Navigation("CurrentlyWatching"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.cs b/back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.cs new file mode 100644 index 00000000..a9e58f16 --- /dev/null +++ b/back/src/Kyoo.Postgresql/Migrations/20230731065523_RemoveTracks.cs @@ -0,0 +1,95 @@ +// Kyoo - A portable and vast media library solution. +// Copyright (c) Kyoo. +// +// See AUTHORS.md and LICENSE file in the project root for full license information. +// +// Kyoo is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// Kyoo is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Kyoo. If not, see . + +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Kyoo.Postgresql.Migrations +{ + /// + public partial class RemoveTracks : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "tracks"); + + migrationBuilder.AlterDatabase() + .Annotation("Npgsql:Enum:item_type", "show,movie,collection") + .Annotation("Npgsql:Enum:status", "unknown,finished,airing,planned") + .OldAnnotation("Npgsql:Enum:item_type", "show,movie,collection") + .OldAnnotation("Npgsql:Enum:status", "unknown,finished,airing,planned") + .OldAnnotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("Npgsql:Enum:item_type", "show,movie,collection") + .Annotation("Npgsql:Enum:status", "unknown,finished,airing,planned") + .Annotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle") + .OldAnnotation("Npgsql:Enum:item_type", "show,movie,collection") + .OldAnnotation("Npgsql:Enum:status", "unknown,finished,airing,planned"); + + migrationBuilder.CreateTable( + name: "tracks", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + episode_id = table.Column(type: "integer", nullable: false), + codec = table.Column(type: "text", nullable: true), + is_default = table.Column(type: "boolean", nullable: false), + is_external = table.Column(type: "boolean", nullable: false), + is_forced = table.Column(type: "boolean", nullable: false), + language = table.Column(type: "text", nullable: true), + path = table.Column(type: "text", nullable: true), + slug = table.Column(type: "text", nullable: false), + title = table.Column(type: "text", nullable: true), + track_index = table.Column(type: "integer", nullable: false), + type = table.Column(type: "stream_type", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_tracks", x => x.id); + table.ForeignKey( + name: "fk_tracks_episodes_episode_id", + column: x => x.episode_id, + principalTable: "episodes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "ix_tracks_episode_id_type_language_track_index_is_forced", + table: "tracks", + columns: new[] { "episode_id", "type", "language", "track_index", "is_forced" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_tracks_slug", + table: "tracks", + column: "slug", + unique: true); + } + } +} diff --git a/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs b/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs index 5fc6685b..b0985624 100644 --- a/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs +++ b/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs @@ -1,1272 +1,1186 @@ -// +// using System; using System.Collections.Generic; using Kyoo.Abstractions.Models; -using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace Kyoo.Postgresql.Migrations { - [DbContext(typeof(PostgresContext))] - partial class PostgresContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { + [DbContext(typeof(PostgresContext))] + partial class PostgresContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { #pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "item_type", new[] { "show", "movie", "collection" }); - NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "status", new[] { "unknown", "finished", "airing", "planned" }); - NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "stream_type", new[] { "unknown", "video", "audio", "subtitle" }); - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder + .HasAnnotation("ProductVersion", "7.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); - modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "item_type", new[] { "show", "movie", "collection" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "status", new[] { "unknown", "finished", "airing", "planned" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); - - b.Property("Name") - .HasColumnType("text") - .HasColumnName("name"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.Property("Overview") - .HasColumnType("text") - .HasColumnName("overview"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); - b.HasKey("ID") - .HasName("pk_collections"); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_collections_slug"); + b.HasKey("ID") + .HasName("pk_collections"); - b.ToTable("collections", (string)null); - }); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_collections_slug"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.ToTable("collections", (string)null); + }); - b.Property("AbsoluteNumber") - .HasColumnType("integer") - .HasColumnName("absolute_number"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("EpisodeNumber") - .HasColumnType("integer") - .HasColumnName("episode_number"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + b.Property("AbsoluteNumber") + .HasColumnType("integer") + .HasColumnName("absolute_number"); - b.Property("Overview") - .HasColumnType("text") - .HasColumnName("overview"); + b.Property("EpisodeNumber") + .HasColumnType("integer") + .HasColumnName("episode_number"); - b.Property("Path") - .HasColumnType("text") - .HasColumnName("path"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.Property("ReleaseDate") - .HasColumnType("timestamp with time zone") - .HasColumnName("release_date"); + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); - b.Property("SeasonID") - .HasColumnType("integer") - .HasColumnName("season_id"); + b.Property("Path") + .HasColumnType("text") + .HasColumnName("path"); - b.Property("SeasonNumber") - .HasColumnType("integer") - .HasColumnName("season_number"); + b.Property("ReleaseDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("release_date"); - b.Property("ShowID") - .HasColumnType("integer") - .HasColumnName("show_id"); + b.Property("SeasonID") + .HasColumnType("integer") + .HasColumnName("season_id"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + b.Property("SeasonNumber") + .HasColumnType("integer") + .HasColumnName("season_number"); - b.Property("Title") - .HasColumnType("text") - .HasColumnName("title"); + b.Property("ShowID") + .HasColumnType("integer") + .HasColumnName("show_id"); - b.HasKey("ID") - .HasName("pk_episodes"); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - b.HasIndex("SeasonID") - .HasDatabaseName("ix_episodes_season_id"); - - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_episodes_slug"); + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); - b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber") - .IsUnique() - .HasDatabaseName("ix_episodes_show_id_season_number_episode_number_absolute_numb"); + b.HasKey("ID") + .HasName("pk_episodes"); - b.ToTable("episodes", (string)null); - }); + b.HasIndex("SeasonID") + .HasDatabaseName("ix_episodes_season_id"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Genre", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_episodes_slug"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber") + .IsUnique() + .HasDatabaseName("ix_episodes_show_id_season_number_episode_number_absolute_numb"); - b.Property("Name") - .HasColumnType("text") - .HasColumnName("name"); + b.ToTable("episodes", (string)null); + }); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Genre", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.HasKey("ID") - .HasName("pk_genres"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_genres_slug"); + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); - b.ToTable("genres", (string)null); - }); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Library", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasKey("ID") + .HasName("pk_genres"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_genres_slug"); - b.Property("Name") - .HasColumnType("text") - .HasColumnName("name"); + b.ToTable("genres", (string)null); + }); - b.Property("Paths") - .HasColumnType("text[]") - .HasColumnName("paths"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Library", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.HasKey("ID") - .HasName("pk_libraries"); + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_libraries_slug"); + b.Property("Paths") + .HasColumnType("text[]") + .HasColumnName("paths"); - b.ToTable("libraries", (string)null); - }); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - modelBuilder.Entity("Kyoo.Abstractions.Models.LibraryItem", b => - { - b.Property("ID") - .HasColumnType("integer") - .HasColumnName("id"); + b.HasKey("ID") + .HasName("pk_libraries"); - b.Property("EndAir") - .HasColumnType("timestamp with time zone") - .HasColumnName("end_air"); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_libraries_slug"); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + b.ToTable("libraries", (string)null); + }); - b.Property("Overview") - .HasColumnType("text") - .HasColumnName("overview"); + modelBuilder.Entity("Kyoo.Abstractions.Models.LibraryItem", b => + { + b.Property("ID") + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("Slug") - .HasColumnType("text") - .HasColumnName("slug"); + b.Property("EndAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_air"); - b.Property("StartAir") - .HasColumnType("timestamp with time zone") - .HasColumnName("start_air"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.Property("Status") - .HasColumnType("status") - .HasColumnName("status"); + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); - b.Property("Title") - .HasColumnType("text") - .HasColumnName("title"); + b.Property("Slug") + .HasColumnType("text") + .HasColumnName("slug"); - b.Property("Type") - .HasColumnType("item_type") - .HasColumnName("type"); + b.Property("StartAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_air"); - b.HasKey("ID") - .HasName("pk_library_items"); + b.Property("Status") + .HasColumnType("status") + .HasColumnName("status"); - b.ToTable((string)null); + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); - b.ToView("library_items", (string)null); - }); + b.Property("Type") + .HasColumnType("item_type") + .HasColumnName("type"); - modelBuilder.Entity("Kyoo.Abstractions.Models.People", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasKey("ID") + .HasName("pk_library_items"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.ToTable((string)null); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + b.ToView("library_items", (string)null); + }); - b.Property("Name") - .HasColumnType("text") - .HasColumnName("name"); + modelBuilder.Entity("Kyoo.Abstractions.Models.People", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.HasKey("ID") - .HasName("pk_people"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_people_slug"); + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); - b.ToTable("people", (string)null); - }); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasKey("ID") + .HasName("pk_people"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_people_slug"); - b.Property("PeopleID") - .HasColumnType("integer") - .HasColumnName("people_id"); + b.ToTable("people", (string)null); + }); - b.Property("Role") - .HasColumnType("text") - .HasColumnName("role"); + modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("ShowID") - .HasColumnType("integer") - .HasColumnName("show_id"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.Property("Type") - .HasColumnType("text") - .HasColumnName("type"); + b.Property("PeopleID") + .HasColumnType("integer") + .HasColumnName("people_id"); - b.HasKey("ID") - .HasName("pk_people_roles"); + b.Property("Role") + .HasColumnType("text") + .HasColumnName("role"); - b.HasIndex("PeopleID") - .HasDatabaseName("ix_people_roles_people_id"); + b.Property("ShowID") + .HasColumnType("integer") + .HasColumnName("show_id"); - b.HasIndex("ShowID") - .HasDatabaseName("ix_people_roles_show_id"); + b.Property("Type") + .HasColumnType("text") + .HasColumnName("type"); - b.ToTable("people_roles", (string)null); - }); + b.HasKey("ID") + .HasName("pk_people_roles"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Provider", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasIndex("PeopleID") + .HasDatabaseName("ix_people_roles_people_id"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("ShowID") + .HasDatabaseName("ix_people_roles_show_id"); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + b.ToTable("people_roles", (string)null); + }); - b.Property("Name") - .HasColumnType("text") - .HasColumnName("name"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Provider", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.HasKey("ID") - .HasName("pk_providers"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_providers_slug"); + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); - b.ToTable("providers", (string)null); - }); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasKey("ID") + .HasName("pk_providers"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_providers_slug"); - b.Property("EndDate") - .HasColumnType("timestamp with time zone") - .HasColumnName("end_date"); + b.ToTable("providers", (string)null); + }); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("Overview") - .HasColumnType("text") - .HasColumnName("overview"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.Property("SeasonNumber") - .HasColumnType("integer") - .HasColumnName("season_number"); + b.Property("EndDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_date"); - b.Property("ShowID") - .HasColumnType("integer") - .HasColumnName("show_id"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); - b.Property("StartDate") - .HasColumnType("timestamp with time zone") - .HasColumnName("start_date"); + b.Property("SeasonNumber") + .HasColumnType("integer") + .HasColumnName("season_number"); - b.Property("Title") - .HasColumnType("text") - .HasColumnName("title"); + b.Property("ShowID") + .HasColumnType("integer") + .HasColumnName("show_id"); - b.HasKey("ID") - .HasName("pk_seasons"); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_seasons_slug"); + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); - b.HasIndex("ShowID", "SeasonNumber") - .IsUnique() - .HasDatabaseName("ix_seasons_show_id_season_number"); + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); - b.ToTable("seasons", (string)null); - }); + b.HasKey("ID") + .HasName("pk_seasons"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_seasons_slug"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("ShowID", "SeasonNumber") + .IsUnique() + .HasDatabaseName("ix_seasons_show_id_season_number"); - b.Property("Aliases") - .HasColumnType("text[]") - .HasColumnName("aliases"); + b.ToTable("seasons", (string)null); + }); - b.Property("EndAir") - .HasColumnType("timestamp with time zone") - .HasColumnName("end_air"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.Property("IsMovie") - .HasColumnType("boolean") - .HasColumnName("is_movie"); + b.Property("Aliases") + .HasColumnType("text[]") + .HasColumnName("aliases"); - b.Property("Overview") - .HasColumnType("text") - .HasColumnName("overview"); + b.Property("EndAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_air"); - b.Property("Path") - .HasColumnType("text") - .HasColumnName("path"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + b.Property("IsMovie") + .HasColumnType("boolean") + .HasColumnName("is_movie"); - b.Property("StartAir") - .HasColumnType("timestamp with time zone") - .HasColumnName("start_air"); + b.Property("Overview") + .HasColumnType("text") + .HasColumnName("overview"); - b.Property("Status") - .HasColumnType("status") - .HasColumnName("status"); + b.Property("Path") + .HasColumnType("text") + .HasColumnName("path"); - b.Property("StudioID") - .HasColumnType("integer") - .HasColumnName("studio_id"); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - b.Property("Title") - .HasColumnType("text") - .HasColumnName("title"); + b.Property("StartAir") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_air"); - b.HasKey("ID") - .HasName("pk_shows"); + b.Property("Status") + .HasColumnType("status") + .HasColumnName("status"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_shows_slug"); + b.Property("StudioID") + .HasColumnType("integer") + .HasColumnName("studio_id"); - b.HasIndex("StudioID") - .HasDatabaseName("ix_shows_studio_id"); + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); - b.ToTable("shows", (string)null); - }); + b.HasKey("ID") + .HasName("pk_shows"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_shows_slug"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("StudioID") + .HasDatabaseName("ix_shows_studio_id"); - b.Property("Name") - .HasColumnType("text") - .HasColumnName("name"); + b.ToTable("shows", (string)null); + }); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.HasKey("ID") - .HasName("pk_studios"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_studios_slug"); + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); - b.ToTable("studios", (string)null); - }); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.HasKey("ID") + .HasName("pk_studios"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_studios_slug"); - b.Property("Codec") - .HasColumnType("text") - .HasColumnName("codec"); + b.ToTable("studios", (string)null); + }); - b.Property("EpisodeID") - .HasColumnType("integer") - .HasColumnName("episode_id"); + modelBuilder.Entity("Kyoo.Abstractions.Models.User", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); - b.Property("IsDefault") - .HasColumnType("boolean") - .HasColumnName("is_default"); + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); - b.Property("IsExternal") - .HasColumnType("boolean") - .HasColumnName("is_external"); + b.Property("Email") + .HasColumnType("text") + .HasColumnName("email"); - b.Property("IsForced") - .HasColumnType("boolean") - .HasColumnName("is_forced"); + b.Property>("ExtraData") + .HasColumnType("jsonb") + .HasColumnName("extra_data"); - b.Property("Language") - .HasColumnType("text") - .HasColumnName("language"); + b.Property>("Images") + .HasColumnType("jsonb") + .HasColumnName("images"); - b.Property("Path") - .HasColumnType("text") - .HasColumnName("path"); + b.Property("Password") + .HasColumnType("text") + .HasColumnName("password"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + b.Property("Permissions") + .HasColumnType("text[]") + .HasColumnName("permissions"); - b.Property("Title") - .HasColumnType("text") - .HasColumnName("title"); + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug"); - b.Property("TrackIndex") - .HasColumnType("integer") - .HasColumnName("track_index"); + b.Property("Username") + .HasColumnType("text") + .HasColumnName("username"); - b.Property("Type") - .HasColumnType("stream_type") - .HasColumnName("type"); + b.HasKey("ID") + .HasName("pk_users"); - b.HasKey("ID") - .HasName("pk_tracks"); + b.HasIndex("Slug") + .IsUnique() + .HasDatabaseName("ix_users_slug"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_tracks_slug"); + b.ToTable("users", (string)null); + }); - b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced") - .IsUnique() - .HasDatabaseName("ix_tracks_episode_id_type_language_track_index_is_forced"); + modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b => + { + b.Property("UserID") + .HasColumnType("integer") + .HasColumnName("user_id"); - b.ToTable("tracks", (string)null); - }); + b.Property("EpisodeID") + .HasColumnType("integer") + .HasColumnName("episode_id"); - modelBuilder.Entity("Kyoo.Abstractions.Models.User", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); + b.Property("WatchedPercentage") + .HasColumnType("integer") + .HasColumnName("watched_percentage"); - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ID")); + b.HasKey("UserID", "EpisodeID") + .HasName("pk_watched_episodes"); - b.Property("Email") - .HasColumnType("text") - .HasColumnName("email"); + b.HasIndex("EpisodeID") + .HasDatabaseName("ix_watched_episodes_episode_id"); - b.Property>("ExtraData") - .HasColumnType("jsonb") - .HasColumnName("extra_data"); + b.ToTable("watched_episodes", (string)null); + }); - b.Property>("Images") - .HasColumnType("jsonb") - .HasColumnName("images"); + modelBuilder.Entity("ShowUser", b => + { + b.Property("UsersID") + .HasColumnType("integer") + .HasColumnName("users_id"); - b.Property("Password") - .HasColumnType("text") - .HasColumnName("password"); + b.Property("WatchedID") + .HasColumnType("integer") + .HasColumnName("watched_id"); - b.Property("Permissions") - .HasColumnType("text[]") - .HasColumnName("permissions"); + b.HasKey("UsersID", "WatchedID") + .HasName("pk_link_user_show"); - b.Property("Slug") - .IsRequired() - .HasColumnType("text") - .HasColumnName("slug"); + b.HasIndex("WatchedID") + .HasDatabaseName("ix_link_user_show_watched_id"); - b.Property("Username") - .HasColumnType("text") - .HasColumnName("username"); + b.ToTable("link_user_show", (string)null); + }); - b.HasKey("ID") - .HasName("pk_users"); + modelBuilder.Entity("collection_metadata_id", b => + { + b.Property("ResourceID") + .HasColumnType("integer") + .HasColumnName("resource_id"); - b.HasIndex("Slug") - .IsUnique() - .HasDatabaseName("ix_users_slug"); + b.Property("ProviderID") + .HasColumnType("integer") + .HasColumnName("provider_id"); - b.ToTable("users", (string)null); - }); + b.Property("DataID") + .HasColumnType("text") + .HasColumnName("data_id"); - modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b => - { - b.Property("UserID") - .HasColumnType("integer") - .HasColumnName("user_id"); + b.Property("Link") + .HasColumnType("text") + .HasColumnName("link"); - b.Property("EpisodeID") - .HasColumnType("integer") - .HasColumnName("episode_id"); + b.HasKey("ResourceID", "ProviderID") + .HasName("pk_collection_metadata_id"); - b.Property("WatchedPercentage") - .HasColumnType("integer") - .HasColumnName("watched_percentage"); + b.HasIndex("ProviderID") + .HasDatabaseName("ix_collection_metadata_id_provider_id"); - b.HasKey("UserID", "EpisodeID") - .HasName("pk_watched_episodes"); + b.ToTable("collection_metadata_id", (string)null); + }); - b.HasIndex("EpisodeID") - .HasDatabaseName("ix_watched_episodes_episode_id"); + modelBuilder.Entity("episode_metadata_id", b => + { + b.Property("ResourceID") + .HasColumnType("integer") + .HasColumnName("resource_id"); - b.ToTable("watched_episodes", (string)null); - }); + b.Property("ProviderID") + .HasColumnType("integer") + .HasColumnName("provider_id"); - modelBuilder.Entity("ShowUser", b => - { - b.Property("UsersID") - .HasColumnType("integer") - .HasColumnName("users_id"); + b.Property("DataID") + .HasColumnType("text") + .HasColumnName("data_id"); - b.Property("WatchedID") - .HasColumnType("integer") - .HasColumnName("watched_id"); + b.Property("Link") + .HasColumnType("text") + .HasColumnName("link"); - b.HasKey("UsersID", "WatchedID") - .HasName("pk_link_user_show"); + b.HasKey("ResourceID", "ProviderID") + .HasName("pk_episode_metadata_id"); - b.HasIndex("WatchedID") - .HasDatabaseName("ix_link_user_show_watched_id"); + b.HasIndex("ProviderID") + .HasDatabaseName("ix_episode_metadata_id_provider_id"); - b.ToTable("link_user_show", (string)null); - }); + b.ToTable("episode_metadata_id", (string)null); + }); - modelBuilder.Entity("collection_metadata_id", b => - { - b.Property("ResourceID") - .HasColumnType("integer") - .HasColumnName("resource_id"); + modelBuilder.Entity("link_collection_show", b => + { + b.Property("collection_id") + .HasColumnType("integer") + .HasColumnName("collection_id"); - b.Property("ProviderID") - .HasColumnType("integer") - .HasColumnName("provider_id"); + b.Property("show_id") + .HasColumnType("integer") + .HasColumnName("show_id"); - b.Property("DataID") - .HasColumnType("text") - .HasColumnName("data_id"); + b.HasKey("collection_id", "show_id") + .HasName("pk_link_collection_show"); - b.Property("Link") - .HasColumnType("text") - .HasColumnName("link"); + b.HasIndex("show_id") + .HasDatabaseName("ix_link_collection_show_show_id"); - b.HasKey("ResourceID", "ProviderID") - .HasName("pk_collection_metadata_id"); + b.ToTable("link_collection_show", (string)null); + }); - b.HasIndex("ProviderID") - .HasDatabaseName("ix_collection_metadata_id_provider_id"); + modelBuilder.Entity("link_library_collection", b => + { + b.Property("collection_id") + .HasColumnType("integer") + .HasColumnName("collection_id"); - b.ToTable("collection_metadata_id", (string)null); - }); + b.Property("library_id") + .HasColumnType("integer") + .HasColumnName("library_id"); - modelBuilder.Entity("episode_metadata_id", b => - { - b.Property("ResourceID") - .HasColumnType("integer") - .HasColumnName("resource_id"); + b.HasKey("collection_id", "library_id") + .HasName("pk_link_library_collection"); - b.Property("ProviderID") - .HasColumnType("integer") - .HasColumnName("provider_id"); + b.HasIndex("library_id") + .HasDatabaseName("ix_link_library_collection_library_id"); - b.Property("DataID") - .HasColumnType("text") - .HasColumnName("data_id"); + b.ToTable("link_library_collection", (string)null); + }); - b.Property("Link") - .HasColumnType("text") - .HasColumnName("link"); + modelBuilder.Entity("link_library_provider", b => + { + b.Property("library_id") + .HasColumnType("integer") + .HasColumnName("library_id"); - b.HasKey("ResourceID", "ProviderID") - .HasName("pk_episode_metadata_id"); + b.Property("provider_id") + .HasColumnType("integer") + .HasColumnName("provider_id"); - b.HasIndex("ProviderID") - .HasDatabaseName("ix_episode_metadata_id_provider_id"); + b.HasKey("library_id", "provider_id") + .HasName("pk_link_library_provider"); - b.ToTable("episode_metadata_id", (string)null); - }); + b.HasIndex("provider_id") + .HasDatabaseName("ix_link_library_provider_provider_id"); - modelBuilder.Entity("link_collection_show", b => - { - b.Property("collection_id") - .HasColumnType("integer") - .HasColumnName("collection_id"); + b.ToTable("link_library_provider", (string)null); + }); - b.Property("show_id") - .HasColumnType("integer") - .HasColumnName("show_id"); + modelBuilder.Entity("link_library_show", b => + { + b.Property("library_id") + .HasColumnType("integer") + .HasColumnName("library_id"); - b.HasKey("collection_id", "show_id") - .HasName("pk_link_collection_show"); + b.Property("show_id") + .HasColumnType("integer") + .HasColumnName("show_id"); - b.HasIndex("show_id") - .HasDatabaseName("ix_link_collection_show_show_id"); + b.HasKey("library_id", "show_id") + .HasName("pk_link_library_show"); - b.ToTable("link_collection_show", (string)null); - }); + b.HasIndex("show_id") + .HasDatabaseName("ix_link_library_show_show_id"); - modelBuilder.Entity("link_library_collection", b => - { - b.Property("collection_id") - .HasColumnType("integer") - .HasColumnName("collection_id"); + b.ToTable("link_library_show", (string)null); + }); - b.Property("library_id") - .HasColumnType("integer") - .HasColumnName("library_id"); + modelBuilder.Entity("link_show_genre", b => + { + b.Property("genre_id") + .HasColumnType("integer") + .HasColumnName("genre_id"); - b.HasKey("collection_id", "library_id") - .HasName("pk_link_library_collection"); + b.Property("show_id") + .HasColumnType("integer") + .HasColumnName("show_id"); - b.HasIndex("library_id") - .HasDatabaseName("ix_link_library_collection_library_id"); + b.HasKey("genre_id", "show_id") + .HasName("pk_link_show_genre"); - b.ToTable("link_library_collection", (string)null); - }); + b.HasIndex("show_id") + .HasDatabaseName("ix_link_show_genre_show_id"); - modelBuilder.Entity("link_library_provider", b => - { - b.Property("library_id") - .HasColumnType("integer") - .HasColumnName("library_id"); + b.ToTable("link_show_genre", (string)null); + }); - b.Property("provider_id") - .HasColumnType("integer") - .HasColumnName("provider_id"); + modelBuilder.Entity("people_metadata_id", b => + { + b.Property("ResourceID") + .HasColumnType("integer") + .HasColumnName("resource_id"); - b.HasKey("library_id", "provider_id") - .HasName("pk_link_library_provider"); + b.Property("ProviderID") + .HasColumnType("integer") + .HasColumnName("provider_id"); - b.HasIndex("provider_id") - .HasDatabaseName("ix_link_library_provider_provider_id"); + b.Property("DataID") + .HasColumnType("text") + .HasColumnName("data_id"); - b.ToTable("link_library_provider", (string)null); - }); + b.Property("Link") + .HasColumnType("text") + .HasColumnName("link"); - modelBuilder.Entity("link_library_show", b => - { - b.Property("library_id") - .HasColumnType("integer") - .HasColumnName("library_id"); + b.HasKey("ResourceID", "ProviderID") + .HasName("pk_people_metadata_id"); - b.Property("show_id") - .HasColumnType("integer") - .HasColumnName("show_id"); + b.HasIndex("ProviderID") + .HasDatabaseName("ix_people_metadata_id_provider_id"); - b.HasKey("library_id", "show_id") - .HasName("pk_link_library_show"); + b.ToTable("people_metadata_id", (string)null); + }); - b.HasIndex("show_id") - .HasDatabaseName("ix_link_library_show_show_id"); + modelBuilder.Entity("season_metadata_id", b => + { + b.Property("ResourceID") + .HasColumnType("integer") + .HasColumnName("resource_id"); - b.ToTable("link_library_show", (string)null); - }); + b.Property("ProviderID") + .HasColumnType("integer") + .HasColumnName("provider_id"); - modelBuilder.Entity("link_show_genre", b => - { - b.Property("genre_id") - .HasColumnType("integer") - .HasColumnName("genre_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.Property("show_id") - .HasColumnType("integer") - .HasColumnName("show_id"); + b.HasIndex("ProviderID") + .HasDatabaseName("ix_season_metadata_id_provider_id"); - b.HasKey("genre_id", "show_id") - .HasName("pk_link_show_genre"); - - b.HasIndex("show_id") - .HasDatabaseName("ix_link_show_genre_show_id"); - - b.ToTable("link_show_genre", (string)null); - }); - - 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", (string)null); - }); - - 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", (string)null); - }); - - 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", (string)null); - }); - - 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", (string)null); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => - { - b.HasOne("Kyoo.Abstractions.Models.Season", "Season") - .WithMany("Episodes") - .HasForeignKey("SeasonID") - .OnDelete(DeleteBehavior.Cascade) - .HasConstraintName("fk_episodes_seasons_season_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", "Show") - .WithMany("Episodes") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_episodes_shows_show_id"); - - b.Navigation("Season"); - - b.Navigation("Show"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b => - { - b.HasOne("Kyoo.Abstractions.Models.People", "People") - .WithMany("Roles") - .HasForeignKey("PeopleID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_people_roles_people_people_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", "Show") - .WithMany("People") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_people_roles_shows_show_id"); - - b.Navigation("People"); - - b.Navigation("Show"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => - { - b.HasOne("Kyoo.Abstractions.Models.Show", "Show") - .WithMany("Seasons") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_seasons_shows_show_id"); - - b.Navigation("Show"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => - { - b.HasOne("Kyoo.Abstractions.Models.Studio", "Studio") - .WithMany("Shows") - .HasForeignKey("StudioID") - .OnDelete(DeleteBehavior.SetNull) - .HasConstraintName("fk_shows_studios_studio_id"); - - b.Navigation("Studio"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b => - { - b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode") - .WithMany("Tracks") - .HasForeignKey("EpisodeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_tracks_episodes_episode_id"); - - b.Navigation("Episode"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b => - { - b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode") - .WithMany() - .HasForeignKey("EpisodeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_watched_episodes_episodes_episode_id"); - - b.HasOne("Kyoo.Abstractions.Models.User", null) - .WithMany("CurrentlyWatching") - .HasForeignKey("UserID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_watched_episodes_users_user_id"); - - b.Navigation("Episode"); - }); - - modelBuilder.Entity("ShowUser", b => - { - b.HasOne("Kyoo.Abstractions.Models.User", null) - .WithMany() - .HasForeignKey("UsersID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_user_show_users_users_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", null) - .WithMany() - .HasForeignKey("WatchedID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_user_show_shows_watched_id"); - }); - - modelBuilder.Entity("collection_metadata_id", b => - { - b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_collection_metadata_id_providers_provider_id"); - - b.HasOne("Kyoo.Abstractions.Models.Collection", null) - .WithMany("ExternalIDs") - .HasForeignKey("ResourceID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_collection_metadata_id_collections_collection_id"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("episode_metadata_id", b => - { - b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_episode_metadata_id_providers_provider_id"); - - b.HasOne("Kyoo.Abstractions.Models.Episode", null) - .WithMany("ExternalIDs") - .HasForeignKey("ResourceID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_episode_metadata_id_episodes_episode_id"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("link_collection_show", b => - { - b.HasOne("Kyoo.Abstractions.Models.Collection", null) - .WithMany() - .HasForeignKey("collection_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_collection_show_collections_collection_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", null) - .WithMany() - .HasForeignKey("show_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_collection_show_shows_show_id"); - }); - - modelBuilder.Entity("link_library_collection", b => - { - b.HasOne("Kyoo.Abstractions.Models.Collection", null) - .WithMany() - .HasForeignKey("collection_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_library_collection_collections_collection_id"); - - b.HasOne("Kyoo.Abstractions.Models.Library", null) - .WithMany() - .HasForeignKey("library_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_library_collection_libraries_library_id"); - }); - - modelBuilder.Entity("link_library_provider", b => - { - b.HasOne("Kyoo.Abstractions.Models.Library", null) - .WithMany() - .HasForeignKey("library_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_library_provider_libraries_library_id"); - - b.HasOne("Kyoo.Abstractions.Models.Provider", null) - .WithMany() - .HasForeignKey("provider_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_library_provider_providers_provider_id"); - }); - - modelBuilder.Entity("link_library_show", b => - { - b.HasOne("Kyoo.Abstractions.Models.Library", null) - .WithMany() - .HasForeignKey("library_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_library_show_libraries_library_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", null) - .WithMany() - .HasForeignKey("show_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_library_show_shows_show_id"); - }); - - modelBuilder.Entity("link_show_genre", b => - { - b.HasOne("Kyoo.Abstractions.Models.Genre", null) - .WithMany() - .HasForeignKey("genre_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_show_genre_genres_genre_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", null) - .WithMany() - .HasForeignKey("show_id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_link_show_genre_shows_show_id"); - }); - - modelBuilder.Entity("people_metadata_id", b => - { - b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_people_metadata_id_providers_provider_id"); - - b.HasOne("Kyoo.Abstractions.Models.People", null) - .WithMany("ExternalIDs") - .HasForeignKey("ResourceID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_people_metadata_id_people_people_id"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("season_metadata_id", b => - { - b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_season_metadata_id_providers_provider_id"); - - b.HasOne("Kyoo.Abstractions.Models.Season", null) - .WithMany("ExternalIDs") - .HasForeignKey("ResourceID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_season_metadata_id_seasons_season_id"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("show_metadata_id", b => - { - b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_show_metadata_id_providers_provider_id"); - - b.HasOne("Kyoo.Abstractions.Models.Show", null) - .WithMany("ExternalIDs") - .HasForeignKey("ResourceID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_show_metadata_id_shows_show_id"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("studio_metadata_id", b => - { - b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_studio_metadata_id_providers_provider_id"); - - b.HasOne("Kyoo.Abstractions.Models.Studio", null) - .WithMany("ExternalIDs") - .HasForeignKey("ResourceID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_studio_metadata_id_studios_studio_id"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b => - { - b.Navigation("ExternalIDs"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => - { - b.Navigation("ExternalIDs"); - - b.Navigation("Tracks"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.People", b => - { - b.Navigation("ExternalIDs"); - - b.Navigation("Roles"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => - { - b.Navigation("Episodes"); - - b.Navigation("ExternalIDs"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => - { - b.Navigation("Episodes"); - - b.Navigation("ExternalIDs"); - - b.Navigation("People"); - - b.Navigation("Seasons"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b => - { - b.Navigation("ExternalIDs"); - - b.Navigation("Shows"); - }); - - modelBuilder.Entity("Kyoo.Abstractions.Models.User", b => - { - b.Navigation("CurrentlyWatching"); - }); + b.ToTable("season_metadata_id", (string)null); + }); + + 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", (string)null); + }); + + 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", (string)null); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => + { + b.HasOne("Kyoo.Abstractions.Models.Season", "Season") + .WithMany("Episodes") + .HasForeignKey("SeasonID") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_episodes_seasons_season_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", "Show") + .WithMany("Episodes") + .HasForeignKey("ShowID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_episodes_shows_show_id"); + + b.Navigation("Season"); + + b.Navigation("Show"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b => + { + b.HasOne("Kyoo.Abstractions.Models.People", "People") + .WithMany("Roles") + .HasForeignKey("PeopleID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_roles_people_people_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", "Show") + .WithMany("People") + .HasForeignKey("ShowID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_roles_shows_show_id"); + + b.Navigation("People"); + + b.Navigation("Show"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => + { + b.HasOne("Kyoo.Abstractions.Models.Show", "Show") + .WithMany("Seasons") + .HasForeignKey("ShowID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_seasons_shows_show_id"); + + b.Navigation("Show"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => + { + b.HasOne("Kyoo.Abstractions.Models.Studio", "Studio") + .WithMany("Shows") + .HasForeignKey("StudioID") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("fk_shows_studios_studio_id"); + + b.Navigation("Studio"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b => + { + b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode") + .WithMany() + .HasForeignKey("EpisodeID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_watched_episodes_episodes_episode_id"); + + b.HasOne("Kyoo.Abstractions.Models.User", null) + .WithMany("CurrentlyWatching") + .HasForeignKey("UserID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_watched_episodes_users_user_id"); + + b.Navigation("Episode"); + }); + + modelBuilder.Entity("ShowUser", b => + { + b.HasOne("Kyoo.Abstractions.Models.User", null) + .WithMany() + .HasForeignKey("UsersID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_user_show_users_users_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("WatchedID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_user_show_shows_watched_id"); + }); + + modelBuilder.Entity("collection_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_collection_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Collection", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_collection_metadata_id_collections_collection_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("episode_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_episode_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Episode", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_episode_metadata_id_episodes_episode_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("link_collection_show", b => + { + b.HasOne("Kyoo.Abstractions.Models.Collection", null) + .WithMany() + .HasForeignKey("collection_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_collection_show_collections_collection_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("show_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_collection_show_shows_show_id"); + }); + + modelBuilder.Entity("link_library_collection", b => + { + b.HasOne("Kyoo.Abstractions.Models.Collection", null) + .WithMany() + .HasForeignKey("collection_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_collection_collections_collection_id"); + + b.HasOne("Kyoo.Abstractions.Models.Library", null) + .WithMany() + .HasForeignKey("library_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_collection_libraries_library_id"); + }); + + modelBuilder.Entity("link_library_provider", b => + { + b.HasOne("Kyoo.Abstractions.Models.Library", null) + .WithMany() + .HasForeignKey("library_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_provider_libraries_library_id"); + + b.HasOne("Kyoo.Abstractions.Models.Provider", null) + .WithMany() + .HasForeignKey("provider_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_provider_providers_provider_id"); + }); + + modelBuilder.Entity("link_library_show", b => + { + b.HasOne("Kyoo.Abstractions.Models.Library", null) + .WithMany() + .HasForeignKey("library_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_show_libraries_library_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("show_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_library_show_shows_show_id"); + }); + + modelBuilder.Entity("link_show_genre", b => + { + b.HasOne("Kyoo.Abstractions.Models.Genre", null) + .WithMany() + .HasForeignKey("genre_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_show_genre_genres_genre_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany() + .HasForeignKey("show_id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_link_show_genre_shows_show_id"); + }); + + modelBuilder.Entity("people_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.People", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_people_metadata_id_people_people_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("season_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_season_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Season", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_season_metadata_id_seasons_season_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("show_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_show_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Show", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_show_metadata_id_shows_show_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("studio_metadata_id", b => + { + b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_studio_metadata_id_providers_provider_id"); + + b.HasOne("Kyoo.Abstractions.Models.Studio", null) + .WithMany("ExternalIDs") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_studio_metadata_id_studios_studio_id"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b => + { + b.Navigation("ExternalIDs"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b => + { + b.Navigation("ExternalIDs"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.People", b => + { + b.Navigation("ExternalIDs"); + + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b => + { + b.Navigation("Episodes"); + + b.Navigation("ExternalIDs"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b => + { + b.Navigation("Episodes"); + + b.Navigation("ExternalIDs"); + + b.Navigation("People"); + + b.Navigation("Seasons"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b => + { + b.Navigation("ExternalIDs"); + + b.Navigation("Shows"); + }); + + modelBuilder.Entity("Kyoo.Abstractions.Models.User", b => + { + b.Navigation("CurrentlyWatching"); + }); #pragma warning restore 612, 618 - } - } + } + } }