mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-11-03 19:17:16 -05:00 
			
		
		
		
	Adding a library/create route
This commit is contained in:
		
							parent
							
								
									aa0c672d42
								
							
						
					
					
						commit
						b48bb61608
					
				@ -55,6 +55,7 @@ namespace Kyoo.Controllers
 | 
			
		||||
		bool IsEpisodeRegistered(string episodePath, out long episodeID);
 | 
			
		||||
 | 
			
		||||
		//Register values
 | 
			
		||||
		long RegisterLibrary(Library library);
 | 
			
		||||
		long RegisterCollection(Collection collection);
 | 
			
		||||
		long RegisterShow(Show show);
 | 
			
		||||
		long EditShow(Show show);
 | 
			
		||||
 | 
			
		||||
@ -10,8 +10,29 @@ namespace Kyoo.Models
 | 
			
		||||
		[JsonIgnore] public long? LibraryID { get; set; }
 | 
			
		||||
		[JsonIgnore] public virtual Library Library { get; set; }
 | 
			
		||||
 | 
			
		||||
		public string Name => Provider.Name;
 | 
			
		||||
		public string Logo => Provider.Logo;
 | 
			
		||||
		public string Name
 | 
			
		||||
		{
 | 
			
		||||
			get => Provider?.Name;
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				if (Provider != null)
 | 
			
		||||
					Provider.Name = value;
 | 
			
		||||
				else
 | 
			
		||||
					Provider = new ProviderID {Name = value};
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public string Logo
 | 
			
		||||
		{
 | 
			
		||||
			get => Provider?.Logo;
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				if (Provider != null)
 | 
			
		||||
					Provider.Logo = value;
 | 
			
		||||
				else
 | 
			
		||||
					Provider = new ProviderID {Logo = value};
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public ProviderLink() { }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -354,11 +354,28 @@ namespace Kyoo.Controllers
 | 
			
		||||
			return collection.ID;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public long RegisterLibrary(Library library)
 | 
			
		||||
		{
 | 
			
		||||
			if (library == null)
 | 
			
		||||
				return 0;
 | 
			
		||||
			library.Providers = library.Providers.Select(x =>
 | 
			
		||||
			{
 | 
			
		||||
				x.Provider = _database.Providers.FirstOrDefault(y => y.Name == x.Name);
 | 
			
		||||
				if (x.Provider != null)
 | 
			
		||||
					x.ProviderID = x.Provider.ID;
 | 
			
		||||
				return x;
 | 
			
		||||
			}).Where(x => x.Provider != null).ToList();
 | 
			
		||||
			if (_database.Entry(library).State == EntityState.Detached)
 | 
			
		||||
				_database.Libraries.Add(library);
 | 
			
		||||
			_database.SaveChanges();
 | 
			
		||||
			return library.ID;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public long RegisterShow(Show show)
 | 
			
		||||
		{
 | 
			
		||||
			if (show == null)
 | 
			
		||||
				return 0;
 | 
			
		||||
			if (!_database.Entry(show).IsKeySet)
 | 
			
		||||
			if (_database.Entry(show).State == EntityState.Detached)
 | 
			
		||||
				_database.Shows.Add(show);
 | 
			
		||||
			_database.SaveChanges();
 | 
			
		||||
			return show.ID;
 | 
			
		||||
 | 
			
		||||
@ -125,6 +125,11 @@ namespace Kyoo
 | 
			
		||||
			modelBuilder.Entity<PeopleLink>()
 | 
			
		||||
				.Ignore(x => x.ExternalIDs);
 | 
			
		||||
			
 | 
			
		||||
			modelBuilder.Entity<ProviderLink>()
 | 
			
		||||
				.Ignore(x => x.Name);
 | 
			
		||||
			modelBuilder.Entity<ProviderLink>()
 | 
			
		||||
				.Ignore(x => x.Logo);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			modelBuilder.Entity<Collection>()
 | 
			
		||||
				.HasIndex(x => x.Slug)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										624
									
								
								Kyoo/Models/DatabaseMigrations/Internal/20200426223831_Initial.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										624
									
								
								Kyoo/Models/DatabaseMigrations/Internal/20200426223831_Initial.Designer.cs
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,624 @@
 | 
			
		||||
// <auto-generated />
 | 
			
		||||
using System;
 | 
			
		||||
using Kyoo;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
			
		||||
 | 
			
		||||
namespace Kyoo.Models.DatabaseMigrations.Internal
 | 
			
		||||
{
 | 
			
		||||
    [DbContext(typeof(DatabaseContext))]
 | 
			
		||||
    [Migration("20200426223831_Initial")]
 | 
			
		||||
    partial class Initial
 | 
			
		||||
    {
 | 
			
		||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
			
		||||
        {
 | 
			
		||||
#pragma warning disable 612, 618
 | 
			
		||||
            modelBuilder
 | 
			
		||||
                .HasAnnotation("ProductVersion", "3.1.3");
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Collection", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("ImgPrimary")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Overview")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Poster")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Slug")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Slug")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Collections");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.CollectionLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("CollectionID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("ShowID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("CollectionID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ShowID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("CollectionLinks");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Episode", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("AbsoluteNumber")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("EpisodeNumber")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("ImgPrimary")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Overview")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Path")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<DateTime?>("ReleaseDate")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("Runtime")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("SeasonID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("SeasonNumber")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("ShowID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Title")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("SeasonID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ShowID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Episodes");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Genre", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Slug")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Slug")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Genres");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.GenreLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ShowID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("GenreID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ShowID", "GenreID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GenreID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("GenreLinks");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Library", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Paths")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Slug")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Slug")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Libraries");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.LibraryLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("CollectionID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("LibraryID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("ShowID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("CollectionID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("LibraryID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ShowID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("LibraryLinks");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("DataID")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("EpisodeID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Link")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("PeopleID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("ProviderID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("SeasonID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("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<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("ImgPrimary")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Slug")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Slug")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Peoples");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.PeopleLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("PeopleID")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("PeopleID1")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Role")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("ShowID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Type")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("PeopleID1");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ShowID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("PeopleLinks");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.ProviderID", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Logo")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Name")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Providers");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("LibraryID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("ProviderID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("LibraryID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ProviderID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ProviderLinks");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Season", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("ImgPrimary")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Overview")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("SeasonNumber")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("ShowID")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Title")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("Year")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ShowID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Seasons");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Show", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Aliases")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Backdrop")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("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")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("StartYear")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<int?>("Status")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long?>("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<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Slug")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Slug")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Studios");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Track", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<long>("ID")
 | 
			
		||||
                        .ValueGeneratedOnAdd()
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Codec")
 | 
			
		||||
                        .HasColumnType("TEXT");
 | 
			
		||||
 | 
			
		||||
                    b.Property<long>("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>("Type")
 | 
			
		||||
                        .HasColumnType("INTEGER");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("ID");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("EpisodeID");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Tracks");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.CollectionLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Collection", "Collection")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("CollectionID");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Show", "Show")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("ShowID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            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();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.GenreLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Genre", "Genre")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("GenreID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Show", "Show")
 | 
			
		||||
                        .WithMany("GenreLinks")
 | 
			
		||||
                        .HasForeignKey("ShowID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.LibraryLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Collection", "Collection")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("CollectionID");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Library", "Library")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("LibraryID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Show", "Show")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("ShowID");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.MetadataID", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Episode", "Episode")
 | 
			
		||||
                        .WithMany("ExternalIDs")
 | 
			
		||||
                        .HasForeignKey("EpisodeID");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.People", "People")
 | 
			
		||||
                        .WithMany("ExternalIDs")
 | 
			
		||||
                        .HasForeignKey("PeopleID");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.ProviderID", "Provider")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("ProviderID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Season", "Season")
 | 
			
		||||
                        .WithMany("ExternalIDs")
 | 
			
		||||
                        .HasForeignKey("SeasonID");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Show", "Show")
 | 
			
		||||
                        .WithMany("ExternalIDs")
 | 
			
		||||
                        .HasForeignKey("ShowID");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.PeopleLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.People", "People")
 | 
			
		||||
                        .WithMany("Roles")
 | 
			
		||||
                        .HasForeignKey("PeopleID1");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Show", "Show")
 | 
			
		||||
                        .WithMany("People")
 | 
			
		||||
                        .HasForeignKey("ShowID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Library", "Library")
 | 
			
		||||
                        .WithMany("Providers")
 | 
			
		||||
                        .HasForeignKey("LibraryID");
 | 
			
		||||
 | 
			
		||||
                    b.HasOne("Kyoo.Models.ProviderID", "Provider")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("ProviderID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Season", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Show", "Show")
 | 
			
		||||
                        .WithMany("Seasons")
 | 
			
		||||
                        .HasForeignKey("ShowID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Show", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Studio", "Studio")
 | 
			
		||||
                        .WithMany()
 | 
			
		||||
                        .HasForeignKey("StudioID");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.Track", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("Kyoo.Models.Episode", "Episode")
 | 
			
		||||
                        .WithMany("Tracks")
 | 
			
		||||
                        .HasForeignKey("EpisodeID")
 | 
			
		||||
                        .OnDelete(DeleteBehavior.Cascade)
 | 
			
		||||
                        .IsRequired();
 | 
			
		||||
                });
 | 
			
		||||
#pragma warning restore 612, 618
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,598 @@
 | 
			
		||||
using System;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
			
		||||
 | 
			
		||||
namespace Kyoo.Models.DatabaseMigrations.Internal
 | 
			
		||||
{
 | 
			
		||||
    public partial class Initial : Migration
 | 
			
		||||
    {
 | 
			
		||||
        protected override void Up(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Collections",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Slug = table.Column<string>(nullable: true),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true),
 | 
			
		||||
                    Poster = table.Column<string>(nullable: true),
 | 
			
		||||
                    Overview = table.Column<string>(nullable: true),
 | 
			
		||||
                    ImgPrimary = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_Collections", x => x.ID);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Genres",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Slug = table.Column<string>(nullable: true),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_Genres", x => x.ID);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Libraries",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Slug = table.Column<string>(nullable: true),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true),
 | 
			
		||||
                    Paths = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_Libraries", x => x.ID);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Peoples",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Slug = table.Column<string>(nullable: true),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true),
 | 
			
		||||
                    ImgPrimary = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_Peoples", x => x.ID);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Providers",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true),
 | 
			
		||||
                    Logo = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_Providers", x => x.ID);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Studios",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Slug = table.Column<string>(nullable: true),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_Studios", x => x.ID);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "ProviderLinks",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    ProviderID = table.Column<long>(nullable: false),
 | 
			
		||||
                    LibraryID = table.Column<long>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_ProviderLinks", x => x.ID);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_ProviderLinks_Libraries_LibraryID",
 | 
			
		||||
                        column: x => x.LibraryID,
 | 
			
		||||
                        principalTable: "Libraries",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_ProviderLinks_Providers_ProviderID",
 | 
			
		||||
                        column: x => x.ProviderID,
 | 
			
		||||
                        principalTable: "Providers",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Cascade);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Shows",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Slug = table.Column<string>(nullable: true),
 | 
			
		||||
                    Title = table.Column<string>(nullable: true),
 | 
			
		||||
                    Aliases = table.Column<string>(nullable: true),
 | 
			
		||||
                    Path = table.Column<string>(nullable: true),
 | 
			
		||||
                    Overview = table.Column<string>(nullable: true),
 | 
			
		||||
                    Status = table.Column<int>(nullable: true),
 | 
			
		||||
                    TrailerUrl = table.Column<string>(nullable: true),
 | 
			
		||||
                    StartYear = table.Column<long>(nullable: true),
 | 
			
		||||
                    EndYear = table.Column<long>(nullable: true),
 | 
			
		||||
                    Poster = table.Column<string>(nullable: true),
 | 
			
		||||
                    Logo = table.Column<string>(nullable: true),
 | 
			
		||||
                    Backdrop = table.Column<string>(nullable: true),
 | 
			
		||||
                    IsMovie = table.Column<bool>(nullable: false),
 | 
			
		||||
                    StudioID = table.Column<long>(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: "CollectionLinks",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    CollectionID = table.Column<long>(nullable: true),
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: false)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_CollectionLinks", x => x.ID);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_CollectionLinks_Collections_CollectionID",
 | 
			
		||||
                        column: x => x.CollectionID,
 | 
			
		||||
                        principalTable: "Collections",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_CollectionLinks_Shows_ShowID",
 | 
			
		||||
                        column: x => x.ShowID,
 | 
			
		||||
                        principalTable: "Shows",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Cascade);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "GenreLinks",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: false),
 | 
			
		||||
                    GenreID = table.Column<long>(nullable: false)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_GenreLinks", x => new { x.ShowID, x.GenreID });
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_GenreLinks_Genres_GenreID",
 | 
			
		||||
                        column: x => x.GenreID,
 | 
			
		||||
                        principalTable: "Genres",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Cascade);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_GenreLinks_Shows_ShowID",
 | 
			
		||||
                        column: x => x.ShowID,
 | 
			
		||||
                        principalTable: "Shows",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Cascade);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "LibraryLinks",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    LibraryID = table.Column<long>(nullable: false),
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: true),
 | 
			
		||||
                    CollectionID = table.Column<long>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_LibraryLinks", x => x.ID);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_LibraryLinks_Collections_CollectionID",
 | 
			
		||||
                        column: x => x.CollectionID,
 | 
			
		||||
                        principalTable: "Collections",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_LibraryLinks_Libraries_LibraryID",
 | 
			
		||||
                        column: x => x.LibraryID,
 | 
			
		||||
                        principalTable: "Libraries",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Cascade);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_LibraryLinks_Shows_ShowID",
 | 
			
		||||
                        column: x => x.ShowID,
 | 
			
		||||
                        principalTable: "Shows",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "PeopleLinks",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    PeopleID = table.Column<string>(nullable: true),
 | 
			
		||||
                    PeopleID1 = table.Column<long>(nullable: true),
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: false),
 | 
			
		||||
                    Role = table.Column<string>(nullable: true),
 | 
			
		||||
                    Type = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_PeopleLinks", x => x.ID);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_PeopleLinks_Peoples_PeopleID1",
 | 
			
		||||
                        column: x => x.PeopleID1,
 | 
			
		||||
                        principalTable: "Peoples",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_PeopleLinks_Shows_ShowID",
 | 
			
		||||
                        column: x => x.ShowID,
 | 
			
		||||
                        principalTable: "Shows",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Cascade);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Seasons",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: false),
 | 
			
		||||
                    SeasonNumber = table.Column<long>(nullable: false),
 | 
			
		||||
                    Title = table.Column<string>(nullable: true),
 | 
			
		||||
                    Overview = table.Column<string>(nullable: true),
 | 
			
		||||
                    Year = table.Column<long>(nullable: true),
 | 
			
		||||
                    ImgPrimary = table.Column<string>(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<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: false),
 | 
			
		||||
                    SeasonID = table.Column<long>(nullable: true),
 | 
			
		||||
                    SeasonNumber = table.Column<long>(nullable: false),
 | 
			
		||||
                    EpisodeNumber = table.Column<long>(nullable: false),
 | 
			
		||||
                    AbsoluteNumber = table.Column<long>(nullable: false),
 | 
			
		||||
                    Path = table.Column<string>(nullable: true),
 | 
			
		||||
                    Title = table.Column<string>(nullable: true),
 | 
			
		||||
                    Overview = table.Column<string>(nullable: true),
 | 
			
		||||
                    ReleaseDate = table.Column<DateTime>(nullable: true),
 | 
			
		||||
                    Runtime = table.Column<long>(nullable: false),
 | 
			
		||||
                    ImgPrimary = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                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<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    ProviderID = table.Column<long>(nullable: false),
 | 
			
		||||
                    ShowID = table.Column<long>(nullable: true),
 | 
			
		||||
                    EpisodeID = table.Column<long>(nullable: true),
 | 
			
		||||
                    SeasonID = table.Column<long>(nullable: true),
 | 
			
		||||
                    PeopleID = table.Column<long>(nullable: true),
 | 
			
		||||
                    DataID = table.Column<string>(nullable: true),
 | 
			
		||||
                    Link = table.Column<string>(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.Restrict);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_MetadataIds_Peoples_PeopleID",
 | 
			
		||||
                        column: x => x.PeopleID,
 | 
			
		||||
                        principalTable: "Peoples",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                    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.Restrict);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_MetadataIds_Shows_ShowID",
 | 
			
		||||
                        column: x => x.ShowID,
 | 
			
		||||
                        principalTable: "Shows",
 | 
			
		||||
                        principalColumn: "ID",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Tracks",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    ID = table.Column<long>(nullable: false)
 | 
			
		||||
                        .Annotation("Sqlite:Autoincrement", true),
 | 
			
		||||
                    Title = table.Column<string>(nullable: true),
 | 
			
		||||
                    Language = table.Column<string>(nullable: true),
 | 
			
		||||
                    Codec = table.Column<string>(nullable: true),
 | 
			
		||||
                    Path = table.Column<string>(nullable: true),
 | 
			
		||||
                    Type = table.Column<int>(nullable: false),
 | 
			
		||||
                    EpisodeID = table.Column<long>(nullable: false),
 | 
			
		||||
                    IsDefault = table.Column<bool>(nullable: false),
 | 
			
		||||
                    IsForced = table.Column<bool>(nullable: false),
 | 
			
		||||
                    IsExternal = table.Column<bool>(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.CreateIndex(
 | 
			
		||||
                name: "IX_CollectionLinks_CollectionID",
 | 
			
		||||
                table: "CollectionLinks",
 | 
			
		||||
                column: "CollectionID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_CollectionLinks_ShowID",
 | 
			
		||||
                table: "CollectionLinks",
 | 
			
		||||
                column: "ShowID");
 | 
			
		||||
 | 
			
		||||
            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",
 | 
			
		||||
                table: "Episodes",
 | 
			
		||||
                column: "ShowID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_GenreLinks_GenreID",
 | 
			
		||||
                table: "GenreLinks",
 | 
			
		||||
                column: "GenreID");
 | 
			
		||||
 | 
			
		||||
            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_LibraryLinks_CollectionID",
 | 
			
		||||
                table: "LibraryLinks",
 | 
			
		||||
                column: "CollectionID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_LibraryLinks_LibraryID",
 | 
			
		||||
                table: "LibraryLinks",
 | 
			
		||||
                column: "LibraryID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_LibraryLinks_ShowID",
 | 
			
		||||
                table: "LibraryLinks",
 | 
			
		||||
                column: "ShowID");
 | 
			
		||||
 | 
			
		||||
            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_PeopleLinks_PeopleID1",
 | 
			
		||||
                table: "PeopleLinks",
 | 
			
		||||
                column: "PeopleID1");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_PeopleLinks_ShowID",
 | 
			
		||||
                table: "PeopleLinks",
 | 
			
		||||
                column: "ShowID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_Peoples_Slug",
 | 
			
		||||
                table: "Peoples",
 | 
			
		||||
                column: "Slug",
 | 
			
		||||
                unique: true);
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_ProviderLinks_LibraryID",
 | 
			
		||||
                table: "ProviderLinks",
 | 
			
		||||
                column: "LibraryID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_ProviderLinks_ProviderID",
 | 
			
		||||
                table: "ProviderLinks",
 | 
			
		||||
                column: "ProviderID");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_Providers_Name",
 | 
			
		||||
                table: "Providers",
 | 
			
		||||
                column: "Name",
 | 
			
		||||
                unique: true);
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_Seasons_ShowID",
 | 
			
		||||
                table: "Seasons",
 | 
			
		||||
                column: "ShowID");
 | 
			
		||||
 | 
			
		||||
            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",
 | 
			
		||||
                table: "Tracks",
 | 
			
		||||
                column: "EpisodeID");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void Down(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "CollectionLinks");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "GenreLinks");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "LibraryLinks");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "MetadataIds");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "PeopleLinks");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "ProviderLinks");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Tracks");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Genres");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Collections");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Peoples");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Libraries");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Providers");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Episodes");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Seasons");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Shows");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Studios");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -310,7 +310,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal
 | 
			
		||||
                    b.HasIndex("Name")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ProviderIds");
 | 
			
		||||
                    b.ToTable("Providers");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("Kyoo.Models.ProviderLink", b =>
 | 
			
		||||
 | 
			
		||||
@ -8,12 +8,13 @@ using Microsoft.AspNetCore.Authorization;
 | 
			
		||||
namespace Kyoo.Api
 | 
			
		||||
{
 | 
			
		||||
	[Route("api/libraries")]
 | 
			
		||||
	[Route("api/library")]
 | 
			
		||||
	[ApiController]
 | 
			
		||||
	public class LibrariesController : ControllerBase
 | 
			
		||||
	public class LibrariesAPI : ControllerBase
 | 
			
		||||
	{
 | 
			
		||||
		private readonly ILibraryManager _libraryManager;
 | 
			
		||||
 | 
			
		||||
		public LibrariesController(ILibraryManager libraryManager)
 | 
			
		||||
		public LibrariesAPI(ILibraryManager libraryManager)
 | 
			
		||||
		{
 | 
			
		||||
			_libraryManager = libraryManager;
 | 
			
		||||
		}
 | 
			
		||||
@ -24,6 +25,25 @@ namespace Kyoo.Api
 | 
			
		||||
			return _libraryManager.GetLibraries();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		[Route("/api/library/create")]
 | 
			
		||||
		[HttpPost]
 | 
			
		||||
		[Authorize(Policy="Admin")]
 | 
			
		||||
		public IActionResult CreateLibrary([FromBody] Library library)
 | 
			
		||||
		{
 | 
			
		||||
			if (!ModelState.IsValid)
 | 
			
		||||
				return BadRequest(library);
 | 
			
		||||
			if (string.IsNullOrEmpty(library.Slug))
 | 
			
		||||
				return BadRequest(new {error = "The library's slug must be set and not empty"});
 | 
			
		||||
			if (string.IsNullOrEmpty(library.Name))
 | 
			
		||||
				return BadRequest(new {error = "The library's name must be set and not empty"});
 | 
			
		||||
			if (library.Paths == null || library.Paths.Length == 0)
 | 
			
		||||
				return BadRequest(new {error = "The library should have a least one path."});
 | 
			
		||||
			if (_libraryManager.GetLibrary(library.Slug) != null)
 | 
			
		||||
				return BadRequest(new {error = "Duplicated library slug"});
 | 
			
		||||
			_libraryManager.RegisterLibrary(library);
 | 
			
		||||
			return Ok();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[HttpGet("{librarySlug}")]
 | 
			
		||||
		[Authorize(Policy="Read")]
 | 
			
		||||
		public ActionResult<IEnumerable<Show>> GetShows(string librarySlug)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user