Updating migrations

This commit is contained in:
Zoe Roux 2021-07-28 16:24:03 +02:00
parent 9777551b78
commit 5f49986d9d
28 changed files with 2124 additions and 1534 deletions

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Kyoo.Models.Attributes;
@ -18,7 +19,7 @@ namespace Kyoo.Models
/// A type union between <see cref="Show"/> and <see cref="Collection"/>.
/// This is used to list content put inside a library.
/// </summary>
public class LibraryItem : IResource
public class LibraryItem : IResource, IThumbnails
{
/// <inheritdoc />
public int ID { get; set; }
@ -52,13 +53,17 @@ namespace Kyoo.Models
/// It can also be null if this is unknown.
/// </summary>
public DateTime? EndAir { get; set; }
/// <inheritdoc />
public Dictionary<int, string> Images { get; set; }
/// <summary>
/// The path of this item's poster.
/// By default, the http path for this poster is returned from the public API.
/// This can be disabled using the internal query flag.
/// </summary>
[SerializeAs("{HOST}/api/{Type:l}/{Slug}/poster")] public string Poster { get; set; }
[SerializeAs("{HOST}/api/{Type:l}/{Slug}/poster")]
public string Poster => Images[Thumbnails.Poster];
/// <summary>
/// The type of this item (ether a collection, a show or a movie).
@ -84,7 +89,7 @@ namespace Kyoo.Models
Status = show.Status;
StartAir = show.StartAir;
EndAir = show.EndAir;
Poster = show.Poster;
Images = show.Images;
Type = show.IsMovie ? ItemType.Movie : ItemType.Show;
}
@ -101,7 +106,7 @@ namespace Kyoo.Models
Status = Models.Status.Unknown;
StartAir = null;
EndAir = null;
Poster = collection.Poster;
Images = collection.Images;
Type = ItemType.Collection;
}
@ -117,7 +122,7 @@ namespace Kyoo.Models
Status = x.Status,
StartAir = x.StartAir,
EndAir = x.EndAir,
Poster= x.Poster,
Images = x.Images,
Type = x.IsMovie ? ItemType.Movie : ItemType.Show
};
@ -133,7 +138,7 @@ namespace Kyoo.Models
Status = Models.Status.Unknown,
StartAir = null,
EndAir = null,
Poster = x.Poster,
Images = x.Images,
Type = ItemType.Collection
};
}

View File

@ -13,27 +13,22 @@ namespace Kyoo.Models
/// The ID of the resource which possess the metadata.
/// </summary>
[SerializeIgnore] public int ResourceID { get; set; }
/// <summary>
/// The name of the resource type. This is only used internally to discriminate types.
/// </summary>
[SerializeIgnore] public string ResourceType { get; set; }
/// <summary>
/// The ID of the provider.
/// </summary>
[SerializeIgnore] public int ProviderID { get; set; }
/// <summary>
/// The provider that can do something with this ID.
/// </summary>
public Provider Provider { get; set; }
/// <summary>
/// The ID of the resource on the external provider.
/// </summary>
public string DataID { get; set; }
/// <summary>
/// The URL of the resource on the external provider.
/// </summary>
@ -44,10 +39,7 @@ namespace Kyoo.Models
/// </summary>
public static Expression<Func<MetadataID, object>> PrimaryKey
{
get
{
return x => new {First = x.ResourceID, Second = x.ProviderID, Type = x.ResourceType};
}
get { return x => new { First = x.ResourceID, Second = x.ProviderID }; }
}
}
}

View File

@ -65,7 +65,10 @@ namespace Kyoo.Models
{
Slug = Utility.ToSlug(name);
Name = name;
Images[Thumbnails.Logo] = logo;
Images = new Dictionary<int, string>
{
[Thumbnails.Logo] = logo
};
}
}
}

View File

@ -60,10 +60,7 @@ namespace Kyoo
/// All providers of Kyoo. See <see cref="Provider"/>.
/// </summary>
public DbSet<Provider> Providers { get; set; }
/// <summary>
/// All metadata ids, not discriminated by type. See <see cref="MetadataID"/>.
/// </summary>
public DbSet<MetadataID> MetadataIDs { get; set; }
/// <summary>
/// The list of registered users.
/// </summary>
@ -87,6 +84,25 @@ namespace Kyoo
/// </remarks>
public DbSet<LibraryItem> LibraryItems { get; set; }
/// <summary>
/// Get the name of the metadata table of the given type.
/// </summary>
/// <typeparam name="T">The type related to the metadata</typeparam>
/// <returns>The name of the table containing the metadata.</returns>
protected abstract string MetadataName<T>()
where T : IMetadata;
/// <summary>
/// Get all metadataIDs (ExternalIDs) of a given resource. See <see cref="MetadataID"/>.
/// </summary>
/// <typeparam name="T">The metadata of this type will be returned.</typeparam>
/// <returns>A queryable of metadata ids for a type.</returns>
public DbSet<MetadataID> MetadataIds<T>()
where T : class, IMetadata
{
return Set<MetadataID>(MetadataName<T>());
}
/// <summary>
/// Get a generic link between two resource types.
/// </summary>
@ -133,9 +149,12 @@ namespace Kyoo
private void _HasMetadata<T>(ModelBuilder modelBuilder)
where T : class, IMetadata
{
modelBuilder.Entity<T>()
.HasMany(x => x.ExternalIDs)
.WithOne()
modelBuilder.SharedTypeEntity<MetadataID>(MetadataName<T>())
.HasKey(MetadataID.PrimaryKey);
modelBuilder.SharedTypeEntity<MetadataID>(MetadataName<T>())
.HasOne<T>()
.WithMany(x => x.ExternalIDs)
.HasForeignKey(x => x.ResourceID)
.OnDelete(DeleteBehavior.Cascade);
}
@ -149,6 +168,9 @@ namespace Kyoo
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PeopleRole>()
.Ignore(x => x.ForPeople);
modelBuilder.Entity<Show>()
.HasMany(x => x.Seasons)
.WithOne(x => x.Show)
@ -243,14 +265,6 @@ namespace Kyoo
.WithMany(x => x.ShowLinks),
y => y.HasKey(Link<User, Show>.PrimaryKey));
modelBuilder.Entity<MetadataID>()
.HasKey(MetadataID.PrimaryKey);
modelBuilder.Entity<MetadataID>()
.Property(x => x.ResourceType)
.IsRequired();
modelBuilder.Entity<MetadataID>()
.HasDiscriminator(x => x.ResourceType);
_HasMetadata<Collection>(modelBuilder);
_HasMetadata<Show>(modelBuilder);
_HasMetadata<Season>(modelBuilder);
@ -259,7 +273,7 @@ namespace Kyoo
_HasMetadata<Studio>(modelBuilder);
modelBuilder.Entity<WatchedEpisode>()
.HasKey(x => new {First = x.FirstID, Second = x.SecondID});
.HasKey(x => new { First = x.FirstID, Second = x.SecondID });
modelBuilder.Entity<Collection>().Property(x => x.Slug).IsRequired();
modelBuilder.Entity<Genre>().Property(x => x.Slug).IsRequired();

View File

@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace Kyoo.Postgresql.Migrations
{
[DbContext(typeof(PostgresContext))]
[Migration("20210723224326_Initial")]
[Migration("20210728141410_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -34,6 +34,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Name")
.HasColumnType("text")
.HasColumnName("name");
@ -42,10 +46,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -77,6 +77,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("integer")
.HasColumnName("episode_number");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@ -106,10 +110,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("slug");
b.Property<string>("Thumb")
.HasColumnType("text")
.HasColumnName("thumb");
b.Property<string>("Title")
.HasColumnType("text")
.HasColumnName("title");
@ -200,14 +200,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.HasColumnType("text")
.HasColumnName("slug");
@ -348,114 +348,6 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("link_user_show");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_episode");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_episode_second_id");
b.ToTable("metadata_id_episode");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_people");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_people_second_id");
b.ToTable("metadata_id_people");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_season");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_season_second_id");
b.ToTable("metadata_id_season");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_show");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_show_second_id");
b.ToTable("metadata_id_show");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property<int>("ID")
@ -464,14 +356,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Name")
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -495,10 +387,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<bool>("ForPeople")
.HasColumnType("boolean")
.HasColumnName("for_people");
b.Property<int>("PeopleID")
.HasColumnType("integer")
.HasColumnName("people_id");
@ -535,9 +423,9 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Logo")
.HasColumnType("text")
.HasColumnName("logo");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("LogoExtension")
.HasColumnType("text")
@ -574,14 +462,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_date");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<int>("SeasonNumber")
.HasColumnType("integer")
.HasColumnName("season_number");
@ -629,22 +517,18 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text[]")
.HasColumnName("aliases");
b.Property<string>("Backdrop")
.HasColumnType("text")
.HasColumnName("backdrop");
b.Property<DateTime?>("EndAir")
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<bool>("IsMovie")
.HasColumnType("boolean")
.HasColumnName("is_movie");
b.Property<string>("Logo")
.HasColumnType("text")
.HasColumnName("logo");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@ -653,10 +537,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("path");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -678,10 +558,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("title");
b.Property<string>("TrailerUrl")
.HasColumnType("text")
.HasColumnName("trailer_url");
b.HasKey("ID")
.HasName("pk_shows");
@ -855,6 +731,168 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("watched_episodes");
});
modelBuilder.Entity("collection_metadata_id", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("ResourceID", "ProviderID")
.HasName("pk_episode_metadata_id");
b.HasIndex("ProviderID")
.HasDatabaseName("ix_episode_metadata_id_provider_id");
b.ToTable("episode_metadata_id");
});
modelBuilder.Entity("people_metadata_id", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("ResourceID", "ProviderID")
.HasName("pk_studio_metadata_id");
b.HasIndex("ProviderID")
.HasDatabaseName("ix_studio_metadata_id_provider_id");
b.ToTable("studio_metadata_id");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@ -1001,90 +1039,6 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.HasOne("Kyoo.Models.Episode", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_episode_episodes_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_episode_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.HasOne("Kyoo.Models.People", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_people_people_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_people_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.HasOne("Kyoo.Models.Season", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_season_seasons_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_season_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.HasOne("Kyoo.Models.Show", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_show_shows_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_show_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@ -1162,8 +1116,124 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("collection_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_collection_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_collection_metadata_id_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("episode_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_episode_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("people_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_people_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_people_metadata_id_people_people_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("season_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_season_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_season_metadata_id_seasons_season_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("show_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_show_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_show_metadata_id_shows_show_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("studio_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_studio_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_studio_metadata_id_studios_studio_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@ -1228,6 +1298,8 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});

View File

@ -23,7 +23,7 @@ namespace Kyoo.Postgresql.Migrations
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
slug = table.Column<string>(type: "text", nullable: false),
name = table.Column<string>(type: "text", nullable: true),
poster = table.Column<string>(type: "text", nullable: true),
images = table.Column<Dictionary<int, string>>(type: "jsonb", nullable: true),
overview = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
@ -68,7 +68,7 @@ namespace Kyoo.Postgresql.Migrations
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
slug = table.Column<string>(type: "text", nullable: false),
name = table.Column<string>(type: "text", nullable: true),
poster = table.Column<string>(type: "text", nullable: true)
images = table.Column<Dictionary<int, string>>(type: "jsonb", nullable: true)
},
constraints: table =>
{
@ -83,7 +83,7 @@ namespace Kyoo.Postgresql.Migrations
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
slug = table.Column<string>(type: "text", nullable: false),
name = table.Column<string>(type: "text", nullable: true),
logo = table.Column<string>(type: "text", nullable: true),
images = table.Column<Dictionary<int, string>>(type: "jsonb", nullable: true),
logo_extension = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
@ -147,6 +147,32 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "collection_metadata_id",
columns: table => new
{
resource_id = table.Column<int>(type: "integer", nullable: false),
provider_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_collection_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
name: "fk_collection_metadata_id_collections_collection_id",
column: x => x.resource_id,
principalTable: "collections",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_collection_metadata_id_providers_provider_id",
column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "link_library_provider",
columns: table => new
@ -172,26 +198,26 @@ namespace Kyoo.Postgresql.Migrations
});
migrationBuilder.CreateTable(
name: "metadata_id_people",
name: "people_metadata_id",
columns: table => new
{
first_id = table.Column<int>(type: "integer", nullable: false),
second_id = table.Column<int>(type: "integer", nullable: false),
resource_id = table.Column<int>(type: "integer", nullable: false),
provider_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_metadata_id_people", x => new { x.first_id, x.second_id });
table.PrimaryKey("pk_people_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
name: "fk_metadata_id_people_people_first_id",
column: x => x.first_id,
name: "fk_people_metadata_id_people_people_id",
column: x => x.resource_id,
principalTable: "people",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_metadata_id_people_providers_second_id",
column: x => x.second_id,
name: "fk_people_metadata_id_providers_provider_id",
column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
@ -209,12 +235,9 @@ namespace Kyoo.Postgresql.Migrations
path = table.Column<string>(type: "text", nullable: true),
overview = table.Column<string>(type: "text", nullable: true),
status = table.Column<Status>(type: "status", nullable: false),
trailer_url = table.Column<string>(type: "text", nullable: true),
start_air = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
end_air = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
poster = table.Column<string>(type: "text", nullable: true),
logo = table.Column<string>(type: "text", nullable: true),
backdrop = table.Column<string>(type: "text", nullable: true),
images = table.Column<Dictionary<int, string>>(type: "jsonb", nullable: true),
is_movie = table.Column<bool>(type: "boolean", nullable: false),
studio_id = table.Column<int>(type: "integer", nullable: true)
},
@ -229,6 +252,32 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.SetNull);
});
migrationBuilder.CreateTable(
name: "studio_metadata_id",
columns: table => new
{
resource_id = table.Column<int>(type: "integer", nullable: false),
provider_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_studio_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
name: "fk_studio_metadata_id_providers_provider_id",
column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_studio_metadata_id_studios_studio_id",
column: x => x.resource_id,
principalTable: "studios",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "link_collection_show",
columns: table => new
@ -325,39 +374,12 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "metadata_id_show",
columns: table => new
{
first_id = table.Column<int>(type: "integer", nullable: false),
second_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_metadata_id_show", x => new { x.first_id, x.second_id });
table.ForeignKey(
name: "fk_metadata_id_show_providers_second_id",
column: x => x.second_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_metadata_id_show_shows_first_id",
column: x => x.first_id,
principalTable: "shows",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "people_roles",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
for_people = table.Column<bool>(type: "boolean", nullable: false),
people_id = table.Column<int>(type: "integer", nullable: false),
show_id = table.Column<int>(type: "integer", nullable: false),
type = table.Column<string>(type: "text", nullable: true),
@ -393,7 +415,7 @@ namespace Kyoo.Postgresql.Migrations
overview = table.Column<string>(type: "text", nullable: true),
start_date = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
end_date = table.Column<DateTime>(type: "timestamp without time zone", nullable: true),
poster = table.Column<string>(type: "text", nullable: true)
images = table.Column<Dictionary<int, string>>(type: "jsonb", nullable: true)
},
constraints: table =>
{
@ -406,6 +428,32 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "show_metadata_id",
columns: table => new
{
resource_id = table.Column<int>(type: "integer", nullable: false),
provider_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_show_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
name: "fk_show_metadata_id_providers_provider_id",
column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_show_metadata_id_shows_show_id",
column: x => x.resource_id,
principalTable: "shows",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "episodes",
columns: table => new
@ -419,7 +467,7 @@ namespace Kyoo.Postgresql.Migrations
episode_number = table.Column<int>(type: "integer", nullable: true),
absolute_number = table.Column<int>(type: "integer", nullable: true),
path = table.Column<string>(type: "text", nullable: true),
thumb = table.Column<string>(type: "text", nullable: true),
images = table.Column<Dictionary<int, string>>(type: "jsonb", nullable: true),
title = table.Column<string>(type: "text", nullable: true),
overview = table.Column<string>(type: "text", nullable: true),
release_date = table.Column<DateTime>(type: "timestamp without time zone", nullable: true)
@ -442,52 +490,52 @@ namespace Kyoo.Postgresql.Migrations
});
migrationBuilder.CreateTable(
name: "metadata_id_season",
name: "season_metadata_id",
columns: table => new
{
first_id = table.Column<int>(type: "integer", nullable: false),
second_id = table.Column<int>(type: "integer", nullable: false),
resource_id = table.Column<int>(type: "integer", nullable: false),
provider_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_metadata_id_season", x => new { x.first_id, x.second_id });
table.PrimaryKey("pk_season_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
name: "fk_metadata_id_season_providers_second_id",
column: x => x.second_id,
name: "fk_season_metadata_id_providers_provider_id",
column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_metadata_id_season_seasons_first_id",
column: x => x.first_id,
name: "fk_season_metadata_id_seasons_season_id",
column: x => x.resource_id,
principalTable: "seasons",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "metadata_id_episode",
name: "episode_metadata_id",
columns: table => new
{
first_id = table.Column<int>(type: "integer", nullable: false),
second_id = table.Column<int>(type: "integer", nullable: false),
resource_id = table.Column<int>(type: "integer", nullable: false),
provider_id = table.Column<int>(type: "integer", nullable: false),
data_id = table.Column<string>(type: "text", nullable: true),
link = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_metadata_id_episode", x => new { x.first_id, x.second_id });
table.PrimaryKey("pk_episode_metadata_id", x => new { x.resource_id, x.provider_id });
table.ForeignKey(
name: "fk_metadata_id_episode_episodes_first_id",
column: x => x.first_id,
name: "fk_episode_metadata_id_episodes_episode_id",
column: x => x.resource_id,
principalTable: "episodes",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "fk_metadata_id_episode_providers_second_id",
column: x => x.second_id,
name: "fk_episode_metadata_id_providers_provider_id",
column: x => x.provider_id,
principalTable: "providers",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
@ -547,12 +595,22 @@ namespace Kyoo.Postgresql.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "ix_collection_metadata_id_provider_id",
table: "collection_metadata_id",
column: "provider_id");
migrationBuilder.CreateIndex(
name: "ix_collections_slug",
table: "collections",
column: "slug",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_episode_metadata_id_provider_id",
table: "episode_metadata_id",
column: "provider_id");
migrationBuilder.CreateIndex(
name: "ix_episodes_season_id",
table: "episodes",
@ -612,32 +670,17 @@ namespace Kyoo.Postgresql.Migrations
table: "link_user_show",
column: "second_id");
migrationBuilder.CreateIndex(
name: "ix_metadata_id_episode_second_id",
table: "metadata_id_episode",
column: "second_id");
migrationBuilder.CreateIndex(
name: "ix_metadata_id_people_second_id",
table: "metadata_id_people",
column: "second_id");
migrationBuilder.CreateIndex(
name: "ix_metadata_id_season_second_id",
table: "metadata_id_season",
column: "second_id");
migrationBuilder.CreateIndex(
name: "ix_metadata_id_show_second_id",
table: "metadata_id_show",
column: "second_id");
migrationBuilder.CreateIndex(
name: "ix_people_slug",
table: "people",
column: "slug",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_people_metadata_id_provider_id",
table: "people_metadata_id",
column: "provider_id");
migrationBuilder.CreateIndex(
name: "ix_people_roles_people_id",
table: "people_roles",
@ -654,6 +697,11 @@ namespace Kyoo.Postgresql.Migrations
column: "slug",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_season_metadata_id_provider_id",
table: "season_metadata_id",
column: "provider_id");
migrationBuilder.CreateIndex(
name: "ix_seasons_show_id_season_number",
table: "seasons",
@ -666,6 +714,11 @@ namespace Kyoo.Postgresql.Migrations
column: "slug",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_show_metadata_id_provider_id",
table: "show_metadata_id",
column: "provider_id");
migrationBuilder.CreateIndex(
name: "ix_shows_slug",
table: "shows",
@ -677,6 +730,11 @@ namespace Kyoo.Postgresql.Migrations
table: "shows",
column: "studio_id");
migrationBuilder.CreateIndex(
name: "ix_studio_metadata_id_provider_id",
table: "studio_metadata_id",
column: "provider_id");
migrationBuilder.CreateIndex(
name: "ix_studios_slug",
table: "studios",
@ -709,6 +767,12 @@ namespace Kyoo.Postgresql.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "collection_metadata_id");
migrationBuilder.DropTable(
name: "episode_metadata_id");
migrationBuilder.DropTable(
name: "link_collection_show");
@ -728,20 +792,20 @@ namespace Kyoo.Postgresql.Migrations
name: "link_user_show");
migrationBuilder.DropTable(
name: "metadata_id_episode");
migrationBuilder.DropTable(
name: "metadata_id_people");
migrationBuilder.DropTable(
name: "metadata_id_season");
migrationBuilder.DropTable(
name: "metadata_id_show");
name: "people_metadata_id");
migrationBuilder.DropTable(
name: "people_roles");
migrationBuilder.DropTable(
name: "season_metadata_id");
migrationBuilder.DropTable(
name: "show_metadata_id");
migrationBuilder.DropTable(
name: "studio_metadata_id");
migrationBuilder.DropTable(
name: "tracks");
@ -758,10 +822,10 @@ namespace Kyoo.Postgresql.Migrations
name: "genres");
migrationBuilder.DropTable(
name: "providers");
name: "people");
migrationBuilder.DropTable(
name: "people");
name: "providers");
migrationBuilder.DropTable(
name: "episodes");

View File

@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace Kyoo.Postgresql.Migrations
{
[DbContext(typeof(PostgresContext))]
[Migration("20210723224335_Triggers")]
[Migration("20210728142213_Triggers")]
partial class Triggers
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -34,6 +34,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Name")
.HasColumnType("text")
.HasColumnName("name");
@ -42,10 +46,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -77,6 +77,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("integer")
.HasColumnName("episode_number");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@ -106,10 +110,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("slug");
b.Property<string>("Thumb")
.HasColumnType("text")
.HasColumnName("thumb");
b.Property<string>("Title")
.HasColumnType("text")
.HasColumnName("title");
@ -200,14 +200,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.HasColumnType("text")
.HasColumnName("slug");
@ -348,114 +348,6 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("link_user_show");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_episode");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_episode_second_id");
b.ToTable("metadata_id_episode");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_people");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_people_second_id");
b.ToTable("metadata_id_people");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_season");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_season_second_id");
b.ToTable("metadata_id_season");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_show");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_show_second_id");
b.ToTable("metadata_id_show");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property<int>("ID")
@ -464,14 +356,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Name")
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -495,10 +387,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<bool>("ForPeople")
.HasColumnType("boolean")
.HasColumnName("for_people");
b.Property<int>("PeopleID")
.HasColumnType("integer")
.HasColumnName("people_id");
@ -535,9 +423,9 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Logo")
.HasColumnType("text")
.HasColumnName("logo");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("LogoExtension")
.HasColumnType("text")
@ -574,14 +462,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_date");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<int>("SeasonNumber")
.HasColumnType("integer")
.HasColumnName("season_number");
@ -629,22 +517,18 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text[]")
.HasColumnName("aliases");
b.Property<string>("Backdrop")
.HasColumnType("text")
.HasColumnName("backdrop");
b.Property<DateTime?>("EndAir")
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<bool>("IsMovie")
.HasColumnType("boolean")
.HasColumnName("is_movie");
b.Property<string>("Logo")
.HasColumnType("text")
.HasColumnName("logo");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@ -653,10 +537,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("path");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -678,10 +558,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("title");
b.Property<string>("TrailerUrl")
.HasColumnType("text")
.HasColumnName("trailer_url");
b.HasKey("ID")
.HasName("pk_shows");
@ -855,6 +731,168 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("watched_episodes");
});
modelBuilder.Entity("collection_metadata_id", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("ResourceID", "ProviderID")
.HasName("pk_episode_metadata_id");
b.HasIndex("ProviderID")
.HasDatabaseName("ix_episode_metadata_id_provider_id");
b.ToTable("episode_metadata_id");
});
modelBuilder.Entity("people_metadata_id", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("ResourceID", "ProviderID")
.HasName("pk_studio_metadata_id");
b.HasIndex("ProviderID")
.HasDatabaseName("ix_studio_metadata_id_provider_id");
b.ToTable("studio_metadata_id");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@ -1001,90 +1039,6 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.HasOne("Kyoo.Models.Episode", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_episode_episodes_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_episode_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.HasOne("Kyoo.Models.People", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_people_people_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_people_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.HasOne("Kyoo.Models.Season", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_season_seasons_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_season_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.HasOne("Kyoo.Models.Show", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_show_shows_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_show_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@ -1162,8 +1116,124 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("collection_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_collection_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_collection_metadata_id_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("episode_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_episode_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("people_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_people_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_people_metadata_id_people_people_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("season_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_season_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_season_metadata_id_seasons_season_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("show_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_show_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_show_metadata_id_shows_show_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("studio_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_studio_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_studio_metadata_id_studios_studio_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@ -1228,6 +1298,8 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});

View File

@ -141,7 +141,7 @@ namespace Kyoo.Postgresql.Migrations
// language=PostgreSQL
migrationBuilder.Sql(@"
CREATE VIEW library_items AS
SELECT s.id, s.slug, s.title, s.overview, s.status, s.start_air, s.end_air, s.poster, CASE
SELECT s.id, s.slug, s.title, s.overview, s.status, s.start_air, s.end_air, s.images, CASE
WHEN s.is_movie THEN 'movie'::item_type
ELSE 'show'::item_type
END AS type
@ -153,7 +153,7 @@ namespace Kyoo.Postgresql.Migrations
WHERE s.id = l.second_id))
UNION ALL
SELECT -c0.id, c0.slug, c0.name AS title, c0.overview, 'unknown'::status AS status,
NULL AS start_air, NULL AS end_air, c0.poster, 'collection'::item_type AS type
NULL AS start_air, NULL AS end_air, c0.images, 'collection'::item_type AS type
FROM collections AS c0");
}

View File

@ -32,6 +32,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Name")
.HasColumnType("text")
.HasColumnName("name");
@ -40,10 +44,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -75,6 +75,10 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("integer")
.HasColumnName("episode_number");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@ -104,10 +108,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("slug");
b.Property<string>("Thumb")
.HasColumnType("text")
.HasColumnName("thumb");
b.Property<string>("Title")
.HasColumnType("text")
.HasColumnName("title");
@ -198,14 +198,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.HasColumnType("text")
.HasColumnName("slug");
@ -346,114 +346,6 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("link_user_show");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_episode");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_episode_second_id");
b.ToTable("metadata_id_episode");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_people");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_people_second_id");
b.ToTable("metadata_id_people");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_season");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_season_second_id");
b.ToTable("metadata_id_season");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("integer")
.HasColumnName("first_id");
b.Property<int>("SecondID")
.HasColumnType("integer")
.HasColumnName("second_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("FirstID", "SecondID")
.HasName("pk_metadata_id_show");
b.HasIndex("SecondID")
.HasDatabaseName("ix_metadata_id_show_second_id");
b.ToTable("metadata_id_show");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property<int>("ID")
@ -462,14 +354,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Name")
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -493,10 +385,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<bool>("ForPeople")
.HasColumnType("boolean")
.HasColumnName("for_people");
b.Property<int>("PeopleID")
.HasColumnType("integer")
.HasColumnName("people_id");
@ -533,9 +421,9 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnName("id")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Logo")
.HasColumnType("text")
.HasColumnName("logo");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("LogoExtension")
.HasColumnType("text")
@ -572,14 +460,14 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("timestamp without time zone")
.HasColumnName("end_date");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<int>("SeasonNumber")
.HasColumnType("integer")
.HasColumnName("season_number");
@ -627,22 +515,18 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text[]")
.HasColumnName("aliases");
b.Property<string>("Backdrop")
.HasColumnType("text")
.HasColumnName("backdrop");
b.Property<DateTime?>("EndAir")
.HasColumnType("timestamp without time zone")
.HasColumnName("end_air");
b.Property<Dictionary<int, string>>("Images")
.HasColumnType("jsonb")
.HasColumnName("images");
b.Property<bool>("IsMovie")
.HasColumnType("boolean")
.HasColumnName("is_movie");
b.Property<string>("Logo")
.HasColumnType("text")
.HasColumnName("logo");
b.Property<string>("Overview")
.HasColumnType("text")
.HasColumnName("overview");
@ -651,10 +535,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("path");
b.Property<string>("Poster")
.HasColumnType("text")
.HasColumnName("poster");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("text")
@ -676,10 +556,6 @@ namespace Kyoo.Postgresql.Migrations
.HasColumnType("text")
.HasColumnName("title");
b.Property<string>("TrailerUrl")
.HasColumnType("text")
.HasColumnName("trailer_url");
b.HasKey("ID")
.HasName("pk_shows");
@ -853,6 +729,168 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("watched_episodes");
});
modelBuilder.Entity("collection_metadata_id", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("ResourceID", "ProviderID")
.HasName("pk_episode_metadata_id");
b.HasIndex("ProviderID")
.HasDatabaseName("ix_episode_metadata_id_provider_id");
b.ToTable("episode_metadata_id");
});
modelBuilder.Entity("people_metadata_id", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("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<int>("ResourceID")
.HasColumnType("integer")
.HasColumnName("resource_id");
b.Property<int>("ProviderID")
.HasColumnType("integer")
.HasColumnName("provider_id");
b.Property<string>("DataID")
.HasColumnType("text")
.HasColumnName("data_id");
b.Property<string>("Link")
.HasColumnType("text")
.HasColumnName("link");
b.HasKey("ResourceID", "ProviderID")
.HasName("pk_studio_metadata_id");
b.HasIndex("ProviderID")
.HasDatabaseName("ix_studio_metadata_id_provider_id");
b.ToTable("studio_metadata_id");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@ -999,90 +1037,6 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.HasOne("Kyoo.Models.Episode", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_episode_episodes_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_episode_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.HasOne("Kyoo.Models.People", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_people_people_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_people_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.HasOne("Kyoo.Models.Season", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_season_seasons_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_season_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.HasOne("Kyoo.Models.Show", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.HasConstraintName("fk_metadata_id_show_shows_first_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.HasConstraintName("fk_metadata_id_show_providers_second_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@ -1160,8 +1114,124 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("collection_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_collection_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_collection_metadata_id_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("episode_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_episode_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("people_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_people_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_people_metadata_id_people_people_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("season_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_season_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_season_metadata_id_seasons_season_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("show_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_show_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_show_metadata_id_shows_show_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("studio_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_studio_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_studio_metadata_id_studios_studio_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@ -1226,6 +1296,8 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});

View File

@ -1,6 +1,8 @@
using System;
using System.Globalization;
using System.Linq.Expressions;
using System.Reflection;
using EFCore.NamingConventions.Internal;
using Kyoo.Models;
using Microsoft.EntityFrameworkCore;
using Npgsql;
@ -99,9 +101,38 @@ namespace Kyoo.Postgresql
.Property(x => x.ExtraData)
.HasColumnType("jsonb");
modelBuilder.Entity<LibraryItem>()
.Property(x => x.Images)
.HasColumnType("jsonb");
modelBuilder.Entity<Collection>()
.Property(x => x.Images)
.HasColumnType("jsonb");
modelBuilder.Entity<Show>()
.Property(x => x.Images)
.HasColumnType("jsonb");
modelBuilder.Entity<Season>()
.Property(x => x.Images)
.HasColumnType("jsonb");
modelBuilder.Entity<Episode>()
.Property(x => x.Images)
.HasColumnType("jsonb");
modelBuilder.Entity<People>()
.Property(x => x.Images)
.HasColumnType("jsonb");
modelBuilder.Entity<Provider>()
.Property(x => x.Images)
.HasColumnType("jsonb");
base.OnModelCreating(modelBuilder);
}
/// <inheritdoc />
protected override string MetadataName<T>()
{
SnakeCaseNameRewriter rewriter = new(CultureInfo.InvariantCulture);
return rewriter.RewriteName(typeof(T).Name + nameof(MetadataID));
}
/// <inheritdoc />
protected override bool IsDuplicateException(Exception ex)
{

View File

@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace Kyoo.SqLite.Migrations
{
[DbContext(typeof(SqLiteContext))]
[Migration("20210723224542_Initial")]
[Migration("20210728134952_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -18,21 +18,63 @@ namespace Kyoo.SqLite.Migrations
modelBuilder
.HasAnnotation("ProductVersion", "5.0.8");
modelBuilder.Entity("CollectionMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("CollectionMetadataID");
});
modelBuilder.Entity("EpisodeMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("EpisodeMetadataID");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Poster")
.HasColumnType("TEXT");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("TEXT");
@ -57,6 +99,9 @@ namespace Kyoo.SqLite.Migrations
b.Property<int?>("EpisodeNumber")
.HasColumnType("INTEGER");
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
@ -79,9 +124,6 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("TEXT");
b.Property<string>("Thumb")
.HasColumnType("TEXT");
b.Property<string>("Title")
.HasColumnType("TEXT");
@ -152,10 +194,10 @@ namespace Kyoo.SqLite.Migrations
b.Property<DateTime?>("EndAir")
.HasColumnType("TEXT");
b.Property<string>("Overview")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Slug")
@ -268,100 +310,16 @@ namespace Kyoo.SqLite.Migrations
b.ToTable("Link<User, Show>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Episode>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<People>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Season>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Show>");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Name")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Slug")
@ -382,9 +340,6 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<bool>("ForPeople")
.HasColumnType("INTEGER");
b.Property<int>("PeopleID")
.HasColumnType("INTEGER");
@ -412,7 +367,7 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Logo")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("LogoExtension")
@ -442,10 +397,10 @@ namespace Kyoo.SqLite.Migrations
b.Property<DateTime?>("EndDate")
.HasColumnType("TEXT");
b.Property<string>("Overview")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<int>("SeasonNumber")
@ -484,27 +439,21 @@ namespace Kyoo.SqLite.Migrations
b.Property<string>("Aliases")
.HasColumnType("TEXT");
b.Property<string>("Backdrop")
b.Property<DateTime?>("EndAir")
.HasColumnType("TEXT");
b.Property<DateTime?>("EndAir")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<bool>("IsMovie")
.HasColumnType("INTEGER");
b.Property<string>("Logo")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Path")
.HasColumnType("TEXT");
b.Property<string>("Poster")
.HasColumnType("TEXT");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("TEXT");
@ -521,9 +470,6 @@ namespace Kyoo.SqLite.Migrations
b.Property<string>("Title")
.HasColumnType("TEXT");
b.Property<string>("TrailerUrl")
.HasColumnType("TEXT");
b.HasKey("ID");
b.HasIndex("Slug")
@ -657,6 +603,124 @@ namespace Kyoo.SqLite.Migrations
b.ToTable("WatchedEpisodes");
});
modelBuilder.Entity("PeopleMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("PeopleMetadataID");
});
modelBuilder.Entity("SeasonMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("SeasonMetadataID");
});
modelBuilder.Entity("ShowMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("ShowMetadataID");
});
modelBuilder.Entity("StudioMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("StudioMetadataID");
});
modelBuilder.Entity("CollectionMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("EpisodeMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@ -789,82 +853,6 @@ namespace Kyoo.SqLite.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.HasOne("Kyoo.Models.Episode", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.HasOne("Kyoo.Models.People", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.HasOne("Kyoo.Models.Season", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.HasOne("Kyoo.Models.Show", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@ -935,8 +923,78 @@ namespace Kyoo.SqLite.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("PeopleMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("SeasonMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("ShowMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("StudioMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@ -1001,6 +1059,8 @@ namespace Kyoo.SqLite.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});

View File

@ -15,7 +15,7 @@ namespace Kyoo.SqLite.Migrations
.Annotation("Sqlite:Autoincrement", true),
Slug = table.Column<string>(type: "TEXT", nullable: false),
Name = table.Column<string>(type: "TEXT", nullable: true),
Poster = table.Column<string>(type: "TEXT", nullable: true),
Images = table.Column<string>(type: "TEXT", nullable: true),
Overview = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
@ -60,7 +60,7 @@ namespace Kyoo.SqLite.Migrations
.Annotation("Sqlite:Autoincrement", true),
Slug = table.Column<string>(type: "TEXT", nullable: false),
Name = table.Column<string>(type: "TEXT", nullable: true),
Poster = table.Column<string>(type: "TEXT", nullable: true)
Images = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
@ -75,7 +75,7 @@ namespace Kyoo.SqLite.Migrations
.Annotation("Sqlite:Autoincrement", true),
Slug = table.Column<string>(type: "TEXT", nullable: false),
Name = table.Column<string>(type: "TEXT", nullable: true),
Logo = table.Column<string>(type: "TEXT", nullable: true),
Images = table.Column<string>(type: "TEXT", nullable: true),
LogoExtension = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
@ -139,6 +139,32 @@ namespace Kyoo.SqLite.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "CollectionMetadataID",
columns: table => new
{
ResourceID = table.Column<int>(type: "INTEGER", nullable: false),
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CollectionMetadataID", x => new { x.ResourceID, x.ProviderID });
table.ForeignKey(
name: "FK_CollectionMetadataID_Collections_ResourceID",
column: x => x.ResourceID,
principalTable: "Collections",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_CollectionMetadataID_Providers_ProviderID",
column: x => x.ProviderID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Link<Library, Provider>",
columns: table => new
@ -164,26 +190,26 @@ namespace Kyoo.SqLite.Migrations
});
migrationBuilder.CreateTable(
name: "MetadataID<People>",
name: "PeopleMetadataID",
columns: table => new
{
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
SecondID = table.Column<int>(type: "INTEGER", nullable: false),
ResourceID = table.Column<int>(type: "INTEGER", nullable: false),
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_MetadataID<People>", x => new { x.FirstID, x.SecondID });
table.PrimaryKey("PK_PeopleMetadataID", x => new { x.ResourceID, x.ProviderID });
table.ForeignKey(
name: "FK_MetadataID<People>_People_FirstID",
column: x => x.FirstID,
name: "FK_PeopleMetadataID_People_ResourceID",
column: x => x.ResourceID,
principalTable: "People",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_MetadataID<People>_Providers_SecondID",
column: x => x.SecondID,
name: "FK_PeopleMetadataID_Providers_ProviderID",
column: x => x.ProviderID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
@ -201,12 +227,9 @@ namespace Kyoo.SqLite.Migrations
Path = table.Column<string>(type: "TEXT", nullable: true),
Overview = table.Column<string>(type: "TEXT", nullable: true),
Status = table.Column<int>(type: "INTEGER", nullable: false),
TrailerUrl = table.Column<string>(type: "TEXT", nullable: true),
StartAir = table.Column<DateTime>(type: "TEXT", nullable: true),
EndAir = table.Column<DateTime>(type: "TEXT", nullable: true),
Poster = table.Column<string>(type: "TEXT", nullable: true),
Logo = table.Column<string>(type: "TEXT", nullable: true),
Backdrop = table.Column<string>(type: "TEXT", nullable: true),
Images = table.Column<string>(type: "TEXT", nullable: true),
IsMovie = table.Column<bool>(type: "INTEGER", nullable: false),
StudioID = table.Column<int>(type: "INTEGER", nullable: true)
},
@ -221,6 +244,32 @@ namespace Kyoo.SqLite.Migrations
onDelete: ReferentialAction.SetNull);
});
migrationBuilder.CreateTable(
name: "StudioMetadataID",
columns: table => new
{
ResourceID = table.Column<int>(type: "INTEGER", nullable: false),
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_StudioMetadataID", x => new { x.ResourceID, x.ProviderID });
table.ForeignKey(
name: "FK_StudioMetadataID_Providers_ProviderID",
column: x => x.ProviderID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_StudioMetadataID_Studios_ResourceID",
column: x => x.ResourceID,
principalTable: "Studios",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Link<Collection, Show>",
columns: table => new
@ -317,39 +366,12 @@ namespace Kyoo.SqLite.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "MetadataID<Show>",
columns: table => new
{
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
SecondID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_MetadataID<Show>", x => new { x.FirstID, x.SecondID });
table.ForeignKey(
name: "FK_MetadataID<Show>_Providers_SecondID",
column: x => x.SecondID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_MetadataID<Show>_Shows_FirstID",
column: x => x.FirstID,
principalTable: "Shows",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "PeopleRoles",
columns: table => new
{
ID = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
ForPeople = table.Column<bool>(type: "INTEGER", nullable: false),
PeopleID = table.Column<int>(type: "INTEGER", nullable: false),
ShowID = table.Column<int>(type: "INTEGER", nullable: false),
Type = table.Column<string>(type: "TEXT", nullable: true),
@ -385,7 +407,7 @@ namespace Kyoo.SqLite.Migrations
Overview = table.Column<string>(type: "TEXT", nullable: true),
StartDate = table.Column<DateTime>(type: "TEXT", nullable: true),
EndDate = table.Column<DateTime>(type: "TEXT", nullable: true),
Poster = table.Column<string>(type: "TEXT", nullable: true)
Images = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
@ -398,6 +420,32 @@ namespace Kyoo.SqLite.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "ShowMetadataID",
columns: table => new
{
ResourceID = table.Column<int>(type: "INTEGER", nullable: false),
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ShowMetadataID", x => new { x.ResourceID, x.ProviderID });
table.ForeignKey(
name: "FK_ShowMetadataID_Providers_ProviderID",
column: x => x.ProviderID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ShowMetadataID_Shows_ResourceID",
column: x => x.ResourceID,
principalTable: "Shows",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Episodes",
columns: table => new
@ -411,7 +459,7 @@ namespace Kyoo.SqLite.Migrations
EpisodeNumber = table.Column<int>(type: "INTEGER", nullable: true),
AbsoluteNumber = table.Column<int>(type: "INTEGER", nullable: true),
Path = table.Column<string>(type: "TEXT", nullable: true),
Thumb = table.Column<string>(type: "TEXT", nullable: true),
Images = table.Column<string>(type: "TEXT", nullable: true),
Title = table.Column<string>(type: "TEXT", nullable: true),
Overview = table.Column<string>(type: "TEXT", nullable: true),
ReleaseDate = table.Column<DateTime>(type: "TEXT", nullable: true)
@ -434,52 +482,52 @@ namespace Kyoo.SqLite.Migrations
});
migrationBuilder.CreateTable(
name: "MetadataID<Season>",
name: "SeasonMetadataID",
columns: table => new
{
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
SecondID = table.Column<int>(type: "INTEGER", nullable: false),
ResourceID = table.Column<int>(type: "INTEGER", nullable: false),
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_MetadataID<Season>", x => new { x.FirstID, x.SecondID });
table.PrimaryKey("PK_SeasonMetadataID", x => new { x.ResourceID, x.ProviderID });
table.ForeignKey(
name: "FK_MetadataID<Season>_Providers_SecondID",
column: x => x.SecondID,
name: "FK_SeasonMetadataID_Providers_ProviderID",
column: x => x.ProviderID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_MetadataID<Season>_Seasons_FirstID",
column: x => x.FirstID,
name: "FK_SeasonMetadataID_Seasons_ResourceID",
column: x => x.ResourceID,
principalTable: "Seasons",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "MetadataID<Episode>",
name: "EpisodeMetadataID",
columns: table => new
{
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
SecondID = table.Column<int>(type: "INTEGER", nullable: false),
ResourceID = table.Column<int>(type: "INTEGER", nullable: false),
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
DataID = table.Column<string>(type: "TEXT", nullable: true),
Link = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_MetadataID<Episode>", x => new { x.FirstID, x.SecondID });
table.PrimaryKey("PK_EpisodeMetadataID", x => new { x.ResourceID, x.ProviderID });
table.ForeignKey(
name: "FK_MetadataID<Episode>_Episodes_FirstID",
column: x => x.FirstID,
name: "FK_EpisodeMetadataID_Episodes_ResourceID",
column: x => x.ResourceID,
principalTable: "Episodes",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_MetadataID<Episode>_Providers_SecondID",
column: x => x.SecondID,
name: "FK_EpisodeMetadataID_Providers_ProviderID",
column: x => x.ProviderID,
principalTable: "Providers",
principalColumn: "ID",
onDelete: ReferentialAction.Cascade);
@ -539,12 +587,22 @@ namespace Kyoo.SqLite.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_CollectionMetadataID_ProviderID",
table: "CollectionMetadataID",
column: "ProviderID");
migrationBuilder.CreateIndex(
name: "IX_Collections_Slug",
table: "Collections",
column: "Slug",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_EpisodeMetadataID_ProviderID",
table: "EpisodeMetadataID",
column: "ProviderID");
migrationBuilder.CreateIndex(
name: "IX_Episodes_SeasonID",
table: "Episodes",
@ -604,32 +662,17 @@ namespace Kyoo.SqLite.Migrations
table: "Link<User, Show>",
column: "SecondID");
migrationBuilder.CreateIndex(
name: "IX_MetadataID<Episode>_SecondID",
table: "MetadataID<Episode>",
column: "SecondID");
migrationBuilder.CreateIndex(
name: "IX_MetadataID<People>_SecondID",
table: "MetadataID<People>",
column: "SecondID");
migrationBuilder.CreateIndex(
name: "IX_MetadataID<Season>_SecondID",
table: "MetadataID<Season>",
column: "SecondID");
migrationBuilder.CreateIndex(
name: "IX_MetadataID<Show>_SecondID",
table: "MetadataID<Show>",
column: "SecondID");
migrationBuilder.CreateIndex(
name: "IX_People_Slug",
table: "People",
column: "Slug",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_PeopleMetadataID_ProviderID",
table: "PeopleMetadataID",
column: "ProviderID");
migrationBuilder.CreateIndex(
name: "IX_PeopleRoles_PeopleID",
table: "PeopleRoles",
@ -646,6 +689,11 @@ namespace Kyoo.SqLite.Migrations
column: "Slug",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_SeasonMetadataID_ProviderID",
table: "SeasonMetadataID",
column: "ProviderID");
migrationBuilder.CreateIndex(
name: "IX_Seasons_ShowID_SeasonNumber",
table: "Seasons",
@ -658,6 +706,11 @@ namespace Kyoo.SqLite.Migrations
column: "Slug",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_ShowMetadataID_ProviderID",
table: "ShowMetadataID",
column: "ProviderID");
migrationBuilder.CreateIndex(
name: "IX_Shows_Slug",
table: "Shows",
@ -669,6 +722,11 @@ namespace Kyoo.SqLite.Migrations
table: "Shows",
column: "StudioID");
migrationBuilder.CreateIndex(
name: "IX_StudioMetadataID_ProviderID",
table: "StudioMetadataID",
column: "ProviderID");
migrationBuilder.CreateIndex(
name: "IX_Studios_Slug",
table: "Studios",
@ -701,6 +759,12 @@ namespace Kyoo.SqLite.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "CollectionMetadataID");
migrationBuilder.DropTable(
name: "EpisodeMetadataID");
migrationBuilder.DropTable(
name: "Link<Collection, Show>");
@ -720,20 +784,20 @@ namespace Kyoo.SqLite.Migrations
name: "Link<User, Show>");
migrationBuilder.DropTable(
name: "MetadataID<Episode>");
migrationBuilder.DropTable(
name: "MetadataID<People>");
migrationBuilder.DropTable(
name: "MetadataID<Season>");
migrationBuilder.DropTable(
name: "MetadataID<Show>");
name: "PeopleMetadataID");
migrationBuilder.DropTable(
name: "PeopleRoles");
migrationBuilder.DropTable(
name: "SeasonMetadataID");
migrationBuilder.DropTable(
name: "ShowMetadataID");
migrationBuilder.DropTable(
name: "StudioMetadataID");
migrationBuilder.DropTable(
name: "Tracks");
@ -750,10 +814,10 @@ namespace Kyoo.SqLite.Migrations
name: "Genres");
migrationBuilder.DropTable(
name: "Providers");
name: "People");
migrationBuilder.DropTable(
name: "People");
name: "Providers");
migrationBuilder.DropTable(
name: "Episodes");

View File

@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace Kyoo.SqLite.Migrations
{
[DbContext(typeof(SqLiteContext))]
[Migration("20210723224550_Triggers")]
[Migration("20210728135127_Triggers")]
partial class Triggers
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -18,21 +18,63 @@ namespace Kyoo.SqLite.Migrations
modelBuilder
.HasAnnotation("ProductVersion", "5.0.8");
modelBuilder.Entity("CollectionMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("CollectionMetadataID");
});
modelBuilder.Entity("EpisodeMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("EpisodeMetadataID");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Poster")
.HasColumnType("TEXT");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("TEXT");
@ -57,6 +99,9 @@ namespace Kyoo.SqLite.Migrations
b.Property<int?>("EpisodeNumber")
.HasColumnType("INTEGER");
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
@ -79,9 +124,6 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("TEXT");
b.Property<string>("Thumb")
.HasColumnType("TEXT");
b.Property<string>("Title")
.HasColumnType("TEXT");
@ -152,10 +194,10 @@ namespace Kyoo.SqLite.Migrations
b.Property<DateTime?>("EndAir")
.HasColumnType("TEXT");
b.Property<string>("Overview")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Slug")
@ -268,100 +310,16 @@ namespace Kyoo.SqLite.Migrations
b.ToTable("Link<User, Show>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Episode>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<People>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Season>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Show>");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Name")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Slug")
@ -382,9 +340,6 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<bool>("ForPeople")
.HasColumnType("INTEGER");
b.Property<int>("PeopleID")
.HasColumnType("INTEGER");
@ -412,7 +367,7 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Logo")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("LogoExtension")
@ -442,10 +397,10 @@ namespace Kyoo.SqLite.Migrations
b.Property<DateTime?>("EndDate")
.HasColumnType("TEXT");
b.Property<string>("Overview")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<int>("SeasonNumber")
@ -484,27 +439,21 @@ namespace Kyoo.SqLite.Migrations
b.Property<string>("Aliases")
.HasColumnType("TEXT");
b.Property<string>("Backdrop")
b.Property<DateTime?>("EndAir")
.HasColumnType("TEXT");
b.Property<DateTime?>("EndAir")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<bool>("IsMovie")
.HasColumnType("INTEGER");
b.Property<string>("Logo")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Path")
.HasColumnType("TEXT");
b.Property<string>("Poster")
.HasColumnType("TEXT");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("TEXT");
@ -521,9 +470,6 @@ namespace Kyoo.SqLite.Migrations
b.Property<string>("Title")
.HasColumnType("TEXT");
b.Property<string>("TrailerUrl")
.HasColumnType("TEXT");
b.HasKey("ID");
b.HasIndex("Slug")
@ -657,6 +603,124 @@ namespace Kyoo.SqLite.Migrations
b.ToTable("WatchedEpisodes");
});
modelBuilder.Entity("PeopleMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("PeopleMetadataID");
});
modelBuilder.Entity("SeasonMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("SeasonMetadataID");
});
modelBuilder.Entity("ShowMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("ShowMetadataID");
});
modelBuilder.Entity("StudioMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("StudioMetadataID");
});
modelBuilder.Entity("CollectionMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("EpisodeMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@ -789,82 +853,6 @@ namespace Kyoo.SqLite.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.HasOne("Kyoo.Models.Episode", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.HasOne("Kyoo.Models.People", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.HasOne("Kyoo.Models.Season", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.HasOne("Kyoo.Models.Show", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@ -935,8 +923,78 @@ namespace Kyoo.SqLite.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("PeopleMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("SeasonMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("ShowMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("StudioMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@ -1001,6 +1059,8 @@ namespace Kyoo.SqLite.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});

View File

@ -154,7 +154,7 @@ namespace Kyoo.SqLite.Migrations
// language=SQLite
migrationBuilder.Sql(@"
CREATE VIEW LibraryItems AS
SELECT s.ID, s.Slug, s.Title, s.Overview, s.Status, s.StartAir, s.EndAir, s.Poster, CASE
SELECT s.ID, s.Slug, s.Title, s.Overview, s.Status, s.StartAir, s.EndAir, s.Images, CASE
WHEN s.IsMovie THEN 1
ELSE 0
END AS Type
@ -166,7 +166,7 @@ namespace Kyoo.SqLite.Migrations
WHERE s.ID = l.SecondID))
UNION ALL
SELECT -c0.ID, c0.Slug, c0.Name AS Title, c0.Overview, 3 AS Status,
NULL AS StartAir, NULL AS EndAir, c0.Poster, 2 AS Type
NULL AS StartAir, NULL AS EndAir, c0.Images, 2 AS Type
FROM collections AS c0");
}

View File

@ -16,21 +16,63 @@ namespace Kyoo.SqLite.Migrations
modelBuilder
.HasAnnotation("ProductVersion", "5.0.8");
modelBuilder.Entity("CollectionMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("CollectionMetadataID");
});
modelBuilder.Entity("EpisodeMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("EpisodeMetadataID");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Poster")
.HasColumnType("TEXT");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("TEXT");
@ -55,6 +97,9 @@ namespace Kyoo.SqLite.Migrations
b.Property<int?>("EpisodeNumber")
.HasColumnType("INTEGER");
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
@ -77,9 +122,6 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("TEXT");
b.Property<string>("Thumb")
.HasColumnType("TEXT");
b.Property<string>("Title")
.HasColumnType("TEXT");
@ -150,10 +192,10 @@ namespace Kyoo.SqLite.Migrations
b.Property<DateTime?>("EndAir")
.HasColumnType("TEXT");
b.Property<string>("Overview")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Slug")
@ -266,100 +308,16 @@ namespace Kyoo.SqLite.Migrations
b.ToTable("Link<User, Show>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Episode>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<People>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Season>");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.Property<int>("FirstID")
.HasColumnType("INTEGER");
b.Property<int>("SecondID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("FirstID", "SecondID");
b.HasIndex("SecondID");
b.ToTable("MetadataID<Show>");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Name")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Slug")
@ -380,9 +338,6 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<bool>("ForPeople")
.HasColumnType("INTEGER");
b.Property<int>("PeopleID")
.HasColumnType("INTEGER");
@ -410,7 +365,7 @@ namespace Kyoo.SqLite.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Logo")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("LogoExtension")
@ -440,10 +395,10 @@ namespace Kyoo.SqLite.Migrations
b.Property<DateTime?>("EndDate")
.HasColumnType("TEXT");
b.Property<string>("Overview")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<string>("Poster")
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<int>("SeasonNumber")
@ -482,27 +437,21 @@ namespace Kyoo.SqLite.Migrations
b.Property<string>("Aliases")
.HasColumnType("TEXT");
b.Property<string>("Backdrop")
b.Property<DateTime?>("EndAir")
.HasColumnType("TEXT");
b.Property<DateTime?>("EndAir")
b.Property<string>("Images")
.HasColumnType("TEXT");
b.Property<bool>("IsMovie")
.HasColumnType("INTEGER");
b.Property<string>("Logo")
.HasColumnType("TEXT");
b.Property<string>("Overview")
.HasColumnType("TEXT");
b.Property<string>("Path")
.HasColumnType("TEXT");
b.Property<string>("Poster")
.HasColumnType("TEXT");
b.Property<string>("Slug")
.IsRequired()
.HasColumnType("TEXT");
@ -519,9 +468,6 @@ namespace Kyoo.SqLite.Migrations
b.Property<string>("Title")
.HasColumnType("TEXT");
b.Property<string>("TrailerUrl")
.HasColumnType("TEXT");
b.HasKey("ID");
b.HasIndex("Slug")
@ -655,6 +601,124 @@ namespace Kyoo.SqLite.Migrations
b.ToTable("WatchedEpisodes");
});
modelBuilder.Entity("PeopleMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("PeopleMetadataID");
});
modelBuilder.Entity("SeasonMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("SeasonMetadataID");
});
modelBuilder.Entity("ShowMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("ShowMetadataID");
});
modelBuilder.Entity("StudioMetadataID", b =>
{
b.Property<int>("ResourceID")
.HasColumnType("INTEGER");
b.Property<int>("ProviderID")
.HasColumnType("INTEGER");
b.Property<string>("DataID")
.HasColumnType("TEXT");
b.Property<string>("Link")
.HasColumnType("TEXT");
b.HasKey("ResourceID", "ProviderID");
b.HasIndex("ProviderID");
b.ToTable("StudioMetadataID");
});
modelBuilder.Entity("CollectionMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("EpisodeMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
@ -787,82 +851,6 @@ namespace Kyoo.SqLite.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Episode>", b =>
{
b.HasOne("Kyoo.Models.Episode", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.People>", b =>
{
b.HasOne("Kyoo.Models.People", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Season>", b =>
{
b.HasOne("Kyoo.Models.Season", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.MetadataID<Kyoo.Models.Show>", b =>
{
b.HasOne("Kyoo.Models.Show", "First")
.WithMany("ExternalIDs")
.HasForeignKey("FirstID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", "Second")
.WithMany()
.HasForeignKey("SecondID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("First");
b.Navigation("Second");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
@ -933,8 +921,78 @@ namespace Kyoo.SqLite.Migrations
b.Navigation("Second");
});
modelBuilder.Entity("PeopleMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("SeasonMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("ShowMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("StudioMetadataID", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("LibraryLinks");
b.Navigation("ShowLinks");
@ -999,6 +1057,8 @@ namespace Kyoo.SqLite.Migrations
modelBuilder.Entity("Kyoo.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});

View File

@ -102,12 +102,38 @@ namespace Kyoo.SqLite
.Property(x => x.Type)
.HasConversion<int>();
ValueConverter<Dictionary<string, string>, string> jsonConvertor = new(
ValueConverter<Dictionary<string, string>, string> extraDataConvertor = new(
x => JsonConvert.SerializeObject(x),
x => JsonConvert.DeserializeObject<Dictionary<string, string>>(x));
modelBuilder.Entity<User>()
.Property(x => x.ExtraData)
.HasConversion(extraDataConvertor);
ValueConverter<Dictionary<int, string>, string> jsonConvertor = new(
x => JsonConvert.SerializeObject(x),
x => JsonConvert.DeserializeObject<Dictionary<int, string>>(x));
modelBuilder.Entity<LibraryItem>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<Collection>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<Show>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<Season>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<Episode>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<People>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<Provider>()
.Property(x => x.Images)
.HasConversion(jsonConvertor);
modelBuilder.Entity<LibraryItem>()
.ToView("LibraryItems")
@ -115,6 +141,12 @@ namespace Kyoo.SqLite
base.OnModelCreating(modelBuilder);
}
/// <inheritdoc />
protected override string MetadataName<T>()
{
return typeof(T).Name + nameof(MetadataID);
}
/// <inheritdoc />
protected override bool IsDuplicateException(Exception ex)
{

View File

@ -41,7 +41,7 @@ namespace Kyoo.Tests
Slug = "collection",
Name = "Collection",
Overview = "A nice collection for tests",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster"
}
@ -66,7 +66,7 @@ namespace Kyoo.Tests
Status = Status.Finished,
StartAir = new DateTime(2011, 1, 1),
EndAir = new DateTime(2011, 1, 1),
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "Logo",
@ -88,7 +88,7 @@ namespace Kyoo.Tests
Overview = "The first season",
StartDate = new DateTime(2020, 06, 05),
EndDate = new DateTime(2020, 07, 05),
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "Logo",
@ -108,7 +108,7 @@ namespace Kyoo.Tests
EpisodeNumber = 1,
AbsoluteNumber = 1,
Path = "/home/kyoo/anohana-s1e1",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "Logo",
@ -144,7 +144,7 @@ namespace Kyoo.Tests
ID = 1,
Slug = "the-actor",
Name = "The Actor",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "Logo",
@ -177,7 +177,7 @@ namespace Kyoo.Tests
ID = 1,
Slug = "tvdb",
Name = "The TVDB",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "path/tvdb.svg",
@ -282,7 +282,7 @@ namespace Kyoo.Tests
EpisodeNumber = null,
AbsoluteNumber = 3,
Path = "/home/kyoo/anohana-3",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "Logo",
@ -302,7 +302,7 @@ namespace Kyoo.Tests
ShowSlug = "anohana",
ShowID = 1,
Path = "/home/kyoo/john-wick",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = "Poster",
[Thumbnails.Logo] = "Logo",

View File

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using Kyoo.Models;
using TMDbLib.Objects.General;
@ -29,7 +30,7 @@ namespace Kyoo.TheMovieDb
Status = movie.Status == "Released" ? Status.Finished : Status.Planned,
StartAir = movie.ReleaseDate,
EndAir = movie.ReleaseDate,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = movie.PosterPath != null
? $"https://image.tmdb.org/t/p/original{movie.PosterPath}"
@ -79,7 +80,7 @@ namespace Kyoo.TheMovieDb
Status = tv.Status == "Ended" ? Status.Finished : Status.Planned,
StartAir = tv.FirstAirDate,
EndAir = tv.LastAirDate,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = tv.PosterPath != null
? $"https://image.tmdb.org/t/p/original{tv.PosterPath}"
@ -125,7 +126,7 @@ namespace Kyoo.TheMovieDb
{
Slug = Utility.ToSlug(collection.Name),
Name = collection.Name,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = collection.PosterPath != null
? $"https://image.tmdb.org/t/p/original{collection.PosterPath}"
@ -152,7 +153,7 @@ namespace Kyoo.TheMovieDb
Overview = movie.Overview,
StartAir = movie.ReleaseDate,
EndAir = movie.ReleaseDate,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = movie.PosterPath != null
? $"https://image.tmdb.org/t/p/original{movie.PosterPath}"
@ -188,7 +189,7 @@ namespace Kyoo.TheMovieDb
Title = tv.Name,
Overview = tv.Overview,
StartAir = tv.FirstAirDate,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = tv.PosterPath != null
? $"https://image.tmdb.org/t/p/original{tv.PosterPath}"
@ -224,7 +225,7 @@ namespace Kyoo.TheMovieDb
{
Slug = Utility.ToSlug(cast.Name),
Name = cast.Name,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = cast.ProfilePath != null
? $"https://image.tmdb.org/t/p/original{cast.ProfilePath}"
@ -259,7 +260,7 @@ namespace Kyoo.TheMovieDb
{
Slug = Utility.ToSlug(cast.Name),
Name = cast.Name,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = cast.ProfilePath != null
? $"https://image.tmdb.org/t/p/original{cast.ProfilePath}"
@ -294,7 +295,7 @@ namespace Kyoo.TheMovieDb
{
Slug = Utility.ToSlug(crew.Name),
Name = crew.Name,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = crew.ProfilePath != null
? $"https://image.tmdb.org/t/p/original{crew.ProfilePath}"

View File

@ -29,7 +29,7 @@ namespace Kyoo.TheMovieDb
Slug = "the-moviedb",
Name = "TheMovieDB",
LogoExtension = "svg",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Logo] = "https://www.themoviedb.org/assets/2/v4/logos/v2/" +
"blue_short-8e7b30f73a4020692ccca9c88bafe5dcb6f8a62a4c6bc55cd9ba82bb2cd95f6c.svg"

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Kyoo.Models;
@ -55,7 +56,7 @@ namespace Kyoo.TheTvdb
Overview = result.Overview,
Status = _GetStatus(result.Status),
StartAir = _ParseDate(result.FirstAired),
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = result.Poster != null
? $"https://www.thetvdb.com{result.Poster}"
@ -89,7 +90,7 @@ namespace Kyoo.TheTvdb
Overview = series.Overview,
Status = _GetStatus(series.Status),
StartAir = _ParseDate(series.FirstAired),
Images=
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = series.Poster != null
? $"https://www.thetvdb.com/banners/{series.Poster}"
@ -125,7 +126,7 @@ namespace Kyoo.TheTvdb
{
Slug = Utility.ToSlug(actor.Name),
Name = actor.Name,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Poster] = actor.Image != null
? $"https://www.thetvdb.com/banners/{actor.Image}"
@ -161,7 +162,7 @@ namespace Kyoo.TheTvdb
AbsoluteNumber = episode.AbsoluteNumber,
Title = episode.EpisodeName,
Overview = episode.Overview,
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Thumbnail] = episode.Filename != null
? $"https://www.thetvdb.com/banners/{episode.Filename}"

View File

@ -33,7 +33,7 @@ namespace Kyoo.TheTvdb
Slug = "the-tvdb",
Name = "TheTVDB",
LogoExtension = "png",
Images =
Images = new Dictionary<int, string>
{
[Thumbnails.Logo] = "https://www.thetvdb.com/images/logo.png"
}

View File

@ -53,7 +53,6 @@ namespace Kyoo.Controllers
{
await base.Create(obj);
_database.Entry(obj).State = EntityState.Added;
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
await _database.SaveChangesAsync($"Trying to insert a duplicated collection (slug {obj.Slug} already exists).");
return obj;
}
@ -66,7 +65,6 @@ namespace Kyoo.Controllers
{
x.Provider = await _providers.CreateIfNotExists(x.Provider);
x.ProviderID = x.Provider.ID;
x.ResourceType = nameof(Collection);
_database.Entry(x.Provider).State = EntityState.Detached;
});
}

View File

@ -111,7 +111,6 @@ namespace Kyoo.Controllers
{
await base.Create(obj);
_database.Entry(obj).State = EntityState.Added;
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
await _database.SaveChangesAsync($"Trying to insert a duplicated episode (slug {obj.Slug} already exists).");
return await ValidateTracks(obj);
}
@ -162,7 +161,6 @@ namespace Kyoo.Controllers
{
x.Provider = await _providers.CreateIfNotExists(x.Provider);
x.ProviderID = x.Provider.ID;
x.ResourceType = nameof(Episode);
_database.Entry(x.Provider).State = EntityState.Detached;
});
}

View File

@ -62,7 +62,6 @@ namespace Kyoo.Controllers
{
await base.Create(obj);
_database.Entry(obj).State = EntityState.Added;
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
await _database.SaveChangesAsync($"Trying to insert a duplicated people (slug {obj.Slug} already exists).");
return obj;
}
@ -75,7 +74,6 @@ namespace Kyoo.Controllers
{
id.Provider = await _providers.CreateIfNotExists(id.Provider);
id.ProviderID = id.Provider.ID;
id.ResourceType = nameof(People);
_database.Entry(id.Provider).State = EntityState.Detached;
});
await resource.Roles.ForEachAsync(async role =>

View File

@ -69,11 +69,9 @@ namespace Kyoo.Controllers
where T : class, IMetadata
{
string discriminator = typeof(T).Name;
return ApplyFilters(_database.MetadataIDs
.Include(y => y.Provider)
.Where(x => x.ResourceType == discriminator),
x => _database.MetadataIDs.FirstOrDefaultAsync(y => y.ResourceID == x
&& y.ResourceType == discriminator),
return ApplyFilters(_database.MetadataIds<T>()
.Include(y => y.Provider),
x => _database.MetadataIds<T>().FirstOrDefaultAsync(y => y.ResourceID == x),
x => x.ResourceID,
where,
sort,

View File

@ -87,7 +87,6 @@ namespace Kyoo.Controllers
{
await base.Create(obj);
_database.Entry(obj).State = EntityState.Added;
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
await _database.SaveChangesAsync($"Trying to insert a duplicated season (slug {obj.Slug} already exists).");
return obj;
}
@ -108,7 +107,6 @@ namespace Kyoo.Controllers
{
id.Provider = await _providers.CreateIfNotExists(id.Provider);
id.ProviderID = id.Provider.ID;
id.ResourceType = nameof(Season);
_database.Entry(id.Provider).State = EntityState.Detached;
});
}

View File

@ -78,7 +78,6 @@ namespace Kyoo.Controllers
_database.Entry(obj).State = EntityState.Added;
obj.GenreLinks.ForEach(x => _database.Entry(x).State = EntityState.Added);
obj.People.ForEach(x => _database.Entry(x).State = EntityState.Added);
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
await _database.SaveChangesAsync($"Trying to insert a duplicated show (slug {obj.Slug} already exists).");
return obj;
}
@ -103,7 +102,6 @@ namespace Kyoo.Controllers
{
id.Provider = await _providers.CreateIfNotExists(id.Provider);
id.ProviderID = id.Provider.ID;
id.ResourceType = nameof(Show);
_database.Entry(id.Provider).State = EntityState.Detached;
});
await resource.People.ForEachAsync(async role =>

View File

@ -66,7 +66,6 @@ namespace Kyoo.Controllers
{
x.Provider = await _providers.CreateIfNotExists(x.Provider);
x.ProviderID = x.Provider.ID;
x.ResourceType = nameof(Studio);
_database.Entry(x.Provider).State = EntityState.Detached;
});
}