mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Removing links & DE items. DotnetEf now support Many to Many out of the box
This commit is contained in:
parent
072dd7d9b8
commit
b2b53f2691
@ -71,7 +71,7 @@ namespace Kyoo.Controllers
|
|||||||
|
|
||||||
private IQueryable<LibraryItem> ItemsQuery
|
private IQueryable<LibraryItem> ItemsQuery
|
||||||
=> _database.Shows
|
=> _database.Shows
|
||||||
.Where(x => !_database.CollectionLinks.Any(y => y.ChildID == x.ID))
|
// .Where(x => !_database.CollectionLinks.Any(y => y.ChildID == x.ID))
|
||||||
.Select(LibraryItem.FromShow)
|
.Select(LibraryItem.FromShow)
|
||||||
.Concat(_database.Collections
|
.Concat(_database.Collections
|
||||||
.Select(LibraryItem.FromCollection));
|
.Select(LibraryItem.FromCollection));
|
||||||
@ -114,17 +114,18 @@ namespace Kyoo.Controllers
|
|||||||
public override Task Delete(LibraryItem obj) => throw new InvalidOperationException();
|
public override Task Delete(LibraryItem obj) => throw new InvalidOperationException();
|
||||||
|
|
||||||
private IQueryable<LibraryItem> LibraryRelatedQuery(Expression<Func<LibraryLink, bool>> selector)
|
private IQueryable<LibraryItem> LibraryRelatedQuery(Expression<Func<LibraryLink, bool>> selector)
|
||||||
=> _database.LibraryLinks
|
=> throw new NotImplementedException();
|
||||||
.Where(selector)
|
// => _database.LibraryLinks
|
||||||
.Select(x => x.Show)
|
// .Where(selector)
|
||||||
.Where(x => x != null)
|
// .Select(x => x.Show)
|
||||||
.Where(x => !_database.CollectionLinks.Any(y => y.ChildID == x.ID))
|
// .Where(x => x != null)
|
||||||
.Select(LibraryItem.FromShow)
|
// .Where(x => !_database.CollectionLinks.Any(y => y.ChildID == x.ID))
|
||||||
.Concat(_database.LibraryLinks
|
// .Select(LibraryItem.FromShow)
|
||||||
.Where(selector)
|
// .Concat(_database.LibraryLinks
|
||||||
.Select(x => x.Collection)
|
// .Where(selector)
|
||||||
.Where(x => x != null)
|
// .Select(x => x.Collection)
|
||||||
.Select(LibraryItem.FromCollection));
|
// .Where(x => x != null)
|
||||||
|
// .Select(LibraryItem.FromCollection));
|
||||||
|
|
||||||
public async Task<ICollection<LibraryItem>> GetFromLibrary(int id,
|
public async Task<ICollection<LibraryItem>> GetFromLibrary(int id,
|
||||||
Expression<Func<LibraryItem, bool>> where = null,
|
Expression<Func<LibraryItem, bool>> where = null,
|
||||||
|
@ -134,18 +134,18 @@ namespace Kyoo.Controllers
|
|||||||
{
|
{
|
||||||
if (collectionID != null)
|
if (collectionID != null)
|
||||||
{
|
{
|
||||||
await _database.CollectionLinks.AddAsync(new CollectionLink {ParentID = collectionID.Value, ChildID = showID});
|
// await _database.CollectionLinks.AddAsync(new CollectionLink {ParentID = collectionID.Value, ChildID = showID});
|
||||||
await _database.SaveIfNoDuplicates();
|
await _database.SaveIfNoDuplicates();
|
||||||
}
|
}
|
||||||
if (libraryID != null)
|
if (libraryID != null)
|
||||||
{
|
{
|
||||||
await _database.LibraryLinks.AddAsync(new LibraryLink {LibraryID = libraryID.Value, ShowID = showID});
|
// await _database.LibraryLinks.AddAsync(new LibraryLink {LibraryID = libraryID.Value, ShowID = showID});
|
||||||
await _database.SaveIfNoDuplicates();
|
await _database.SaveIfNoDuplicates();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (libraryID != null && collectionID != null)
|
if (libraryID != null && collectionID != null)
|
||||||
{
|
{
|
||||||
await _database.LibraryLinks.AddAsync(new LibraryLink {LibraryID = libraryID.Value, CollectionID = collectionID.Value});
|
// await _database.LibraryLinks.AddAsync(new LibraryLink {LibraryID = libraryID.Value, CollectionID = collectionID.Value});
|
||||||
await _database.SaveIfNoDuplicates();
|
await _database.SaveIfNoDuplicates();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,13 @@ namespace Kyoo
|
|||||||
{
|
{
|
||||||
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) { }
|
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) { }
|
||||||
|
|
||||||
public DbSet<LibraryDE> Libraries { get; set; }
|
public DbSet<Library> Libraries { get; set; }
|
||||||
public DbSet<CollectionDE> Collections { get; set; }
|
public DbSet<Collection> Collections { get; set; }
|
||||||
public DbSet<ShowDE> Shows { get; set; }
|
public DbSet<Show> Shows { get; set; }
|
||||||
public DbSet<Season> Seasons { get; set; }
|
public DbSet<Season> Seasons { get; set; }
|
||||||
public DbSet<Episode> Episodes { get; set; }
|
public DbSet<Episode> Episodes { get; set; }
|
||||||
public DbSet<Track> Tracks { get; set; }
|
public DbSet<Track> Tracks { get; set; }
|
||||||
public DbSet<GenreDE> Genres { get; set; }
|
public DbSet<Genre> Genres { get; set; }
|
||||||
public DbSet<People> People { get; set; }
|
public DbSet<People> People { get; set; }
|
||||||
public DbSet<Studio> Studios { get; set; }
|
public DbSet<Studio> Studios { get; set; }
|
||||||
public DbSet<ProviderID> Providers { get; set; }
|
public DbSet<ProviderID> Providers { get; set; }
|
||||||
@ -30,11 +30,6 @@ namespace Kyoo
|
|||||||
|
|
||||||
public DbSet<PeopleRole> PeopleRoles { get; set; }
|
public DbSet<PeopleRole> PeopleRoles { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public DbSet<LibraryLink> LibraryLinks { get; set; }
|
|
||||||
public DbSet<CollectionLink> CollectionLinks { get; set; }
|
|
||||||
public DbSet<GenreLink> GenreLinks { get; set; }
|
|
||||||
public DbSet<ProviderLink> ProviderLinks { get; set; }
|
|
||||||
|
|
||||||
public DatabaseContext()
|
public DatabaseContext()
|
||||||
{
|
{
|
||||||
@ -56,11 +51,11 @@ namespace Kyoo
|
|||||||
modelBuilder.Ignore<Show>();
|
modelBuilder.Ignore<Show>();
|
||||||
modelBuilder.Ignore<Genre>();
|
modelBuilder.Ignore<Genre>();
|
||||||
|
|
||||||
modelBuilder.Entity<LibraryDE>()
|
modelBuilder.Entity<Library>()
|
||||||
.Property(x => x.Paths)
|
.Property(x => x.Paths)
|
||||||
.HasColumnType("text[]");
|
.HasColumnType("text[]");
|
||||||
|
|
||||||
modelBuilder.Entity<ShowDE>()
|
modelBuilder.Entity<Show>()
|
||||||
.Property(x => x.Aliases)
|
.Property(x => x.Aliases)
|
||||||
.HasColumnType("text[]");
|
.HasColumnType("text[]");
|
||||||
|
|
||||||
@ -72,88 +67,8 @@ namespace Kyoo
|
|||||||
.Property(t => t.IsForced)
|
.Property(t => t.IsForced)
|
||||||
.ValueGeneratedNever();
|
.ValueGeneratedNever();
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<GenreLink>()
|
|
||||||
.HasKey(x => new {ShowID = x.ParentID, GenreID = x.ChildID});
|
|
||||||
|
|
||||||
modelBuilder.Entity<CollectionLink>()
|
|
||||||
.HasKey(x => new {CollectionID = x.ParentID, ShowID = x.ChildID});
|
|
||||||
|
|
||||||
modelBuilder.Entity<ProviderLink>()
|
|
||||||
.HasKey(x => new {LibraryID = x.ParentID, ProviderID = x.ChildID});
|
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<LibraryDE>()
|
|
||||||
.Ignore(x => x.Shows)
|
|
||||||
.Ignore(x => x.Collections)
|
|
||||||
.Ignore(x => x.Providers);
|
|
||||||
|
|
||||||
modelBuilder.Entity<CollectionDE>()
|
|
||||||
.Ignore(x => x.Shows)
|
|
||||||
.Ignore(x => x.Libraries);
|
|
||||||
|
|
||||||
modelBuilder.Entity<ShowDE>()
|
|
||||||
.Ignore(x => x.Genres)
|
|
||||||
.Ignore(x => x.Libraries)
|
|
||||||
.Ignore(x => x.Collections);
|
|
||||||
|
|
||||||
modelBuilder.Entity<PeopleRole>()
|
|
||||||
.Ignore(x => x.Slug);
|
|
||||||
|
|
||||||
modelBuilder.Entity<GenreDE>()
|
|
||||||
.Ignore(x => x.Shows);
|
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<LibraryLink>()
|
|
||||||
.HasOne(x => x.Library as LibraryDE)
|
|
||||||
.WithMany(x => x.Links)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
modelBuilder.Entity<LibraryLink>()
|
|
||||||
.HasOne(x => x.Show as ShowDE)
|
|
||||||
.WithMany(x => x.LibraryLinks)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
modelBuilder.Entity<LibraryLink>()
|
|
||||||
.HasOne(x => x.Collection as CollectionDE)
|
|
||||||
.WithMany(x => x.LibraryLinks)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
modelBuilder.Entity<CollectionLink>()
|
|
||||||
.HasOne(x => x.Parent as CollectionDE)
|
|
||||||
.WithMany(x => x.Links)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
modelBuilder.Entity<CollectionLink>()
|
|
||||||
.HasOne(x => x.Child as ShowDE)
|
|
||||||
.WithMany(x => x.CollectionLinks)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
modelBuilder.Entity<GenreLink>()
|
|
||||||
.HasOne(x => x.Child as GenreDE)
|
|
||||||
.WithMany(x => x.Links)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
modelBuilder.Entity<GenreLink>()
|
|
||||||
.HasOne(x => x.Parent as ShowDE)
|
|
||||||
.WithMany(x => x.GenreLinks)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
modelBuilder.Entity<ProviderLink>()
|
|
||||||
.HasOne(x => x.Parent as LibraryDE)
|
|
||||||
.WithMany(x => x.ProviderLinks)
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
modelBuilder.Entity<Season>()
|
|
||||||
.HasOne(x => x.Show as ShowDE)
|
|
||||||
.WithMany(x => x.Seasons);
|
|
||||||
modelBuilder.Entity<Episode>()
|
|
||||||
.HasOne(x => x.Show as ShowDE)
|
|
||||||
.WithMany(x => x.Episodes);
|
|
||||||
modelBuilder.Entity<PeopleRole>()
|
|
||||||
.HasOne(x => x.Show as ShowDE)
|
|
||||||
.WithMany(x => x.People);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<MetadataID>()
|
modelBuilder.Entity<MetadataID>()
|
||||||
.HasOne(x => x.Show as ShowDE)
|
.HasOne(x => x.Show)
|
||||||
.WithMany(x => x.ExternalIDs)
|
.WithMany(x => x.ExternalIDs)
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
modelBuilder.Entity<MetadataID>()
|
modelBuilder.Entity<MetadataID>()
|
||||||
@ -169,27 +84,27 @@ namespace Kyoo
|
|||||||
.WithMany(x => x.ExternalIDs)
|
.WithMany(x => x.ExternalIDs)
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
modelBuilder.Entity<CollectionDE>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<Collection>().Property(x => x.Slug).IsRequired();
|
||||||
modelBuilder.Entity<GenreDE>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<Genre>().Property(x => x.Slug).IsRequired();
|
||||||
modelBuilder.Entity<LibraryDE>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<Library>().Property(x => x.Slug).IsRequired();
|
||||||
modelBuilder.Entity<People>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<People>().Property(x => x.Slug).IsRequired();
|
||||||
modelBuilder.Entity<ProviderID>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<ProviderID>().Property(x => x.Slug).IsRequired();
|
||||||
modelBuilder.Entity<ShowDE>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<Show>().Property(x => x.Slug).IsRequired();
|
||||||
modelBuilder.Entity<Studio>().Property(x => x.Slug).IsRequired();
|
modelBuilder.Entity<Studio>().Property(x => x.Slug).IsRequired();
|
||||||
|
|
||||||
modelBuilder.Entity<CollectionDE>()
|
modelBuilder.Entity<Collection>()
|
||||||
.HasIndex(x => x.Slug)
|
.HasIndex(x => x.Slug)
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
modelBuilder.Entity<GenreDE>()
|
modelBuilder.Entity<Genre>()
|
||||||
.HasIndex(x => x.Slug)
|
.HasIndex(x => x.Slug)
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
modelBuilder.Entity<LibraryDE>()
|
modelBuilder.Entity<Library>()
|
||||||
.HasIndex(x => x.Slug)
|
.HasIndex(x => x.Slug)
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
modelBuilder.Entity<People>()
|
modelBuilder.Entity<People>()
|
||||||
.HasIndex(x => x.Slug)
|
.HasIndex(x => x.Slug)
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
modelBuilder.Entity<ShowDE>()
|
modelBuilder.Entity<Show>()
|
||||||
.HasIndex(x => x.Slug)
|
.HasIndex(x => x.Slug)
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
modelBuilder.Entity<Studio>()
|
modelBuilder.Entity<Studio>()
|
||||||
|
@ -10,7 +10,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
namespace Kyoo.Models.DatabaseMigrations.Internal
|
namespace Kyoo.Models.DatabaseMigrations.Internal
|
||||||
{
|
{
|
||||||
[DbContext(typeof(DatabaseContext))]
|
[DbContext(typeof(DatabaseContext))]
|
||||||
[Migration("20210228224046_Initial")]
|
[Migration("20210228232014_Initial")]
|
||||||
partial class Initial
|
partial class Initial
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
@ -24,7 +24,52 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.HasAnnotation("ProductVersion", "5.0.3")
|
.HasAnnotation("ProductVersion", "5.0.3")
|
||||||
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
|
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionDE", b =>
|
modelBuilder.Entity("CollectionLibrary", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CollectionsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("LibrariesID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("CollectionsID", "LibrariesID");
|
||||||
|
|
||||||
|
b.HasIndex("LibrariesID");
|
||||||
|
|
||||||
|
b.ToTable("CollectionLibrary");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("CollectionShow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CollectionsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("ShowsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("CollectionsID", "ShowsID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowsID");
|
||||||
|
|
||||||
|
b.ToTable("CollectionShow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GenreShow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GenresID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("ShowsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("GenresID", "ShowsID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowsID");
|
||||||
|
|
||||||
|
b.ToTable("GenreShow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Collection", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -52,21 +97,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Collections");
|
b.ToTable("Collections");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionLink", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ParentID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("ChildID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("ParentID", "ChildID");
|
|
||||||
|
|
||||||
b.HasIndex("ChildID");
|
|
||||||
|
|
||||||
b.ToTable("CollectionLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
@ -117,7 +147,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Episodes");
|
b.ToTable("Episodes");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Genre", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -139,22 +169,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Genres");
|
b.ToTable("Genres");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreLink", b =>
|
modelBuilder.Entity("Kyoo.Models.Library", b =>
|
||||||
{
|
|
||||||
b.Property<int>("ParentID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("ChildID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("ParentID", "ChildID");
|
|
||||||
|
|
||||||
b.HasIndex("ChildID");
|
|
||||||
|
|
||||||
b.ToTable("GenreLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.LibraryDE", b =>
|
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -207,7 +222,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.HasIndex("LibraryID", "ShowID")
|
b.HasIndex("LibraryID", "ShowID")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("LibraryLinks");
|
b.ToTable("LibraryLink");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
||||||
@ -331,21 +346,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Providers");
|
b.ToTable("Providers");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ParentID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("ChildID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("ParentID", "ChildID");
|
|
||||||
|
|
||||||
b.HasIndex("ChildID");
|
|
||||||
|
|
||||||
b.ToTable("ProviderLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
@ -379,7 +379,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Seasons");
|
b.ToTable("Seasons");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ShowDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -502,23 +502,79 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Tracks");
|
b.ToTable("Tracks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionLink", b =>
|
modelBuilder.Entity("LibraryProviderID", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Child")
|
b.Property<int>("LibrariesID")
|
||||||
.WithMany("CollectionLinks")
|
.HasColumnType("integer");
|
||||||
.HasForeignKey("ChildID")
|
|
||||||
|
b.Property<int>("ProvidersID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("LibrariesID", "ProvidersID");
|
||||||
|
|
||||||
|
b.HasIndex("ProvidersID");
|
||||||
|
|
||||||
|
b.ToTable("LibraryProviderID");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LibraryShow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("LibrariesID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("ShowsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("LibrariesID", "ShowsID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowsID");
|
||||||
|
|
||||||
|
b.ToTable("LibraryShow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("CollectionLibrary", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Collection", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CollectionsID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.CollectionDE", "Parent")
|
b.HasOne("Kyoo.Models.Library", null)
|
||||||
.WithMany("Links")
|
.WithMany()
|
||||||
.HasForeignKey("ParentID")
|
.HasForeignKey("LibrariesID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("CollectionShow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Collection", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CollectionsID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.Navigation("Child");
|
b.HasOne("Kyoo.Models.Show", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ShowsID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
b.Navigation("Parent");
|
modelBuilder.Entity("GenreShow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Genre", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("GenresID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ShowsID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
@ -527,7 +583,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.WithMany("Episodes")
|
.WithMany("Episodes")
|
||||||
.HasForeignKey("SeasonID");
|
.HasForeignKey("SeasonID");
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("Episodes")
|
.WithMany("Episodes")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
@ -538,42 +594,21 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Show");
|
b.Navigation("Show");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreLink", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("Kyoo.Models.GenreDE", "Child")
|
|
||||||
.WithMany("Links")
|
|
||||||
.HasForeignKey("ChildID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Parent")
|
|
||||||
.WithMany("GenreLinks")
|
|
||||||
.HasForeignKey("ParentID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("Child");
|
|
||||||
|
|
||||||
b.Navigation("Parent");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.LibraryLink", b =>
|
modelBuilder.Entity("Kyoo.Models.LibraryLink", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.CollectionDE", "Collection")
|
b.HasOne("Kyoo.Models.Collection", "Collection")
|
||||||
.WithMany("LibraryLinks")
|
.WithMany()
|
||||||
.HasForeignKey("CollectionID")
|
.HasForeignKey("CollectionID");
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.LibraryDE", "Library")
|
b.HasOne("Kyoo.Models.Library", "Library")
|
||||||
.WithMany("Links")
|
.WithMany()
|
||||||
.HasForeignKey("LibraryID")
|
.HasForeignKey("LibraryID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("LibraryLinks")
|
.WithMany()
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID");
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.Navigation("Collection");
|
b.Navigation("Collection");
|
||||||
|
|
||||||
@ -605,7 +640,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.HasForeignKey("SeasonID")
|
.HasForeignKey("SeasonID")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("ExternalIDs")
|
.WithMany("ExternalIDs")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
@ -629,7 +664,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("People")
|
.WithMany("People")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
@ -640,28 +675,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Show");
|
b.Navigation("Show");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("Kyoo.Models.ProviderID", "Child")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ChildID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.LibraryDE", "Parent")
|
|
||||||
.WithMany("ProviderLinks")
|
|
||||||
.HasForeignKey("ParentID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("Child");
|
|
||||||
|
|
||||||
b.Navigation("Parent");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("Seasons")
|
.WithMany("Seasons")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
@ -670,10 +686,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Show");
|
b.Navigation("Show");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ShowDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.Studio", "Studio")
|
b.HasOne("Kyoo.Models.Studio", "Studio")
|
||||||
.WithMany()
|
.WithMany("Shows")
|
||||||
.HasForeignKey("StudioID");
|
.HasForeignKey("StudioID");
|
||||||
|
|
||||||
b.Navigation("Studio");
|
b.Navigation("Studio");
|
||||||
@ -690,11 +706,34 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Episode");
|
b.Navigation("Episode");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionDE", b =>
|
modelBuilder.Entity("LibraryProviderID", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("LibraryLinks");
|
b.HasOne("Kyoo.Models.Library", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("LibrariesID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.Navigation("Links");
|
b.HasOne("Kyoo.Models.ProviderID", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ProvidersID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LibraryShow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("LibrariesID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ShowsID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
@ -704,18 +743,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Tracks");
|
b.Navigation("Tracks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreDE", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Links");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.LibraryDE", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Links");
|
|
||||||
|
|
||||||
b.Navigation("ProviderLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.People", b =>
|
modelBuilder.Entity("Kyoo.Models.People", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("ExternalIDs");
|
b.Navigation("ExternalIDs");
|
||||||
@ -730,22 +757,21 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("ExternalIDs");
|
b.Navigation("ExternalIDs");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ShowDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("CollectionLinks");
|
|
||||||
|
|
||||||
b.Navigation("Episodes");
|
b.Navigation("Episodes");
|
||||||
|
|
||||||
b.Navigation("ExternalIDs");
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
b.Navigation("GenreLinks");
|
|
||||||
|
|
||||||
b.Navigation("LibraryLinks");
|
|
||||||
|
|
||||||
b.Navigation("People");
|
b.Navigation("People");
|
||||||
|
|
||||||
b.Navigation("Seasons");
|
b.Navigation("Seasons");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Studio", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Shows");
|
||||||
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -103,24 +103,48 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "ProviderLinks",
|
name: "CollectionLibrary",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
ParentID = table.Column<int>(type: "integer", nullable: false),
|
CollectionsID = table.Column<int>(type: "integer", nullable: false),
|
||||||
ChildID = table.Column<int>(type: "integer", nullable: false)
|
LibrariesID = table.Column<int>(type: "integer", nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_ProviderLinks", x => new { x.ParentID, x.ChildID });
|
table.PrimaryKey("PK_CollectionLibrary", x => new { x.CollectionsID, x.LibrariesID });
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_ProviderLinks_Libraries_ParentID",
|
name: "FK_CollectionLibrary_Collections_CollectionsID",
|
||||||
column: x => x.ParentID,
|
column: x => x.CollectionsID,
|
||||||
|
principalTable: "Collections",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_CollectionLibrary_Libraries_LibrariesID",
|
||||||
|
column: x => x.LibrariesID,
|
||||||
|
principalTable: "Libraries",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "LibraryProviderID",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
LibrariesID = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
ProvidersID = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_LibraryProviderID", x => new { x.LibrariesID, x.ProvidersID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_LibraryProviderID_Libraries_LibrariesID",
|
||||||
|
column: x => x.LibrariesID,
|
||||||
principalTable: "Libraries",
|
principalTable: "Libraries",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_ProviderLinks_Providers_ChildID",
|
name: "FK_LibraryProviderID_Providers_ProvidersID",
|
||||||
column: x => x.ChildID,
|
column: x => x.ProvidersID,
|
||||||
principalTable: "Providers",
|
principalTable: "Providers",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
@ -159,55 +183,55 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "CollectionLinks",
|
name: "CollectionShow",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
ParentID = table.Column<int>(type: "integer", nullable: false),
|
CollectionsID = table.Column<int>(type: "integer", nullable: false),
|
||||||
ChildID = table.Column<int>(type: "integer", nullable: false)
|
ShowsID = table.Column<int>(type: "integer", nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_CollectionLinks", x => new { x.ParentID, x.ChildID });
|
table.PrimaryKey("PK_CollectionShow", x => new { x.CollectionsID, x.ShowsID });
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_CollectionLinks_Collections_ParentID",
|
name: "FK_CollectionShow_Collections_CollectionsID",
|
||||||
column: x => x.ParentID,
|
column: x => x.CollectionsID,
|
||||||
principalTable: "Collections",
|
principalTable: "Collections",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_CollectionLinks_Shows_ChildID",
|
name: "FK_CollectionShow_Shows_ShowsID",
|
||||||
column: x => x.ChildID,
|
column: x => x.ShowsID,
|
||||||
principalTable: "Shows",
|
principalTable: "Shows",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "GenreLinks",
|
name: "GenreShow",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
ParentID = table.Column<int>(type: "integer", nullable: false),
|
GenresID = table.Column<int>(type: "integer", nullable: false),
|
||||||
ChildID = table.Column<int>(type: "integer", nullable: false)
|
ShowsID = table.Column<int>(type: "integer", nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_GenreLinks", x => new { x.ParentID, x.ChildID });
|
table.PrimaryKey("PK_GenreShow", x => new { x.GenresID, x.ShowsID });
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_GenreLinks_Genres_ChildID",
|
name: "FK_GenreShow_Genres_GenresID",
|
||||||
column: x => x.ChildID,
|
column: x => x.GenresID,
|
||||||
principalTable: "Genres",
|
principalTable: "Genres",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_GenreLinks_Shows_ParentID",
|
name: "FK_GenreShow_Shows_ShowsID",
|
||||||
column: x => x.ParentID,
|
column: x => x.ShowsID,
|
||||||
principalTable: "Shows",
|
principalTable: "Shows",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "LibraryLinks",
|
name: "LibraryLink",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
ID = table.Column<int>(type: "integer", nullable: false)
|
ID = table.Column<int>(type: "integer", nullable: false)
|
||||||
@ -218,24 +242,48 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_LibraryLinks", x => x.ID);
|
table.PrimaryKey("PK_LibraryLink", x => x.ID);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_LibraryLinks_Collections_CollectionID",
|
name: "FK_LibraryLink_Collections_CollectionID",
|
||||||
column: x => x.CollectionID,
|
column: x => x.CollectionID,
|
||||||
principalTable: "Collections",
|
principalTable: "Collections",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Restrict);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_LibraryLinks_Libraries_LibraryID",
|
name: "FK_LibraryLink_Libraries_LibraryID",
|
||||||
column: x => x.LibraryID,
|
column: x => x.LibraryID,
|
||||||
principalTable: "Libraries",
|
principalTable: "Libraries",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_LibraryLinks_Shows_ShowID",
|
name: "FK_LibraryLink_Shows_ShowID",
|
||||||
column: x => x.ShowID,
|
column: x => x.ShowID,
|
||||||
principalTable: "Shows",
|
principalTable: "Shows",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Restrict);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "LibraryShow",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
LibrariesID = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
ShowsID = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_LibraryShow", x => new { x.LibrariesID, x.ShowsID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_LibraryShow_Libraries_LibrariesID",
|
||||||
|
column: x => x.LibrariesID,
|
||||||
|
principalTable: "Libraries",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_LibraryShow_Shows_ShowsID",
|
||||||
|
column: x => x.ShowsID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -403,9 +451,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_CollectionLinks_ChildID",
|
name: "IX_CollectionLibrary_LibrariesID",
|
||||||
table: "CollectionLinks",
|
table: "CollectionLibrary",
|
||||||
column: "ChildID");
|
column: "LibrariesID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Collections_Slug",
|
name: "IX_Collections_Slug",
|
||||||
@ -413,6 +461,11 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
column: "Slug",
|
column: "Slug",
|
||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_CollectionShow_ShowsID",
|
||||||
|
table: "CollectionShow",
|
||||||
|
column: "ShowsID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Episodes_SeasonID",
|
name: "IX_Episodes_SeasonID",
|
||||||
table: "Episodes",
|
table: "Episodes",
|
||||||
@ -424,17 +477,17 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
columns: new[] { "ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber" },
|
columns: new[] { "ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber" },
|
||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_GenreLinks_ChildID",
|
|
||||||
table: "GenreLinks",
|
|
||||||
column: "ChildID");
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Genres_Slug",
|
name: "IX_Genres_Slug",
|
||||||
table: "Genres",
|
table: "Genres",
|
||||||
column: "Slug",
|
column: "Slug",
|
||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_GenreShow_ShowsID",
|
||||||
|
table: "GenreShow",
|
||||||
|
column: "ShowsID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Libraries_Slug",
|
name: "IX_Libraries_Slug",
|
||||||
table: "Libraries",
|
table: "Libraries",
|
||||||
@ -442,27 +495,37 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_LibraryLinks_CollectionID",
|
name: "IX_LibraryLink_CollectionID",
|
||||||
table: "LibraryLinks",
|
table: "LibraryLink",
|
||||||
column: "CollectionID");
|
column: "CollectionID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_LibraryLinks_LibraryID_CollectionID",
|
name: "IX_LibraryLink_LibraryID_CollectionID",
|
||||||
table: "LibraryLinks",
|
table: "LibraryLink",
|
||||||
columns: new[] { "LibraryID", "CollectionID" },
|
columns: new[] { "LibraryID", "CollectionID" },
|
||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_LibraryLinks_LibraryID_ShowID",
|
name: "IX_LibraryLink_LibraryID_ShowID",
|
||||||
table: "LibraryLinks",
|
table: "LibraryLink",
|
||||||
columns: new[] { "LibraryID", "ShowID" },
|
columns: new[] { "LibraryID", "ShowID" },
|
||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_LibraryLinks_ShowID",
|
name: "IX_LibraryLink_ShowID",
|
||||||
table: "LibraryLinks",
|
table: "LibraryLink",
|
||||||
column: "ShowID");
|
column: "ShowID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_LibraryProviderID_ProvidersID",
|
||||||
|
table: "LibraryProviderID",
|
||||||
|
column: "ProvidersID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_LibraryShow_ShowsID",
|
||||||
|
table: "LibraryShow",
|
||||||
|
column: "ShowsID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_MetadataIds_EpisodeID",
|
name: "IX_MetadataIds_EpisodeID",
|
||||||
table: "MetadataIds",
|
table: "MetadataIds",
|
||||||
@ -504,11 +567,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
table: "PeopleRoles",
|
table: "PeopleRoles",
|
||||||
column: "ShowID");
|
column: "ShowID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_ProviderLinks_ChildID",
|
|
||||||
table: "ProviderLinks",
|
|
||||||
column: "ChildID");
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Providers_Slug",
|
name: "IX_Providers_Slug",
|
||||||
table: "Providers",
|
table: "Providers",
|
||||||
@ -547,13 +605,22 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "CollectionLinks");
|
name: "CollectionLibrary");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "GenreLinks");
|
name: "CollectionShow");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "LibraryLinks");
|
name: "GenreShow");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "LibraryLink");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "LibraryProviderID");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "LibraryShow");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "MetadataIds");
|
name: "MetadataIds");
|
||||||
@ -561,9 +628,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "PeopleRoles");
|
name: "PeopleRoles");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "ProviderLinks");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Tracks");
|
name: "Tracks");
|
||||||
|
|
||||||
@ -573,15 +637,15 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Collections");
|
name: "Collections");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "People");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Libraries");
|
name: "Libraries");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Providers");
|
name: "Providers");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "People");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Episodes");
|
name: "Episodes");
|
||||||
|
|
@ -22,7 +22,52 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.HasAnnotation("ProductVersion", "5.0.3")
|
.HasAnnotation("ProductVersion", "5.0.3")
|
||||||
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
|
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionDE", b =>
|
modelBuilder.Entity("CollectionLibrary", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CollectionsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("LibrariesID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("CollectionsID", "LibrariesID");
|
||||||
|
|
||||||
|
b.HasIndex("LibrariesID");
|
||||||
|
|
||||||
|
b.ToTable("CollectionLibrary");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("CollectionShow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CollectionsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("ShowsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("CollectionsID", "ShowsID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowsID");
|
||||||
|
|
||||||
|
b.ToTable("CollectionShow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GenreShow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GenresID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("ShowsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("GenresID", "ShowsID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowsID");
|
||||||
|
|
||||||
|
b.ToTable("GenreShow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Collection", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -50,21 +95,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Collections");
|
b.ToTable("Collections");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionLink", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ParentID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("ChildID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("ParentID", "ChildID");
|
|
||||||
|
|
||||||
b.HasIndex("ChildID");
|
|
||||||
|
|
||||||
b.ToTable("CollectionLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
@ -115,7 +145,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Episodes");
|
b.ToTable("Episodes");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Genre", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -137,22 +167,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Genres");
|
b.ToTable("Genres");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreLink", b =>
|
modelBuilder.Entity("Kyoo.Models.Library", b =>
|
||||||
{
|
|
||||||
b.Property<int>("ParentID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("ChildID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("ParentID", "ChildID");
|
|
||||||
|
|
||||||
b.HasIndex("ChildID");
|
|
||||||
|
|
||||||
b.ToTable("GenreLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.LibraryDE", b =>
|
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -205,7 +220,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.HasIndex("LibraryID", "ShowID")
|
b.HasIndex("LibraryID", "ShowID")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("LibraryLinks");
|
b.ToTable("LibraryLink");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
||||||
@ -329,21 +344,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Providers");
|
b.ToTable("Providers");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ParentID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("ChildID")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("ParentID", "ChildID");
|
|
||||||
|
|
||||||
b.HasIndex("ChildID");
|
|
||||||
|
|
||||||
b.ToTable("ProviderLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
@ -377,7 +377,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Seasons");
|
b.ToTable("Seasons");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ShowDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("ID")
|
b.Property<int>("ID")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
@ -500,23 +500,79 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.ToTable("Tracks");
|
b.ToTable("Tracks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionLink", b =>
|
modelBuilder.Entity("LibraryProviderID", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Child")
|
b.Property<int>("LibrariesID")
|
||||||
.WithMany("CollectionLinks")
|
.HasColumnType("integer");
|
||||||
.HasForeignKey("ChildID")
|
|
||||||
|
b.Property<int>("ProvidersID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("LibrariesID", "ProvidersID");
|
||||||
|
|
||||||
|
b.HasIndex("ProvidersID");
|
||||||
|
|
||||||
|
b.ToTable("LibraryProviderID");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LibraryShow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("LibrariesID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("ShowsID")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("LibrariesID", "ShowsID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowsID");
|
||||||
|
|
||||||
|
b.ToTable("LibraryShow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("CollectionLibrary", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Collection", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CollectionsID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.CollectionDE", "Parent")
|
b.HasOne("Kyoo.Models.Library", null)
|
||||||
.WithMany("Links")
|
.WithMany()
|
||||||
.HasForeignKey("ParentID")
|
.HasForeignKey("LibrariesID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("CollectionShow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Collection", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CollectionsID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.Navigation("Child");
|
b.HasOne("Kyoo.Models.Show", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ShowsID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
b.Navigation("Parent");
|
modelBuilder.Entity("GenreShow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Genre", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("GenresID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ShowsID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
@ -525,7 +581,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.WithMany("Episodes")
|
.WithMany("Episodes")
|
||||||
.HasForeignKey("SeasonID");
|
.HasForeignKey("SeasonID");
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("Episodes")
|
.WithMany("Episodes")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
@ -536,42 +592,21 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Show");
|
b.Navigation("Show");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreLink", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("Kyoo.Models.GenreDE", "Child")
|
|
||||||
.WithMany("Links")
|
|
||||||
.HasForeignKey("ChildID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Parent")
|
|
||||||
.WithMany("GenreLinks")
|
|
||||||
.HasForeignKey("ParentID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("Child");
|
|
||||||
|
|
||||||
b.Navigation("Parent");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.LibraryLink", b =>
|
modelBuilder.Entity("Kyoo.Models.LibraryLink", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.CollectionDE", "Collection")
|
b.HasOne("Kyoo.Models.Collection", "Collection")
|
||||||
.WithMany("LibraryLinks")
|
.WithMany()
|
||||||
.HasForeignKey("CollectionID")
|
.HasForeignKey("CollectionID");
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.LibraryDE", "Library")
|
b.HasOne("Kyoo.Models.Library", "Library")
|
||||||
.WithMany("Links")
|
.WithMany()
|
||||||
.HasForeignKey("LibraryID")
|
.HasForeignKey("LibraryID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("LibraryLinks")
|
.WithMany()
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID");
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.Navigation("Collection");
|
b.Navigation("Collection");
|
||||||
|
|
||||||
@ -603,7 +638,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.HasForeignKey("SeasonID")
|
.HasForeignKey("SeasonID")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("ExternalIDs")
|
.WithMany("ExternalIDs")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
@ -627,7 +662,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("People")
|
.WithMany("People")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
@ -638,28 +673,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Show");
|
b.Navigation("Show");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("Kyoo.Models.ProviderID", "Child")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ChildID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("Kyoo.Models.LibraryDE", "Parent")
|
|
||||||
.WithMany("ProviderLinks")
|
|
||||||
.HasForeignKey("ParentID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("Child");
|
|
||||||
|
|
||||||
b.Navigation("Parent");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.ShowDE", "Show")
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
.WithMany("Seasons")
|
.WithMany("Seasons")
|
||||||
.HasForeignKey("ShowID")
|
.HasForeignKey("ShowID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
@ -668,10 +684,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Show");
|
b.Navigation("Show");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ShowDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Kyoo.Models.Studio", "Studio")
|
b.HasOne("Kyoo.Models.Studio", "Studio")
|
||||||
.WithMany()
|
.WithMany("Shows")
|
||||||
.HasForeignKey("StudioID");
|
.HasForeignKey("StudioID");
|
||||||
|
|
||||||
b.Navigation("Studio");
|
b.Navigation("Studio");
|
||||||
@ -688,11 +704,34 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Episode");
|
b.Navigation("Episode");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.CollectionDE", b =>
|
modelBuilder.Entity("LibraryProviderID", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("LibraryLinks");
|
b.HasOne("Kyoo.Models.Library", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("LibrariesID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.Navigation("Links");
|
b.HasOne("Kyoo.Models.ProviderID", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ProvidersID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LibraryShow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("LibrariesID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ShowsID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
@ -702,18 +741,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("Tracks");
|
b.Navigation("Tracks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.GenreDE", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Links");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.LibraryDE", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Links");
|
|
||||||
|
|
||||||
b.Navigation("ProviderLinks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.People", b =>
|
modelBuilder.Entity("Kyoo.Models.People", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("ExternalIDs");
|
b.Navigation("ExternalIDs");
|
||||||
@ -728,22 +755,21 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
|
|||||||
b.Navigation("ExternalIDs");
|
b.Navigation("ExternalIDs");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Kyoo.Models.ShowDE", b =>
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("CollectionLinks");
|
|
||||||
|
|
||||||
b.Navigation("Episodes");
|
b.Navigation("Episodes");
|
||||||
|
|
||||||
b.Navigation("ExternalIDs");
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
b.Navigation("GenreLinks");
|
|
||||||
|
|
||||||
b.Navigation("LibraryLinks");
|
|
||||||
|
|
||||||
b.Navigation("People");
|
b.Navigation("People");
|
||||||
|
|
||||||
b.Navigation("Seasons");
|
b.Navigation("Seasons");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Studio", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Shows");
|
||||||
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ namespace Kyoo.Tasks
|
|||||||
new PluginLoader(),
|
new PluginLoader(),
|
||||||
new Crawler(),
|
new Crawler(),
|
||||||
new MetadataProviderLoader(),
|
new MetadataProviderLoader(),
|
||||||
new ReScan(),
|
// new ReScan(),
|
||||||
new ExtractMetadata()
|
new ExtractMetadata()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,127 +1,127 @@
|
|||||||
using System;
|
// using System;
|
||||||
using System.Collections.Generic;
|
// using System.Collections.Generic;
|
||||||
using System.Linq;
|
// using System.Linq;
|
||||||
using System.Threading;
|
// using System.Threading;
|
||||||
using System.Threading.Tasks;
|
// using System.Threading.Tasks;
|
||||||
using Kyoo.Controllers;
|
// using Kyoo.Controllers;
|
||||||
using Kyoo.Models;
|
// using Kyoo.Models;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
// using Microsoft.Extensions.DependencyInjection;
|
||||||
|
//
|
||||||
namespace Kyoo.Tasks
|
// namespace Kyoo.Tasks
|
||||||
{
|
// {
|
||||||
public class ReScan: ITask
|
// public class ReScan: ITask
|
||||||
{
|
// {
|
||||||
public string Slug => "re-scan";
|
// public string Slug => "re-scan";
|
||||||
public string Name => "ReScan";
|
// public string Name => "ReScan";
|
||||||
public string Description => "Re download metadata of an item using it's external ids.";
|
// public string Description => "Re download metadata of an item using it's external ids.";
|
||||||
public string HelpMessage => null;
|
// public string HelpMessage => null;
|
||||||
public bool RunOnStartup => false;
|
// public bool RunOnStartup => false;
|
||||||
public int Priority => 0;
|
// public int Priority => 0;
|
||||||
|
//
|
||||||
|
//
|
||||||
private IServiceProvider _serviceProvider;
|
// private IServiceProvider _serviceProvider;
|
||||||
private IThumbnailsManager _thumbnailsManager;
|
// private IThumbnailsManager _thumbnailsManager;
|
||||||
private IProviderManager _providerManager;
|
// private IProviderManager _providerManager;
|
||||||
private DatabaseContext _database;
|
// private DatabaseContext _database;
|
||||||
|
//
|
||||||
public async Task Run(IServiceProvider serviceProvider, CancellationToken cancellationToken, string arguments = null)
|
// public async Task Run(IServiceProvider serviceProvider, CancellationToken cancellationToken, string arguments = null)
|
||||||
{
|
// {
|
||||||
using IServiceScope serviceScope = serviceProvider.CreateScope();
|
// using IServiceScope serviceScope = serviceProvider.CreateScope();
|
||||||
_serviceProvider = serviceProvider;
|
// _serviceProvider = serviceProvider;
|
||||||
_thumbnailsManager = serviceProvider.GetService<IThumbnailsManager>();
|
// _thumbnailsManager = serviceProvider.GetService<IThumbnailsManager>();
|
||||||
_providerManager = serviceProvider.GetService<IProviderManager>();
|
// _providerManager = serviceProvider.GetService<IProviderManager>();
|
||||||
_database = serviceScope.ServiceProvider.GetService<DatabaseContext>();
|
// _database = serviceScope.ServiceProvider.GetService<DatabaseContext>();
|
||||||
|
//
|
||||||
if (arguments == null || !arguments.Contains('/'))
|
// if (arguments == null || !arguments.Contains('/'))
|
||||||
return;
|
// return;
|
||||||
|
//
|
||||||
string slug = arguments.Substring(arguments.IndexOf('/') + 1);
|
// string slug = arguments.Substring(arguments.IndexOf('/') + 1);
|
||||||
switch (arguments.Substring(0, arguments.IndexOf('/')))
|
// switch (arguments.Substring(0, arguments.IndexOf('/')))
|
||||||
{
|
// {
|
||||||
case "show":
|
// case "show":
|
||||||
await ReScanShow(slug);
|
// await ReScanShow(slug);
|
||||||
break;
|
// break;
|
||||||
case "season":
|
// case "season":
|
||||||
await ReScanSeason(slug);
|
// await ReScanSeason(slug);
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private async Task ReScanShow(string slug)
|
// private async Task ReScanShow(string slug)
|
||||||
{
|
// {
|
||||||
Show old;
|
// Show old;
|
||||||
|
//
|
||||||
using (IServiceScope serviceScope = _serviceProvider.CreateScope())
|
// using (IServiceScope serviceScope = _serviceProvider.CreateScope())
|
||||||
{
|
// {
|
||||||
ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
// ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||||
old = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
// old = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
||||||
if (old == null)
|
// if (old == null)
|
||||||
return;
|
// return;
|
||||||
Library library = _database.LibraryLinks.First(x => x.Show == old && x.Library != null).Library;
|
// Library library = _database.LibraryLinks.First(x => x.Show == old && x.Library != null).Library;
|
||||||
Show edited = await _providerManager.CompleteShow(old, library);
|
// Show edited = await _providerManager.CompleteShow(old, library);
|
||||||
edited.ID = old.ID;
|
// edited.ID = old.ID;
|
||||||
edited.Slug = old.Slug;
|
// edited.Slug = old.Slug;
|
||||||
edited.Path = old.Path;
|
// edited.Path = old.Path;
|
||||||
await libraryManager.EditShow(edited, true);
|
// await libraryManager.EditShow(edited, true);
|
||||||
await _thumbnailsManager.Validate(edited, true);
|
// await _thumbnailsManager.Validate(edited, true);
|
||||||
}
|
// }
|
||||||
if (old.Seasons != null)
|
// if (old.Seasons != null)
|
||||||
await Task.WhenAll(old.Seasons.Select(x => ReScanSeason(old, x)));
|
// await Task.WhenAll(old.Seasons.Select(x => ReScanSeason(old, x)));
|
||||||
IEnumerable<Episode> orphans = old.Episodes.Where(x => x.Season == null).ToList();
|
// IEnumerable<Episode> orphans = old.Episodes.Where(x => x.Season == null).ToList();
|
||||||
if (orphans.Any())
|
// if (orphans.Any())
|
||||||
await Task.WhenAll(orphans.Select(x => ReScanEpisode(old, x)));
|
// await Task.WhenAll(orphans.Select(x => ReScanEpisode(old, x)));
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private async Task ReScanSeason(string seasonSlug)
|
// private async Task ReScanSeason(string seasonSlug)
|
||||||
{
|
// {
|
||||||
string[] infos = seasonSlug.Split('-');
|
// string[] infos = seasonSlug.Split('-');
|
||||||
if (infos.Length != 2 || int.TryParse(infos[1], out int seasonNumber))
|
// if (infos.Length != 2 || int.TryParse(infos[1], out int seasonNumber))
|
||||||
return;
|
// return;
|
||||||
string slug = infos[0];
|
// string slug = infos[0];
|
||||||
Show show = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
// Show show = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
||||||
if (show == null)
|
// if (show == null)
|
||||||
return;
|
// return;
|
||||||
Season old = _database.Seasons.FirstOrDefault(x => x.SeasonNumber == seasonNumber && x.Show.ID == show.ID);
|
// Season old = _database.Seasons.FirstOrDefault(x => x.SeasonNumber == seasonNumber && x.Show.ID == show.ID);
|
||||||
if (old == null)
|
// if (old == null)
|
||||||
return;
|
// return;
|
||||||
await ReScanSeason(show, old);
|
// await ReScanSeason(show, old);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private async Task ReScanSeason(Show show, Season old)
|
// private async Task ReScanSeason(Show show, Season old)
|
||||||
{
|
// {
|
||||||
using (IServiceScope serviceScope = _serviceProvider.CreateScope())
|
// using (IServiceScope serviceScope = _serviceProvider.CreateScope())
|
||||||
{
|
// {
|
||||||
ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
// ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||||
Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
// Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
||||||
Season edited = await _providerManager.GetSeason(show, old.SeasonNumber, library);
|
// Season edited = await _providerManager.GetSeason(show, old.SeasonNumber, library);
|
||||||
edited.ID = old.ID;
|
// edited.ID = old.ID;
|
||||||
await libraryManager.EditSeason(edited, true);
|
// await libraryManager.EditSeason(edited, true);
|
||||||
await _thumbnailsManager.Validate(edited, true);
|
// await _thumbnailsManager.Validate(edited, true);
|
||||||
}
|
// }
|
||||||
if (old.Episodes != null)
|
// if (old.Episodes != null)
|
||||||
await Task.WhenAll(old.Episodes.Select(x => ReScanEpisode(show, x)));
|
// await Task.WhenAll(old.Episodes.Select(x => ReScanEpisode(show, x)));
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private async Task ReScanEpisode(Show show, Episode old)
|
// private async Task ReScanEpisode(Show show, Episode old)
|
||||||
{
|
// {
|
||||||
using IServiceScope serviceScope = _serviceProvider.CreateScope();
|
// using IServiceScope serviceScope = _serviceProvider.CreateScope();
|
||||||
ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
// ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||||
|
//
|
||||||
Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
// Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
||||||
Episode edited = await _providerManager.GetEpisode(show, old.Path, old.SeasonNumber, old.EpisodeNumber, old.AbsoluteNumber, library);
|
// Episode edited = await _providerManager.GetEpisode(show, old.Path, old.SeasonNumber, old.EpisodeNumber, old.AbsoluteNumber, library);
|
||||||
edited.ID = old.ID;
|
// edited.ID = old.ID;
|
||||||
await libraryManager.EditEpisode(edited, true);
|
// await libraryManager.EditEpisode(edited, true);
|
||||||
await _thumbnailsManager.Validate(edited, true);
|
// await _thumbnailsManager.Validate(edited, true);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public Task<IEnumerable<string>> GetPossibleParameters()
|
// public Task<IEnumerable<string>> GetPossibleParameters()
|
||||||
{
|
// {
|
||||||
return Task.FromResult<IEnumerable<string>>(null);
|
// return Task.FromResult<IEnumerable<string>>(null);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public int? Progress()
|
// public int? Progress()
|
||||||
{
|
// {
|
||||||
return null;
|
// return null;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
Loading…
x
Reference in New Issue
Block a user