mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Adding an sqlite plugin
This commit is contained in:
parent
7a52065196
commit
19e64e8d72
@ -1,5 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
|
||||||
|
41
Kyoo.SqLite/Kyoo.SqLite.csproj
Normal file
41
Kyoo.SqLite/Kyoo.SqLite.csproj
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
|
||||||
|
<Company>SDG</Company>
|
||||||
|
<Authors>Zoe Roux</Authors>
|
||||||
|
<RepositoryUrl>https://github.com/AnonymusRaccoon/Kyoo</RepositoryUrl>
|
||||||
|
<LangVersion>default</LangVersion>
|
||||||
|
<RootNamespace>Kyoo.SQLite</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputPath>../Kyoo/bin/$(Configuration)/$(TargetFramework)/plugins/sqlite</OutputPath>
|
||||||
|
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||||
|
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
|
||||||
|
<GenerateDependencyFile>false</GenerateDependencyFile>
|
||||||
|
<GenerateRuntimeConfigurationFiles>false</GenerateRuntimeConfigurationFiles>
|
||||||
|
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.5">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.6" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="../Kyoo.CommonAPI/Kyoo.CommonAPI.csproj">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<Private>false</Private>
|
||||||
|
<ExcludeAssets>runtime</ExcludeAssets>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="../Kyoo.Common/Kyoo.Common.csproj">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<Private>false</Private>
|
||||||
|
<ExcludeAssets>runtime</ExcludeAssets>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
878
Kyoo.SqLite/Migrations/20210529124408_Initial.Designer.cs
generated
Normal file
878
Kyoo.SqLite/Migrations/20210529124408_Initial.Designer.cs
generated
Normal file
@ -0,0 +1,878 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Kyoo.SqLite;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
namespace Kyoo.SQLite.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(SqLiteContext))]
|
||||||
|
[Migration("20210529124408_Initial")]
|
||||||
|
partial class Initial
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "5.0.6");
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Collection", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Collections");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("AbsoluteNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("EpisodeNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Overview")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Path")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("ReleaseDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Runtime")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("SeasonID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SeasonNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Thumb")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("SeasonID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Episodes");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Genre", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Genres");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Library", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Paths")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Libraries");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Collection, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Collection, Show>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Collection>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Library, Collection>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Provider>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Library, Provider>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Library, Show>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Show, Kyoo.Models.Genre>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Show, Genre>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.User, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<User, Show>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("DataID")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("EpisodeID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Link")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("PeopleID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ProviderID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("SeasonID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("EpisodeID");
|
||||||
|
|
||||||
|
b.HasIndex("PeopleID");
|
||||||
|
|
||||||
|
b.HasIndex("ProviderID");
|
||||||
|
|
||||||
|
b.HasIndex("SeasonID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID");
|
||||||
|
|
||||||
|
b.ToTable("MetadataIds");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.People", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Poster")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("People");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("PeopleID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Role")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Type")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("PeopleID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID");
|
||||||
|
|
||||||
|
b.ToTable("PeopleRoles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Provider", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Logo")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LogoExtension")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Providers");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Overview")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Poster")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("SeasonNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("Year")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID", "SeasonNumber")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Seasons");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Aliases")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Backdrop")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("EndYear")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
b.Property<int?>("StartYear")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("Status")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("StudioID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("TrailerUrl")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.HasIndex("StudioID");
|
||||||
|
|
||||||
|
b.ToTable("Shows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Studio", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Studios");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Track", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Codec")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("EpisodeID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDefault")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("IsExternal")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("IsForced")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Language")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Path")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("TrackIndex")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("Type")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Tracks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.User", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("ExtraData")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Password")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Permissions")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Username")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Users");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("WatchedPercentage")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("WatchedEpisodes");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Season", "Season")
|
||||||
|
.WithMany("Episodes")
|
||||||
|
.HasForeignKey("SeasonID");
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("Episodes")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Season");
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Collection, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Collection", "First")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Second")
|
||||||
|
.WithMany("CollectionLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Collection>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", "First")
|
||||||
|
.WithMany("CollectionLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Collection", "Second")
|
||||||
|
.WithMany("LibraryLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Provider>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", "First")
|
||||||
|
.WithMany("ProviderLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Provider", "Second")
|
||||||
|
.WithMany("LibraryLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", "First")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Second")
|
||||||
|
.WithMany("LibraryLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Show, Kyoo.Models.Genre>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Show", "First")
|
||||||
|
.WithMany("GenreLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Genre", "Second")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.User, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.User", "First")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Second")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Episode", "Episode")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("EpisodeID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.People", "People")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("PeopleID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Provider", "Provider")
|
||||||
|
.WithMany("MetadataLinks")
|
||||||
|
.HasForeignKey("ProviderID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Season", "Season")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("SeasonID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.Navigation("Episode");
|
||||||
|
|
||||||
|
b.Navigation("People");
|
||||||
|
|
||||||
|
b.Navigation("Provider");
|
||||||
|
|
||||||
|
b.Navigation("Season");
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.People", "People")
|
||||||
|
.WithMany("Roles")
|
||||||
|
.HasForeignKey("PeopleID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("People")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("People");
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("Seasons")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Studio", "Studio")
|
||||||
|
.WithMany("Shows")
|
||||||
|
.HasForeignKey("StudioID");
|
||||||
|
|
||||||
|
b.Navigation("Studio");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Track", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Episode", "Episode")
|
||||||
|
.WithMany("Tracks")
|
||||||
|
.HasForeignKey("EpisodeID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Episode");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.User", "First")
|
||||||
|
.WithMany("CurrentlyWatching")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Episode", "Second")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Collection", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("LibraryLinks");
|
||||||
|
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
|
b.Navigation("Tracks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Genre", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Library", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CollectionLinks");
|
||||||
|
|
||||||
|
b.Navigation("ProviderLinks");
|
||||||
|
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.People", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
|
b.Navigation("Roles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Provider", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("LibraryLinks");
|
||||||
|
|
||||||
|
b.Navigation("MetadataLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Episodes");
|
||||||
|
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CollectionLinks");
|
||||||
|
|
||||||
|
b.Navigation("Episodes");
|
||||||
|
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
|
b.Navigation("GenreLinks");
|
||||||
|
|
||||||
|
b.Navigation("LibraryLinks");
|
||||||
|
|
||||||
|
b.Navigation("People");
|
||||||
|
|
||||||
|
b.Navigation("Seasons");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Studio", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Shows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.User", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CurrentlyWatching");
|
||||||
|
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
693
Kyoo.SqLite/Migrations/20210529124408_Initial.cs
Normal file
693
Kyoo.SqLite/Migrations/20210529124408_Initial.cs
Normal file
@ -0,0 +1,693 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace Kyoo.SQLite.Migrations
|
||||||
|
{
|
||||||
|
public partial class Initial : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Collections",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.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),
|
||||||
|
Overview = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Collections", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Genres",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
Slug = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Name = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Genres", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Libraries",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
Slug = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Name = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Paths = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Libraries", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "People",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.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)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_People", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Providers",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.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),
|
||||||
|
LogoExtension = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Providers", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Studios",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
Slug = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Name = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Studios", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Users",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
Slug = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Username = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Email = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Password = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Permissions = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
ExtraData = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Users", x => x.ID);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Link<Library, Collection>",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Link<Library, Collection>", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Library, Collection>_Collections_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Collections",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Library, Collection>_Libraries_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Libraries",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Link<Library, Provider>",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Link<Library, Provider>", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Library, Provider>_Libraries_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Libraries",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Library, Provider>_Providers_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Providers",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Shows",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
Slug = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Title = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Aliases = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Path = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Overview = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Status = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
TrailerUrl = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
StartYear = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
EndYear = table.Column<int>(type: "INTEGER", 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),
|
||||||
|
IsMovie = table.Column<bool>(type: "INTEGER", nullable: false),
|
||||||
|
StudioID = table.Column<int>(type: "INTEGER", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Shows", x => x.ID);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Shows_Studios_StudioID",
|
||||||
|
column: x => x.StudioID,
|
||||||
|
principalTable: "Studios",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Restrict);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Link<Collection, Show>",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Link<Collection, Show>", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Collection, Show>_Collections_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Collections",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Collection, Show>_Shows_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Link<Library, Show>",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Link<Library, Show>", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Library, Show>_Libraries_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Libraries",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Library, Show>_Shows_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Link<Show, Genre>",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Link<Show, Genre>", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Show, Genre>_Genres_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Genres",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<Show, Genre>_Shows_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Link<User, Show>",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Link<User, Show>", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<User, Show>_Shows_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Link<User, Show>_Users_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Users",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "PeopleRoles",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
PeopleID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
ShowID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
Role = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Type = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_PeopleRoles", x => x.ID);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_PeopleRoles_People_PeopleID",
|
||||||
|
column: x => x.PeopleID,
|
||||||
|
principalTable: "People",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_PeopleRoles_Shows_ShowID",
|
||||||
|
column: x => x.ShowID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Seasons",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
ShowID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SeasonNumber = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
Title = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Overview = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Year = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
Poster = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Seasons", x => x.ID);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Seasons_Shows_ShowID",
|
||||||
|
column: x => x.ShowID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Episodes",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
ShowID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SeasonID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
SeasonNumber = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
EpisodeNumber = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
AbsoluteNumber = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
Path = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Thumb = 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),
|
||||||
|
Runtime = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Episodes", x => x.ID);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Episodes_Seasons_SeasonID",
|
||||||
|
column: x => x.SeasonID,
|
||||||
|
principalTable: "Seasons",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Restrict);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Episodes_Shows_ShowID",
|
||||||
|
column: x => x.ShowID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "MetadataIds",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
ProviderID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
ShowID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
EpisodeID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
SeasonID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
PeopleID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||||
|
DataID = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Link = table.Column<string>(type: "TEXT", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_MetadataIds", x => x.ID);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_MetadataIds_Episodes_EpisodeID",
|
||||||
|
column: x => x.EpisodeID,
|
||||||
|
principalTable: "Episodes",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_MetadataIds_People_PeopleID",
|
||||||
|
column: x => x.PeopleID,
|
||||||
|
principalTable: "People",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_MetadataIds_Providers_ProviderID",
|
||||||
|
column: x => x.ProviderID,
|
||||||
|
principalTable: "Providers",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_MetadataIds_Seasons_SeasonID",
|
||||||
|
column: x => x.SeasonID,
|
||||||
|
principalTable: "Seasons",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_MetadataIds_Shows_ShowID",
|
||||||
|
column: x => x.ShowID,
|
||||||
|
principalTable: "Shows",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Tracks",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
EpisodeID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
TrackIndex = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
IsDefault = table.Column<bool>(type: "INTEGER", nullable: false),
|
||||||
|
IsForced = table.Column<bool>(type: "INTEGER", nullable: false),
|
||||||
|
IsExternal = table.Column<bool>(type: "INTEGER", nullable: false),
|
||||||
|
Title = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Language = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Codec = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Path = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Type = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Tracks", x => x.ID);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Tracks_Episodes_EpisodeID",
|
||||||
|
column: x => x.EpisodeID,
|
||||||
|
principalTable: "Episodes",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "WatchedEpisodes",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
FirstID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
SecondID = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
WatchedPercentage = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_WatchedEpisodes", x => new { x.FirstID, x.SecondID });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_WatchedEpisodes_Episodes_SecondID",
|
||||||
|
column: x => x.SecondID,
|
||||||
|
principalTable: "Episodes",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_WatchedEpisodes_Users_FirstID",
|
||||||
|
column: x => x.FirstID,
|
||||||
|
principalTable: "Users",
|
||||||
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Collections_Slug",
|
||||||
|
table: "Collections",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Episodes_SeasonID",
|
||||||
|
table: "Episodes",
|
||||||
|
column: "SeasonID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Episodes_ShowID_SeasonNumber_EpisodeNumber_AbsoluteNumber",
|
||||||
|
table: "Episodes",
|
||||||
|
columns: new[] { "ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber" },
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Genres_Slug",
|
||||||
|
table: "Genres",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Libraries_Slug",
|
||||||
|
table: "Libraries",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Link<Collection, Show>_SecondID",
|
||||||
|
table: "Link<Collection, Show>",
|
||||||
|
column: "SecondID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Link<Library, Collection>_SecondID",
|
||||||
|
table: "Link<Library, Collection>",
|
||||||
|
column: "SecondID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Link<Library, Provider>_SecondID",
|
||||||
|
table: "Link<Library, Provider>",
|
||||||
|
column: "SecondID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Link<Library, Show>_SecondID",
|
||||||
|
table: "Link<Library, Show>",
|
||||||
|
column: "SecondID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Link<Show, Genre>_SecondID",
|
||||||
|
table: "Link<Show, Genre>",
|
||||||
|
column: "SecondID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Link<User, Show>_SecondID",
|
||||||
|
table: "Link<User, Show>",
|
||||||
|
column: "SecondID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_MetadataIds_EpisodeID",
|
||||||
|
table: "MetadataIds",
|
||||||
|
column: "EpisodeID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_MetadataIds_PeopleID",
|
||||||
|
table: "MetadataIds",
|
||||||
|
column: "PeopleID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_MetadataIds_ProviderID",
|
||||||
|
table: "MetadataIds",
|
||||||
|
column: "ProviderID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_MetadataIds_SeasonID",
|
||||||
|
table: "MetadataIds",
|
||||||
|
column: "SeasonID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_MetadataIds_ShowID",
|
||||||
|
table: "MetadataIds",
|
||||||
|
column: "ShowID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_People_Slug",
|
||||||
|
table: "People",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_PeopleRoles_PeopleID",
|
||||||
|
table: "PeopleRoles",
|
||||||
|
column: "PeopleID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_PeopleRoles_ShowID",
|
||||||
|
table: "PeopleRoles",
|
||||||
|
column: "ShowID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Providers_Slug",
|
||||||
|
table: "Providers",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Seasons_ShowID_SeasonNumber",
|
||||||
|
table: "Seasons",
|
||||||
|
columns: new[] { "ShowID", "SeasonNumber" },
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Shows_Slug",
|
||||||
|
table: "Shows",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Shows_StudioID",
|
||||||
|
table: "Shows",
|
||||||
|
column: "StudioID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Studios_Slug",
|
||||||
|
table: "Studios",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Tracks_EpisodeID_Type_Language_TrackIndex_IsForced",
|
||||||
|
table: "Tracks",
|
||||||
|
columns: new[] { "EpisodeID", "Type", "Language", "TrackIndex", "IsForced" },
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Users_Slug",
|
||||||
|
table: "Users",
|
||||||
|
column: "Slug",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_WatchedEpisodes_SecondID",
|
||||||
|
table: "WatchedEpisodes",
|
||||||
|
column: "SecondID");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Link<Collection, Show>");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Link<Library, Collection>");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Link<Library, Provider>");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Link<Library, Show>");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Link<Show, Genre>");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Link<User, Show>");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "MetadataIds");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "PeopleRoles");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Tracks");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "WatchedEpisodes");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Collections");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Libraries");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Genres");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Providers");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "People");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Episodes");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Users");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Seasons");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Shows");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Studios");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
876
Kyoo.SqLite/Migrations/SqLiteContextModelSnapshot.cs
Normal file
876
Kyoo.SqLite/Migrations/SqLiteContextModelSnapshot.cs
Normal file
@ -0,0 +1,876 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Kyoo.SqLite;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
namespace Kyoo.SQLite.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(SqLiteContext))]
|
||||||
|
partial class SqLiteContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "5.0.6");
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Collection", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Collections");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("AbsoluteNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("EpisodeNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Overview")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Path")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("ReleaseDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Runtime")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("SeasonID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SeasonNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Thumb")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("SeasonID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID", "SeasonNumber", "EpisodeNumber", "AbsoluteNumber")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Episodes");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Genre", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Genres");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Library", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Paths")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Libraries");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Collection, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Collection, Show>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Collection>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Library, Collection>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Provider>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Library, Provider>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Library, Show>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Show, Kyoo.Models.Genre>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<Show, Genre>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.User, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("Link<User, Show>");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("DataID")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("EpisodeID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Link")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("PeopleID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ProviderID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("SeasonID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("EpisodeID");
|
||||||
|
|
||||||
|
b.HasIndex("PeopleID");
|
||||||
|
|
||||||
|
b.HasIndex("ProviderID");
|
||||||
|
|
||||||
|
b.HasIndex("SeasonID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID");
|
||||||
|
|
||||||
|
b.ToTable("MetadataIds");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.People", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Poster")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("People");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("PeopleID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Role")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Type")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("PeopleID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID");
|
||||||
|
|
||||||
|
b.ToTable("PeopleRoles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Provider", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Logo")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LogoExtension")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Providers");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Overview")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Poster")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("SeasonNumber")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ShowID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("Year")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("ShowID", "SeasonNumber")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Seasons");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Aliases")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Backdrop")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("EndYear")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
b.Property<int?>("StartYear")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("Status")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int?>("StudioID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("TrailerUrl")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.HasIndex("StudioID");
|
||||||
|
|
||||||
|
b.ToTable("Shows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Studio", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Studios");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Track", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Codec")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("EpisodeID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDefault")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("IsExternal")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("IsForced")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Language")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Path")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("TrackIndex")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("Type")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("EpisodeID", "Type", "Language", "TrackIndex", "IsForced")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Tracks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.User", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ID")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("ExtraData")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Password")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Permissions")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Slug")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Username")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ID");
|
||||||
|
|
||||||
|
b.HasIndex("Slug")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Users");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("FirstID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("SecondID")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("WatchedPercentage")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("FirstID", "SecondID");
|
||||||
|
|
||||||
|
b.HasIndex("SecondID");
|
||||||
|
|
||||||
|
b.ToTable("WatchedEpisodes");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Season", "Season")
|
||||||
|
.WithMany("Episodes")
|
||||||
|
.HasForeignKey("SeasonID");
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("Episodes")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Season");
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Collection, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Collection", "First")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Second")
|
||||||
|
.WithMany("CollectionLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Collection>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", "First")
|
||||||
|
.WithMany("CollectionLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Collection", "Second")
|
||||||
|
.WithMany("LibraryLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Provider>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", "First")
|
||||||
|
.WithMany("ProviderLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Provider", "Second")
|
||||||
|
.WithMany("LibraryLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Library, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Library", "First")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Second")
|
||||||
|
.WithMany("LibraryLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.Show, Kyoo.Models.Genre>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Show", "First")
|
||||||
|
.WithMany("GenreLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Genre", "Second")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Link<Kyoo.Models.User, Kyoo.Models.Show>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.User", "First")
|
||||||
|
.WithMany("ShowLinks")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Second")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Episode", "Episode")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("EpisodeID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.People", "People")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("PeopleID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Provider", "Provider")
|
||||||
|
.WithMany("MetadataLinks")
|
||||||
|
.HasForeignKey("ProviderID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Season", "Season")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("SeasonID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("ExternalIDs")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.Navigation("Episode");
|
||||||
|
|
||||||
|
b.Navigation("People");
|
||||||
|
|
||||||
|
b.Navigation("Provider");
|
||||||
|
|
||||||
|
b.Navigation("Season");
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.People", "People")
|
||||||
|
.WithMany("Roles")
|
||||||
|
.HasForeignKey("PeopleID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("People")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("People");
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Show", "Show")
|
||||||
|
.WithMany("Seasons")
|
||||||
|
.HasForeignKey("ShowID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Show");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Studio", "Studio")
|
||||||
|
.WithMany("Shows")
|
||||||
|
.HasForeignKey("StudioID");
|
||||||
|
|
||||||
|
b.Navigation("Studio");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Track", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.Episode", "Episode")
|
||||||
|
.WithMany("Tracks")
|
||||||
|
.HasForeignKey("EpisodeID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Episode");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Kyoo.Models.User", "First")
|
||||||
|
.WithMany("CurrentlyWatching")
|
||||||
|
.HasForeignKey("FirstID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Kyoo.Models.Episode", "Second")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("SecondID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("First");
|
||||||
|
|
||||||
|
b.Navigation("Second");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Collection", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("LibraryLinks");
|
||||||
|
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Episode", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
|
b.Navigation("Tracks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Genre", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Library", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CollectionLinks");
|
||||||
|
|
||||||
|
b.Navigation("ProviderLinks");
|
||||||
|
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.People", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
|
b.Navigation("Roles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Provider", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("LibraryLinks");
|
||||||
|
|
||||||
|
b.Navigation("MetadataLinks");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Season", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Episodes");
|
||||||
|
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Show", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CollectionLinks");
|
||||||
|
|
||||||
|
b.Navigation("Episodes");
|
||||||
|
|
||||||
|
b.Navigation("ExternalIDs");
|
||||||
|
|
||||||
|
b.Navigation("GenreLinks");
|
||||||
|
|
||||||
|
b.Navigation("LibraryLinks");
|
||||||
|
|
||||||
|
b.Navigation("People");
|
||||||
|
|
||||||
|
b.Navigation("Seasons");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.Studio", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Shows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Kyoo.Models.User", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CurrentlyWatching");
|
||||||
|
|
||||||
|
b.Navigation("ShowLinks");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
134
Kyoo.SqLite/SqLiteContext.cs
Normal file
134
Kyoo.SqLite/SqLiteContext.cs
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Reflection;
|
||||||
|
using Kyoo.Models;
|
||||||
|
using Microsoft.Data.Sqlite;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Kyoo.SqLite
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A sqlite implementation of <see cref="DatabaseContext"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class SqLiteContext : DatabaseContext
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The connection string to use.
|
||||||
|
/// </summary>
|
||||||
|
private readonly string _connection;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Is this instance in debug mode?
|
||||||
|
/// </summary>
|
||||||
|
private readonly bool _debugMode;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Should the configure step be skipped? This is used when the database is created via DbContextOptions.
|
||||||
|
/// </summary>
|
||||||
|
private readonly bool _skipConfigure;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A basic constructor that set default values (query tracker behaviors, mapping enums...)
|
||||||
|
/// </summary>
|
||||||
|
public SqLiteContext()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new <see cref="SqLiteContext"/> using specific options
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">The options to use.</param>
|
||||||
|
public SqLiteContext(DbContextOptions options)
|
||||||
|
: base(options)
|
||||||
|
{
|
||||||
|
_skipConfigure = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A basic constructor that set default values (query tracker behaviors, mapping enums...)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="connection">The connection string to use</param>
|
||||||
|
/// <param name="debugMode">Is this instance in debug mode?</param>
|
||||||
|
public SqLiteContext(string connection, bool debugMode)
|
||||||
|
{
|
||||||
|
_connection = connection;
|
||||||
|
_debugMode = debugMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set connection information for this database context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="optionsBuilder">An option builder to fill.</param>
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
|
if (!_skipConfigure)
|
||||||
|
{
|
||||||
|
if (_connection != null)
|
||||||
|
optionsBuilder.UseSqlite(_connection);
|
||||||
|
else
|
||||||
|
optionsBuilder.UseSqlite();
|
||||||
|
if (_debugMode)
|
||||||
|
optionsBuilder.EnableDetailedErrors().EnableSensitiveDataLogging();
|
||||||
|
}
|
||||||
|
|
||||||
|
base.OnConfiguring(optionsBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set database parameters to support every types of Kyoo.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modelBuilder">The database's model builder.</param>
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
// modelBuilder.HasPostgresEnum<Status>();
|
||||||
|
// modelBuilder.HasPostgresEnum<ItemType>();
|
||||||
|
// modelBuilder.HasPostgresEnum<StreamType>();
|
||||||
|
|
||||||
|
ValueConverter<string[], string> arrayConvertor = new(
|
||||||
|
x => string.Join(";", x),
|
||||||
|
x => x.Split(';', StringSplitOptions.None));
|
||||||
|
modelBuilder.Entity<Library>()
|
||||||
|
.Property(x => x.Paths)
|
||||||
|
.HasConversion(arrayConvertor);
|
||||||
|
modelBuilder.Entity<Show>()
|
||||||
|
.Property(x => x.Aliases)
|
||||||
|
.HasConversion(arrayConvertor);
|
||||||
|
modelBuilder.Entity<User>()
|
||||||
|
.Property(x => x.Permissions)
|
||||||
|
.HasConversion(arrayConvertor);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Show>()
|
||||||
|
.Property(x => x.Status)
|
||||||
|
.HasConversion<int>();
|
||||||
|
modelBuilder.Entity<Track>()
|
||||||
|
.Property(x => x.Type)
|
||||||
|
.HasConversion<int>();
|
||||||
|
|
||||||
|
ValueConverter<Dictionary<string, string>, string> jsonConvertor = new(
|
||||||
|
x => JsonConvert.SerializeObject(x),
|
||||||
|
x => JsonConvert.DeserializeObject<Dictionary<string, string>>(x));
|
||||||
|
modelBuilder.Entity<User>()
|
||||||
|
.Property(x => x.ExtraData)
|
||||||
|
.HasConversion(jsonConvertor);
|
||||||
|
|
||||||
|
base.OnModelCreating(modelBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override bool IsDuplicateException(Exception ex)
|
||||||
|
{
|
||||||
|
return ex.InnerException is SqliteException { SqliteExtendedErrorCode: 2067 /*SQLITE_CONSTRAINT_UNIQUE*/};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override Expression<Func<T, bool>> Like<T>(Expression<Func<T, string>> query, string format)
|
||||||
|
{
|
||||||
|
MethodInfo iLike = MethodOfUtils.MethodOf<string, string, bool>(EF.Functions.Like);
|
||||||
|
MethodCallExpression call = Expression.Call(iLike, query.Body, Expression.Constant(format));
|
||||||
|
|
||||||
|
return Expression.Lambda<Func<T, bool>>(call, query.Parameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
72
Kyoo.SqLite/SqLiteModule.cs
Normal file
72
Kyoo.SqLite/SqLiteModule.cs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Kyoo.Controllers;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
|
|
||||||
|
namespace Kyoo.SqLite
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A module to add sqlite capacity to the app.
|
||||||
|
/// </summary>
|
||||||
|
public class SqLiteModule : IPlugin
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public string Slug => "sqlite";
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public string Name => "SqLite";
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public string Description => "A database context for sqlite.";
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public ICollection<Type> Provides => new[]
|
||||||
|
{
|
||||||
|
typeof(DatabaseContext)
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public ICollection<ConditionalProvide> ConditionalProvides => ArraySegment<ConditionalProvide>.Empty;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public ICollection<Type> Requires => ArraySegment<Type>.Empty;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The configuration to use. The database connection string is pulled from it.
|
||||||
|
/// </summary>
|
||||||
|
private readonly IConfiguration _configuration;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The host environment to check if the app is in debug mode.
|
||||||
|
/// </summary>
|
||||||
|
private readonly IWebHostEnvironment _environment;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new postgres module instance and use the given configuration and environment.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="configuration">The configuration to use</param>
|
||||||
|
/// <param name="env">The environment that will be used (if the env is in development mode, more information will be displayed on errors.</param>
|
||||||
|
public SqLiteModule(IConfiguration configuration, IWebHostEnvironment env)
|
||||||
|
{
|
||||||
|
_configuration = configuration;
|
||||||
|
_environment = env;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public void Configure(IServiceCollection services, ICollection<Type> availableTypes)
|
||||||
|
{
|
||||||
|
services.AddDbContext<DatabaseContext, SqLiteContext>(x =>
|
||||||
|
{
|
||||||
|
x.UseSqlite(_configuration.GetDatabaseConnection("sqlite"));
|
||||||
|
if (_environment.IsDevelopment())
|
||||||
|
x.EnableDetailedErrors().EnableSensitiveDataLogging();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
Kyoo.sln
6
Kyoo.sln
@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.Postgresql", "Kyoo.Pos
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.Authentication", "Kyoo.Authentication\Kyoo.Authentication.csproj", "{7A841335-6523-47DB-9717-80AA7BD943FD}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.Authentication", "Kyoo.Authentication\Kyoo.Authentication.csproj", "{7A841335-6523-47DB-9717-80AA7BD943FD}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.SqLite", "Kyoo.SqLite\Kyoo.SqLite.csproj", "{6515380E-1E57-42DA-B6E3-E1C8A848818A}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -41,5 +43,9 @@ Global
|
|||||||
{7A841335-6523-47DB-9717-80AA7BD943FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{7A841335-6523-47DB-9717-80AA7BD943FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{7A841335-6523-47DB-9717-80AA7BD943FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{7A841335-6523-47DB-9717-80AA7BD943FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{7A841335-6523-47DB-9717-80AA7BD943FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{7A841335-6523-47DB-9717-80AA7BD943FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{6515380E-1E57-42DA-B6E3-E1C8A848818A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6515380E-1E57-42DA-B6E3-E1C8A848818A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6515380E-1E57-42DA-B6E3-E1C8A848818A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{6515380E-1E57-42DA-B6E3-E1C8A848818A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
Loading…
x
Reference in New Issue
Block a user