// <auto-generated />
using System;
using API.Schema;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;

#nullable disable

namespace API.Migrations
{
    [DbContext(typeof(PgsqlContext))]
    partial class PgsqlContextModelSnapshot : ModelSnapshot
    {
        protected override void BuildModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "9.0.0")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("API.Schema.Author", b =>
                {
                    b.Property<string>("AuthorId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("AuthorName")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("AuthorId");

                    b.ToTable("Authors");
                });

            modelBuilder.Entity("API.Schema.Chapter", b =>
                {
                    b.Property<string>("ChapterId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("ArchiveFileName")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("ChapterIds")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<float>("ChapterNumber")
                        .HasColumnType("real");

                    b.Property<bool>("Downloaded")
                        .HasColumnType("boolean");

                    b.Property<string>("ParentMangaId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("Title")
                        .HasColumnType("text");

                    b.Property<string>("Url")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<float?>("VolumeNumber")
                        .HasColumnType("real");

                    b.HasKey("ChapterId");

                    b.HasIndex("ParentMangaId");

                    b.ToTable("Chapters");
                });

            modelBuilder.Entity("API.Schema.Jobs.Job", b =>
                {
                    b.Property<string>("JobId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.PrimitiveCollection<string[]>("DependsOnJobIds")
                        .HasMaxLength(64)
                        .HasColumnType("text[]");

                    b.Property<string>("JobId1")
                        .HasColumnType("character varying(64)");

                    b.Property<byte>("JobType")
                        .HasColumnType("smallint");

                    b.Property<DateTime>("LastExecution")
                        .HasColumnType("timestamp with time zone");

                    b.Property<DateTime>("NextExecution")
                        .HasColumnType("timestamp with time zone");

                    b.Property<string>("ParentJobId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<decimal>("RecurrenceMs")
                        .HasColumnType("numeric(20,0)");

                    b.Property<int>("state")
                        .HasColumnType("integer");

                    b.HasKey("JobId");

                    b.HasIndex("JobId1");

                    b.ToTable("Jobs");

                    b.HasDiscriminator<byte>("JobType");

                    b.UseTphMappingStrategy();
                });

            modelBuilder.Entity("API.Schema.LibraryConnectors.LibraryConnector", b =>
                {
                    b.Property<string>("LibraryConnectorId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("Auth")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("BaseUrl")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<byte>("LibraryType")
                        .HasColumnType("smallint");

                    b.HasKey("LibraryConnectorId");

                    b.ToTable("LibraryConnectors");

                    b.HasDiscriminator<byte>("LibraryType");

                    b.UseTphMappingStrategy();
                });

            modelBuilder.Entity("API.Schema.Link", b =>
                {
                    b.Property<string>("LinkId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("LinkIds")
                        .HasColumnType("text");

                    b.Property<string>("LinkProvider")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("LinkUrl")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("MangaId")
                        .IsRequired()
                        .HasColumnType("character varying(64)");

                    b.HasKey("LinkId");

                    b.HasIndex("MangaId");

                    b.ToTable("Link");
                });

            modelBuilder.Entity("API.Schema.Manga", b =>
                {
                    b.Property<string>("MangaId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.PrimitiveCollection<string[]>("AltTitleIds")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.PrimitiveCollection<string[]>("AuthorIds")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.Property<string>("ConnectorId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("CoverFileNameInCache")
                        .HasColumnType("text");

                    b.Property<string>("CoverUrl")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("Description")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("FolderName")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<float>("IgnoreChapterBefore")
                        .HasColumnType("real");

                    b.Property<string>("LatestChapterAvailableId")
                        .HasColumnType("character varying(64)");

                    b.Property<string>("LatestChapterDownloadedId")
                        .HasColumnType("character varying(64)");

                    b.PrimitiveCollection<string[]>("LinkIds")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.Property<string>("MangaConnectorName")
                        .IsRequired()
                        .HasColumnType("character varying(32)");

                    b.Property<string>("MangaIds")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("OriginalLanguage")
                        .HasColumnType("text");

                    b.Property<byte>("ReleaseStatus")
                        .HasColumnType("smallint");

                    b.PrimitiveCollection<string[]>("TagIds")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.Property<long>("year")
                        .HasColumnType("bigint");

                    b.HasKey("MangaId");

                    b.HasIndex("LatestChapterAvailableId")
                        .IsUnique();

                    b.HasIndex("LatestChapterDownloadedId")
                        .IsUnique();

                    b.HasIndex("MangaConnectorName");

                    b.ToTable("Manga");
                });

            modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
                {
                    b.Property<string>("AltTitleId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("AltTitleIds")
                        .HasColumnType("text");

                    b.Property<string>("Language")
                        .IsRequired()
                        .HasMaxLength(8)
                        .HasColumnType("character varying(8)");

                    b.Property<string>("MangaId")
                        .IsRequired()
                        .HasColumnType("character varying(64)");

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("AltTitleId");

                    b.HasIndex("MangaId");

                    b.ToTable("AltTitles");
                });

            modelBuilder.Entity("API.Schema.MangaConnector", b =>
                {
                    b.Property<string>("Name")
                        .HasMaxLength(32)
                        .HasColumnType("character varying(32)");

                    b.PrimitiveCollection<string[]>("BaseUris")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.PrimitiveCollection<string[]>("SupportedLanguages")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.HasKey("Name");

                    b.ToTable("MangaConnectors");
                });

            modelBuilder.Entity("API.Schema.MangaTag", b =>
                {
                    b.Property<string>("Tag")
                        .HasColumnType("text");

                    b.HasKey("Tag");

                    b.ToTable("Tags");
                });

            modelBuilder.Entity("API.Schema.NotificationConnectors.NotificationConnector", b =>
                {
                    b.Property<string>("NotificationConnectorId")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<byte>("NotificationConnectorType")
                        .HasColumnType("smallint");

                    b.HasKey("NotificationConnectorId");

                    b.ToTable("NotificationConnectors");

                    b.HasDiscriminator<byte>("NotificationConnectorType");

                    b.UseTphMappingStrategy();
                });

            modelBuilder.Entity("MangaAuthor", b =>
                {
                    b.Property<string>("MangaId")
                        .HasColumnType("character varying(64)");

                    b.Property<string>("AuthorId")
                        .HasColumnType("character varying(64)");

                    b.Property<string>("AuthorIds")
                        .HasColumnType("text");

                    b.Property<string>("MangaIds")
                        .HasColumnType("text");

                    b.HasKey("MangaId", "AuthorId");

                    b.HasIndex("AuthorId");

                    b.ToTable("MangaAuthor");
                });

            modelBuilder.Entity("MangaTag", b =>
                {
                    b.Property<string>("MangaId")
                        .HasColumnType("character varying(64)");

                    b.Property<string>("Tag")
                        .HasColumnType("text");

                    b.Property<string>("MangaIds")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("TagIds")
                        .HasColumnType("text");

                    b.HasKey("MangaId", "Tag");

                    b.HasIndex("MangaIds");

                    b.HasIndex("Tag");

                    b.ToTable("MangaTag");
                });

            modelBuilder.Entity("API.Schema.Jobs.CreateArchiveJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("ChapterId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("ComicInfoLocation")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("ImagesLocation")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasIndex("ChapterId");

                    b.ToTable("Jobs", t =>
                        {
                            t.Property("ChapterId")
                                .HasColumnName("CreateArchiveJob_ChapterId");
                        });

                    b.HasDiscriminator().HasValue((byte)4);
                });

            modelBuilder.Entity("API.Schema.Jobs.CreateComicInfoXmlJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("ChapterId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.Property<string>("Path")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasIndex("ChapterId");

                    b.ToTable("Jobs", t =>
                        {
                            t.Property("ChapterId")
                                .HasColumnName("CreateComicInfoXmlJob_ChapterId");
                        });

                    b.HasDiscriminator().HasValue((byte)6);
                });

            modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("MangaId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.HasIndex("MangaId");

                    b.HasDiscriminator().HasValue((byte)1);
                });

            modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("ChapterId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.HasIndex("ChapterId");

                    b.HasDiscriminator().HasValue((byte)0);
                });

            modelBuilder.Entity("API.Schema.Jobs.MoveFileOrFolderJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("FromLocation")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("ToLocation")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasDiscriminator().HasValue((byte)3);
                });

            modelBuilder.Entity("API.Schema.Jobs.ProcessImagesJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<bool>("Bw")
                        .HasColumnType("boolean");

                    b.Property<int>("Compression")
                        .HasColumnType("integer");

                    b.Property<string>("Path")
                        .IsRequired()
                        .HasColumnType("text");

                    b.ToTable("Jobs", t =>
                        {
                            t.Property("Path")
                                .HasColumnName("ProcessImagesJob_Path");
                        });

                    b.HasDiscriminator().HasValue((byte)5);
                });

            modelBuilder.Entity("API.Schema.Jobs.SearchMangaJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("MangaConnectorName")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("SearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasDiscriminator().HasValue((byte)7);
                });

            modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
                {
                    b.HasBaseType("API.Schema.Jobs.Job");

                    b.Property<string>("MangaId")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)");

                    b.HasIndex("MangaId");

                    b.ToTable("Jobs", t =>
                        {
                            t.Property("MangaId")
                                .HasColumnName("UpdateMetadataJob_MangaId");
                        });

                    b.HasDiscriminator().HasValue((byte)2);
                });

            modelBuilder.Entity("API.Schema.LibraryConnectors.Kavita", b =>
                {
                    b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");

                    b.HasDiscriminator().HasValue((byte)1);
                });

            modelBuilder.Entity("API.Schema.LibraryConnectors.Komga", b =>
                {
                    b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");

                    b.HasDiscriminator().HasValue((byte)0);
                });

            modelBuilder.Entity("API.Schema.NotificationConnectors.Gotify", b =>
                {
                    b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");

                    b.Property<string>("AppToken")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("Endpoint")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasDiscriminator().HasValue((byte)0);
                });

            modelBuilder.Entity("API.Schema.NotificationConnectors.Lunasea", b =>
                {
                    b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");

                    b.Property<string>("Id")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasDiscriminator().HasValue((byte)1);
                });

            modelBuilder.Entity("API.Schema.NotificationConnectors.Ntfy", b =>
                {
                    b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");

                    b.Property<string>("Auth")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("Endpoint")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("Topic")
                        .IsRequired()
                        .HasColumnType("text");

                    b.ToTable("NotificationConnectors", t =>
                        {
                            t.Property("Endpoint")
                                .HasColumnName("Ntfy_Endpoint");
                        });

                    b.HasDiscriminator().HasValue((byte)2);
                });

            modelBuilder.Entity("API.Schema.Chapter", b =>
                {
                    b.HasOne("API.Schema.Manga", "ParentManga")
                        .WithMany("Chapters")
                        .HasForeignKey("ParentMangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("ParentManga");
                });

            modelBuilder.Entity("API.Schema.Jobs.Job", b =>
                {
                    b.HasOne("API.Schema.Jobs.Job", null)
                        .WithMany("DependsOnJobs")
                        .HasForeignKey("JobId1");
                });

            modelBuilder.Entity("API.Schema.Link", b =>
                {
                    b.HasOne("API.Schema.Manga", "Manga")
                        .WithMany("Links")
                        .HasForeignKey("MangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Manga");
                });

            modelBuilder.Entity("API.Schema.Manga", b =>
                {
                    b.HasOne("API.Schema.Chapter", "LatestChapterAvailable")
                        .WithOne()
                        .HasForeignKey("API.Schema.Manga", "LatestChapterAvailableId");

                    b.HasOne("API.Schema.Chapter", "LatestChapterDownloaded")
                        .WithOne()
                        .HasForeignKey("API.Schema.Manga", "LatestChapterDownloadedId");

                    b.HasOne("API.Schema.MangaConnector", "MangaConnector")
                        .WithMany("Mangas")
                        .HasForeignKey("MangaConnectorName")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("LatestChapterAvailable");

                    b.Navigation("LatestChapterDownloaded");

                    b.Navigation("MangaConnector");
                });

            modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
                {
                    b.HasOne("API.Schema.Manga", "Manga")
                        .WithMany("AltTitles")
                        .HasForeignKey("MangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Manga");
                });

            modelBuilder.Entity("MangaAuthor", b =>
                {
                    b.HasOne("API.Schema.Author", null)
                        .WithMany()
                        .HasForeignKey("AuthorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("API.Schema.Manga", null)
                        .WithMany()
                        .HasForeignKey("MangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("MangaTag", b =>
                {
                    b.HasOne("API.Schema.Manga", null)
                        .WithMany()
                        .HasForeignKey("MangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("API.Schema.MangaTag", null)
                        .WithMany()
                        .HasForeignKey("MangaIds")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("API.Schema.MangaTag", null)
                        .WithMany()
                        .HasForeignKey("Tag")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("API.Schema.Jobs.CreateArchiveJob", b =>
                {
                    b.HasOne("API.Schema.Chapter", "Chapter")
                        .WithMany()
                        .HasForeignKey("ChapterId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Chapter");
                });

            modelBuilder.Entity("API.Schema.Jobs.CreateComicInfoXmlJob", b =>
                {
                    b.HasOne("API.Schema.Chapter", "Chapter")
                        .WithMany()
                        .HasForeignKey("ChapterId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Chapter");
                });

            modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
                {
                    b.HasOne("API.Schema.Manga", "Manga")
                        .WithMany()
                        .HasForeignKey("MangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Manga");
                });

            modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
                {
                    b.HasOne("API.Schema.Chapter", "Chapter")
                        .WithMany()
                        .HasForeignKey("ChapterId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Chapter");
                });

            modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
                {
                    b.HasOne("API.Schema.Manga", "Manga")
                        .WithMany()
                        .HasForeignKey("MangaId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Manga");
                });

            modelBuilder.Entity("API.Schema.Jobs.Job", b =>
                {
                    b.Navigation("DependsOnJobs");
                });

            modelBuilder.Entity("API.Schema.Manga", b =>
                {
                    b.Navigation("AltTitles");

                    b.Navigation("Chapters");

                    b.Navigation("Links");
                });

            modelBuilder.Entity("API.Schema.MangaConnector", b =>
                {
                    b.Navigation("Mangas");
                });
#pragma warning restore 612, 618
        }
    }
}