diff --git a/back/.config/dotnet-tools.json b/back/.config/dotnet-tools.json
new file mode 100644
index 00000000..b4a41b06
--- /dev/null
+++ b/back/.config/dotnet-tools.json
@@ -0,0 +1,12 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "dotnet-ef": {
+ "version": "7.0.7",
+ "commands": [
+ "dotnet-ef"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs
index be329f3c..ee07ac4d 100644
--- a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs
+++ b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs
@@ -61,9 +61,11 @@ namespace Kyoo.Core.Controllers
/// Create a new .
///
/// The database handle to use.
+ /// A show repository
/// A provider repository
/// A track repository
public EpisodeRepository(DatabaseContext database,
+ IShowRepository shows,
IProviderRepository providers,
ITrackRepository tracks)
: base(database)
@@ -71,6 +73,14 @@ namespace Kyoo.Core.Controllers
_database = database;
_providers = providers;
_tracks = tracks;
+
+ // Edit episode slugs when the show's slug changes.
+ shows.OnEdited += async (show) =>
+ {
+ foreach (Episode ep in _database.Episodes.Where(x => x.ShowID == show.ID))
+ ep.ShowSlug = show.Slug;
+ await _database.SaveChangesAsync();
+ };
}
///
diff --git a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs
index a512fa6a..965097f7 100644
--- a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs
+++ b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs
@@ -50,13 +50,23 @@ namespace Kyoo.Core.Controllers
/// Create a new .
///
/// The database handle that will be used
+ /// A shows repository
/// A provider repository
public SeasonRepository(DatabaseContext database,
+ IShowRepository shows,
IProviderRepository providers)
: base(database)
{
_database = database;
_providers = providers;
+
+ // Edit seasons slugs when the show's slug changes.
+ shows.OnEdited += async (show) =>
+ {
+ foreach (Season season in _database.Seasons.Where(x => x.ShowID == show.ID))
+ season.ShowSlug = show.Slug;
+ await _database.SaveChangesAsync();
+ };
}
///
diff --git a/back/src/Kyoo.Postgresql/Migrations/20230621074246_RemoveTrigers.Designer.cs b/back/src/Kyoo.Postgresql/Migrations/20230621074246_RemoveTrigers.Designer.cs
new file mode 100644
index 00000000..58f1b145
--- /dev/null
+++ b/back/src/Kyoo.Postgresql/Migrations/20230621074246_RemoveTrigers.Designer.cs
@@ -0,0 +1,1258 @@
+//
+using System;
+using System.Collections.Generic;
+using Kyoo.Abstractions.Models;
+using Kyoo.Postgresql;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace Kyoo.Postgresql.Migrations
+{
+ [DbContext(typeof(PostgresContext))]
+ [Migration("20230621074246_RemoveTrigers")]
+ partial class RemoveTrigers
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasPostgresEnum(null, "item_type", new[] { "show", "movie", "collection" })
+ .HasPostgresEnum(null, "status", new[] { "unknown", "finished", "airing", "planned" })
+ .HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle" })
+ .HasAnnotation("Relational:MaxIdentifierLength", 63)
+ .HasAnnotation("ProductVersion", "5.0.7")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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 without 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")
+ .ValueGeneratedOnAddOrUpdate()
+ .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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Genre", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Library", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.LibraryItem", b =>
+ {
+ b.Property("ID")
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("EndAir")
+ .HasColumnType("timestamp without 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 without 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.ToView("library_items");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.People", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Provider", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("EndDate")
+ .HasColumnType("timestamp without 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")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("text")
+ .HasColumnName("slug");
+
+ b.Property("StartDate")
+ .HasColumnType("timestamp without 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Aliases")
+ .HasColumnType("text[]")
+ .HasColumnName("aliases");
+
+ 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("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 without 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Codec")
+ .HasColumnType("text")
+ .HasColumnName("codec");
+
+ b.Property("EpisodeID")
+ .HasColumnType("integer")
+ .HasColumnName("episode_id");
+
+ b.Property("IsDefault")
+ .HasColumnType("boolean")
+ .HasColumnName("is_default");
+
+ b.Property("IsExternal")
+ .HasColumnType("boolean")
+ .HasColumnName("is_external");
+
+ b.Property("IsForced")
+ .HasColumnType("boolean")
+ .HasColumnName("is_forced");
+
+ b.Property("Language")
+ .HasColumnType("text")
+ .HasColumnName("language");
+
+ b.Property("Path")
+ .HasColumnType("text")
+ .HasColumnName("path");
+
+ b.Property("Slug")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("text")
+ .HasColumnName("slug");
+
+ b.Property("Title")
+ .HasColumnType("text")
+ .HasColumnName("title");
+
+ b.Property("TrackIndex")
+ .HasColumnType("integer")
+ .HasColumnName("track_index");
+
+ b.Property("Type")
+ .HasColumnType("stream_type")
+ .HasColumnName("type");
+
+ b.HasKey("ID")
+ .HasName("pk_tracks");
+
+ b.HasIndex("Slug")
+ .IsUnique()
+ .HasDatabaseName("ix_tracks_slug");
+
+ b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced")
+ .IsUnique()
+ .HasDatabaseName("ix_tracks_episode_id_type_language_track_index_is_forced");
+
+ b.ToTable("tracks");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.User", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ 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");
+ });
+
+ 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");
+ });
+
+ 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");
+ });
+
+ 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("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");
+ });
+
+ 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");
+ });
+
+ 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");
+ });
+
+ 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");
+ });
+
+ 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");
+ });
+
+ 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.Abstractions.Models.Episode", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Season", "Season")
+ .WithMany("Episodes")
+ .HasForeignKey("SeasonID")
+ .HasConstraintName("fk_episodes_seasons_season_id")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
+ .WithMany("Episodes")
+ .HasForeignKey("ShowID")
+ .HasConstraintName("fk_episodes_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Season");
+
+ b.Navigation("Show");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.People", "People")
+ .WithMany("Roles")
+ .HasForeignKey("PeopleID")
+ .HasConstraintName("fk_people_roles_people_people_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
+ .WithMany("People")
+ .HasForeignKey("ShowID")
+ .HasConstraintName("fk_people_roles_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("People");
+
+ b.Navigation("Show");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
+ .WithMany("Seasons")
+ .HasForeignKey("ShowID")
+ .HasConstraintName("fk_seasons_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Show");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Studio", "Studio")
+ .WithMany("Shows")
+ .HasForeignKey("StudioID")
+ .HasConstraintName("fk_shows_studios_studio_id")
+ .OnDelete(DeleteBehavior.SetNull);
+
+ b.Navigation("Studio");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode")
+ .WithMany("Tracks")
+ .HasForeignKey("EpisodeID")
+ .HasConstraintName("fk_tracks_episodes_episode_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Episode");
+ });
+
+ modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode")
+ .WithMany()
+ .HasForeignKey("EpisodeID")
+ .HasConstraintName("fk_watched_episodes_episodes_episode_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.User", null)
+ .WithMany("CurrentlyWatching")
+ .HasForeignKey("UserID")
+ .HasConstraintName("fk_watched_episodes_users_user_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Episode");
+ });
+
+ modelBuilder.Entity("ShowUser", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.User", null)
+ .WithMany()
+ .HasForeignKey("UsersID")
+ .HasConstraintName("fk_link_user_show_users_users_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
+ .WithMany()
+ .HasForeignKey("WatchedID")
+ .HasConstraintName("fk_link_user_show_shows_watched_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("collection_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_collection_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.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.Abstractions.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_episode_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Episode", null)
+ .WithMany("ExternalIDs")
+ .HasForeignKey("ResourceID")
+ .HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Provider");
+ });
+
+ modelBuilder.Entity("link_collection_show", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Collection", null)
+ .WithMany()
+ .HasForeignKey("collection_id")
+ .HasConstraintName("fk_link_collection_show_collections_collection_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
+ .WithMany()
+ .HasForeignKey("show_id")
+ .HasConstraintName("fk_link_collection_show_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("link_library_collection", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Collection", null)
+ .WithMany()
+ .HasForeignKey("collection_id")
+ .HasConstraintName("fk_link_library_collection_collections_collection_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Library", null)
+ .WithMany()
+ .HasForeignKey("library_id")
+ .HasConstraintName("fk_link_library_collection_libraries_library_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("link_library_provider", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Library", null)
+ .WithMany()
+ .HasForeignKey("library_id")
+ .HasConstraintName("fk_link_library_provider_libraries_library_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Provider", null)
+ .WithMany()
+ .HasForeignKey("provider_id")
+ .HasConstraintName("fk_link_library_provider_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("link_library_show", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Library", null)
+ .WithMany()
+ .HasForeignKey("library_id")
+ .HasConstraintName("fk_link_library_show_libraries_library_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
+ .WithMany()
+ .HasForeignKey("show_id")
+ .HasConstraintName("fk_link_library_show_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("link_show_genre", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Genre", null)
+ .WithMany()
+ .HasForeignKey("genre_id")
+ .HasConstraintName("fk_link_show_genre_genres_genre_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
+ .WithMany()
+ .HasForeignKey("show_id")
+ .HasConstraintName("fk_link_show_genre_shows_show_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("people_metadata_id", b =>
+ {
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_people_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.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.Abstractions.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_season_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.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.Abstractions.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_show_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.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.Abstractions.Models.Provider", "Provider")
+ .WithMany()
+ .HasForeignKey("ProviderID")
+ .HasConstraintName("fk_studio_metadata_id_providers_provider_id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kyoo.Abstractions.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.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");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/back/src/Kyoo.Postgresql/Migrations/20230621074246_RemoveTrigers.cs b/back/src/Kyoo.Postgresql/Migrations/20230621074246_RemoveTrigers.cs
new file mode 100644
index 00000000..69275171
--- /dev/null
+++ b/back/src/Kyoo.Postgresql/Migrations/20230621074246_RemoveTrigers.cs
@@ -0,0 +1,50 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace Kyoo.Postgresql.Migrations
+{
+ public partial class RemoveTrigers : Migration
+ {
+ protected override void Up(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")
+ .OldAnnotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle,attachment");
+
+ // language=PostgreSQL
+ migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON shows;");
+ // language=PostgreSQL
+ migrationBuilder.Sql(@"DROP FUNCTION show_slug_update;");
+ // language=PostgreSQL
+ migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger ON seasons;");
+ // language=PostgreSQL
+ migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;");
+ // language=PostgreSQL
+ migrationBuilder.Sql("DROP TRIGGER episode_slug_trigger ON episodes;");
+ // language=PostgreSQL
+ migrationBuilder.Sql(@"DROP FUNCTION episode_slug_update;");
+ // language=PostgreSQL
+ migrationBuilder.Sql("DROP TRIGGER track_slug_trigger ON tracks;");
+ // language=PostgreSQL
+ migrationBuilder.Sql(@"DROP FUNCTION track_slug_update;");
+ // language=PostgreSQL
+ migrationBuilder.Sql("DROP TRIGGER episode_track_slug_trigger ON episodes;");
+ // language=PostgreSQL
+ migrationBuilder.Sql(@"DROP FUNCTION episode_update_tracks_slug;");
+ }
+
+ 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,attachment")
+ .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");
+ }
+ }
+}
diff --git a/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs b/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs
index 94f265f1..2345f84d 100644
--- a/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs
+++ b/back/src/Kyoo.Postgresql/Migrations/PostgresContextModelSnapshot.cs
@@ -1,4 +1,4 @@
-//
+//
using System;
using System.Collections.Generic;
using Kyoo.Abstractions.Models;
@@ -19,12 +19,12 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder
.HasPostgresEnum(null, "item_type", new[] { "show", "movie", "collection" })
.HasPostgresEnum(null, "status", new[] { "unknown", "finished", "airing", "planned" })
- .HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle", "attachment" })
+ .HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle" })
.HasAnnotation("Relational:MaxIdentifierLength", 63)
- .HasAnnotation("ProductVersion", "5.0.8")
+ .HasAnnotation("ProductVersion", "5.0.7")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
- modelBuilder.Entity("Kyoo.Models.Collection", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -59,7 +59,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("collections");
});
- modelBuilder.Entity("Kyoo.Models.Episode", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -129,7 +129,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("episodes");
});
- modelBuilder.Entity("Kyoo.Models.Genre", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Genre", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -156,7 +156,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("genres");
});
- modelBuilder.Entity("Kyoo.Models.Library", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Library", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -187,7 +187,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("libraries");
});
- modelBuilder.Entity("Kyoo.Models.LibraryItem", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.LibraryItem", b =>
{
b.Property("ID")
.HasColumnType("integer")
@@ -232,7 +232,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToView("library_items");
});
- modelBuilder.Entity("Kyoo.Models.People", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.People", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -263,7 +263,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("people");
});
- modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -299,7 +299,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("people_roles");
});
- modelBuilder.Entity("Kyoo.Models.Provider", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Provider", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -330,7 +330,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("providers");
});
- modelBuilder.Entity("Kyoo.Models.Season", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -385,7 +385,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("seasons");
});
- modelBuilder.Entity("Kyoo.Models.Show", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -451,7 +451,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("shows");
});
- modelBuilder.Entity("Kyoo.Models.Studio", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -478,7 +478,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("studios");
});
- modelBuilder.Entity("Kyoo.Models.Track", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -545,7 +545,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("tracks");
});
- modelBuilder.Entity("Kyoo.Models.User", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.User", b =>
{
b.Property("ID")
.ValueGeneratedOnAdd()
@@ -592,7 +592,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("users");
});
- modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b =>
{
b.Property("UserID")
.HasColumnType("integer")
@@ -891,15 +891,15 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("studio_metadata_id");
});
- modelBuilder.Entity("Kyoo.Models.Episode", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
{
- b.HasOne("Kyoo.Models.Season", "Season")
+ b.HasOne("Kyoo.Abstractions.Models.Season", "Season")
.WithMany("Episodes")
.HasForeignKey("SeasonID")
.HasConstraintName("fk_episodes_seasons_season_id")
.OnDelete(DeleteBehavior.Cascade);
- b.HasOne("Kyoo.Models.Show", "Show")
+ b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
.WithMany("Episodes")
.HasForeignKey("ShowID")
.HasConstraintName("fk_episodes_shows_show_id")
@@ -911,16 +911,16 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Show");
});
- modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b =>
{
- b.HasOne("Kyoo.Models.People", "People")
+ b.HasOne("Kyoo.Abstractions.Models.People", "People")
.WithMany("Roles")
.HasForeignKey("PeopleID")
.HasConstraintName("fk_people_roles_people_people_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Show", "Show")
+ b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
.WithMany("People")
.HasForeignKey("ShowID")
.HasConstraintName("fk_people_roles_shows_show_id")
@@ -932,9 +932,9 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Show");
});
- modelBuilder.Entity("Kyoo.Models.Season", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
{
- b.HasOne("Kyoo.Models.Show", "Show")
+ b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
.WithMany("Seasons")
.HasForeignKey("ShowID")
.HasConstraintName("fk_seasons_shows_show_id")
@@ -944,9 +944,9 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Show");
});
- modelBuilder.Entity("Kyoo.Models.Show", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
{
- b.HasOne("Kyoo.Models.Studio", "Studio")
+ b.HasOne("Kyoo.Abstractions.Models.Studio", "Studio")
.WithMany("Shows")
.HasForeignKey("StudioID")
.HasConstraintName("fk_shows_studios_studio_id")
@@ -955,9 +955,9 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Studio");
});
- modelBuilder.Entity("Kyoo.Models.Track", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b =>
{
- b.HasOne("Kyoo.Models.Episode", "Episode")
+ b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode")
.WithMany("Tracks")
.HasForeignKey("EpisodeID")
.HasConstraintName("fk_tracks_episodes_episode_id")
@@ -967,16 +967,16 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Episode");
});
- modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b =>
{
- b.HasOne("Kyoo.Models.Episode", "Episode")
+ b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode")
.WithMany()
.HasForeignKey("EpisodeID")
.HasConstraintName("fk_watched_episodes_episodes_episode_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.User", null)
+ b.HasOne("Kyoo.Abstractions.Models.User", null)
.WithMany("CurrentlyWatching")
.HasForeignKey("UserID")
.HasConstraintName("fk_watched_episodes_users_user_id")
@@ -988,14 +988,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("ShowUser", b =>
{
- b.HasOne("Kyoo.Models.User", null)
+ b.HasOne("Kyoo.Abstractions.Models.User", null)
.WithMany()
.HasForeignKey("UsersID")
.HasConstraintName("fk_link_user_show_users_users_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Show", null)
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("WatchedID")
.HasConstraintName("fk_link_user_show_shows_watched_id")
@@ -1005,14 +1005,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("collection_metadata_id", b =>
{
- b.HasOne("Kyoo.Models.Provider", "Provider")
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_collection_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Collection", null)
+ b.HasOne("Kyoo.Abstractions.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_collection_metadata_id_collections_collection_id")
@@ -1024,14 +1024,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("episode_metadata_id", b =>
{
- b.HasOne("Kyoo.Models.Provider", "Provider")
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_episode_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Episode", null)
+ b.HasOne("Kyoo.Abstractions.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
@@ -1043,14 +1043,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_collection_show", b =>
{
- b.HasOne("Kyoo.Models.Collection", null)
+ b.HasOne("Kyoo.Abstractions.Models.Collection", null)
.WithMany()
.HasForeignKey("collection_id")
.HasConstraintName("fk_link_collection_show_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Show", null)
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("show_id")
.HasConstraintName("fk_link_collection_show_shows_show_id")
@@ -1060,14 +1060,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_library_collection", b =>
{
- b.HasOne("Kyoo.Models.Collection", null)
+ b.HasOne("Kyoo.Abstractions.Models.Collection", null)
.WithMany()
.HasForeignKey("collection_id")
.HasConstraintName("fk_link_library_collection_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Library", null)
+ b.HasOne("Kyoo.Abstractions.Models.Library", null)
.WithMany()
.HasForeignKey("library_id")
.HasConstraintName("fk_link_library_collection_libraries_library_id")
@@ -1077,14 +1077,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_library_provider", b =>
{
- b.HasOne("Kyoo.Models.Library", null)
+ b.HasOne("Kyoo.Abstractions.Models.Library", null)
.WithMany()
.HasForeignKey("library_id")
.HasConstraintName("fk_link_library_provider_libraries_library_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Provider", null)
+ b.HasOne("Kyoo.Abstractions.Models.Provider", null)
.WithMany()
.HasForeignKey("provider_id")
.HasConstraintName("fk_link_library_provider_providers_provider_id")
@@ -1094,14 +1094,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_library_show", b =>
{
- b.HasOne("Kyoo.Models.Library", null)
+ b.HasOne("Kyoo.Abstractions.Models.Library", null)
.WithMany()
.HasForeignKey("library_id")
.HasConstraintName("fk_link_library_show_libraries_library_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Show", null)
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("show_id")
.HasConstraintName("fk_link_library_show_shows_show_id")
@@ -1111,14 +1111,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_show_genre", b =>
{
- b.HasOne("Kyoo.Models.Genre", null)
+ b.HasOne("Kyoo.Abstractions.Models.Genre", null)
.WithMany()
.HasForeignKey("genre_id")
.HasConstraintName("fk_link_show_genre_genres_genre_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Show", null)
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("show_id")
.HasConstraintName("fk_link_show_genre_shows_show_id")
@@ -1128,14 +1128,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("people_metadata_id", b =>
{
- b.HasOne("Kyoo.Models.Provider", "Provider")
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_people_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.People", null)
+ b.HasOne("Kyoo.Abstractions.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_people_metadata_id_people_people_id")
@@ -1147,14 +1147,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("season_metadata_id", b =>
{
- b.HasOne("Kyoo.Models.Provider", "Provider")
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_season_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Season", null)
+ b.HasOne("Kyoo.Abstractions.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_season_metadata_id_seasons_season_id")
@@ -1166,14 +1166,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("show_metadata_id", b =>
{
- b.HasOne("Kyoo.Models.Provider", "Provider")
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_show_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Show", null)
+ b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_show_metadata_id_shows_show_id")
@@ -1185,14 +1185,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("studio_metadata_id", b =>
{
- b.HasOne("Kyoo.Models.Provider", "Provider")
+ b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_studio_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("Kyoo.Models.Studio", null)
+ b.HasOne("Kyoo.Abstractions.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_studio_metadata_id_studios_studio_id")
@@ -1202,33 +1202,33 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Provider");
});
- modelBuilder.Entity("Kyoo.Models.Collection", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
});
- modelBuilder.Entity("Kyoo.Models.Episode", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Tracks");
});
- modelBuilder.Entity("Kyoo.Models.People", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.People", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Roles");
});
- modelBuilder.Entity("Kyoo.Models.Season", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
{
b.Navigation("Episodes");
b.Navigation("ExternalIDs");
});
- modelBuilder.Entity("Kyoo.Models.Show", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
{
b.Navigation("Episodes");
@@ -1239,14 +1239,14 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Seasons");
});
- modelBuilder.Entity("Kyoo.Models.Studio", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});
- modelBuilder.Entity("Kyoo.Models.User", b =>
+ modelBuilder.Entity("Kyoo.Abstractions.Models.User", b =>
{
b.Navigation("CurrentlyWatching");
});