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

#nullable disable

namespace DataLayer.Postgres.Migrations
{
    [DbContext(typeof(LibationContext))]
    [Migration("20260107224301_AddIsAudiblePlus")]
    partial class AddIsAudiblePlus
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "10.0.0")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("CategoryCategoryLadder", b =>
                {
                    b.Property<int>("_categoriesCategoryId")
                        .HasColumnType("integer");

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

                    b.HasKey("_categoriesCategoryId", "_categoryLaddersCategoryLadderId");

                    b.HasIndex("_categoryLaddersCategoryLadderId");

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

            modelBuilder.Entity("DataLayer.Book", b =>
                {
                    b.Property<int>("BookId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("BookId"));

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

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

                    b.Property<DateTime?>("DatePublished")
                        .HasColumnType("timestamp without time zone");

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

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

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

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

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

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

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

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

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

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

                    b.HasKey("BookId");

                    b.HasIndex("AudibleProductId");

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

            modelBuilder.Entity("DataLayer.BookCategory", b =>
                {
                    b.Property<int>("BookId")
                        .HasColumnType("integer");

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

                    b.HasKey("BookId", "CategoryLadderId");

                    b.HasIndex("BookId");

                    b.HasIndex("CategoryLadderId");

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

            modelBuilder.Entity("DataLayer.BookContributor", b =>
                {
                    b.Property<int>("BookId")
                        .HasColumnType("integer");

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

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

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

                    b.HasKey("BookId", "ContributorId", "Role");

                    b.HasIndex("BookId");

                    b.HasIndex("ContributorId");

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

            modelBuilder.Entity("DataLayer.Category", b =>
                {
                    b.Property<int>("CategoryId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("CategoryId"));

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

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

                    b.HasKey("CategoryId");

                    b.HasIndex("AudibleCategoryId");

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

            modelBuilder.Entity("DataLayer.CategoryLadder", b =>
                {
                    b.Property<int>("CategoryLadderId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("CategoryLadderId"));

                    b.HasKey("CategoryLadderId");

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

            modelBuilder.Entity("DataLayer.Contributor", b =>
                {
                    b.Property<int>("ContributorId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("ContributorId"));

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

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

                    b.HasKey("ContributorId");

                    b.HasIndex("Name");

                    b.ToTable("Contributors");

                    b.HasData(
                        new
                        {
                            ContributorId = -1,
                            Name = ""
                        });
                });

            modelBuilder.Entity("DataLayer.LibraryBook", b =>
                {
                    b.Property<int>("BookId")
                        .HasColumnType("integer");

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

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

                    b.Property<DateTime>("DateAdded")
                        .HasColumnType("timestamp without time zone");

                    b.Property<DateTime?>("IncludedUntil")
                        .HasColumnType("timestamp without time zone");

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

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

                    b.HasKey("BookId");

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

            modelBuilder.Entity("DataLayer.Series", b =>
                {
                    b.Property<int>("SeriesId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("SeriesId"));

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

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

                    b.HasKey("SeriesId");

                    b.HasIndex("AudibleSeriesId");

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

            modelBuilder.Entity("DataLayer.SeriesBook", b =>
                {
                    b.Property<int>("SeriesId")
                        .HasColumnType("integer");

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

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

                    b.HasKey("SeriesId", "BookId");

                    b.HasIndex("BookId");

                    b.HasIndex("SeriesId");

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

            modelBuilder.Entity("CategoryCategoryLadder", b =>
                {
                    b.HasOne("DataLayer.Category", null)
                        .WithMany()
                        .HasForeignKey("_categoriesCategoryId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("DataLayer.CategoryLadder", null)
                        .WithMany()
                        .HasForeignKey("_categoryLaddersCategoryLadderId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("DataLayer.Book", b =>
                {
                    b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
                        {
                            b1.Property<int>("BookId")
                                .HasColumnType("integer");

                            b1.Property<float>("OverallRating")
                                .HasColumnType("real");

                            b1.Property<float>("PerformanceRating")
                                .HasColumnType("real");

                            b1.Property<float>("StoryRating")
                                .HasColumnType("real");

                            b1.HasKey("BookId");

                            b1.ToTable("Books");

                            b1.WithOwner()
                                .HasForeignKey("BookId");
                        });

                    b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
                        {
                            b1.Property<int>("SupplementId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("integer");

                            NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b1.Property<int>("SupplementId"));

                            b1.Property<int>("BookId")
                                .HasColumnType("integer");

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

                            b1.HasKey("SupplementId");

                            b1.HasIndex("BookId");

                            b1.ToTable("Supplement");

                            b1.WithOwner("Book")
                                .HasForeignKey("BookId");

                            b1.Navigation("Book");
                        });

                    b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
                        {
                            b1.Property<int>("BookId")
                                .HasColumnType("integer");

                            b1.Property<int>("BookStatus")
                                .HasColumnType("integer");

                            b1.Property<bool>("IsFinished")
                                .HasColumnType("boolean");

                            b1.Property<DateTime?>("LastDownloaded")
                                .HasColumnType("timestamp without time zone");

                            b1.Property<string>("LastDownloadedFileVersion")
                                .HasColumnType("text");

                            b1.Property<long?>("LastDownloadedFormat")
                                .HasColumnType("bigint");

                            b1.Property<string>("LastDownloadedVersion")
                                .HasColumnType("text");

                            b1.Property<int?>("PdfStatus")
                                .HasColumnType("integer");

                            b1.Property<string>("Tags")
                                .IsRequired()
                                .HasColumnType("text");

                            b1.HasKey("BookId");

                            b1.ToTable("UserDefinedItem", (string)null);

                            b1.WithOwner("Book")
                                .HasForeignKey("BookId");

                            b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
                                {
                                    b2.Property<int>("UserDefinedItemBookId")
                                        .HasColumnType("integer");

                                    b2.Property<float>("OverallRating")
                                        .HasColumnType("real");

                                    b2.Property<float>("PerformanceRating")
                                        .HasColumnType("real");

                                    b2.Property<float>("StoryRating")
                                        .HasColumnType("real");

                                    b2.HasKey("UserDefinedItemBookId");

                                    b2.ToTable("UserDefinedItem");

                                    b2.WithOwner()
                                        .HasForeignKey("UserDefinedItemBookId");
                                });

                            b1.Navigation("Book");

                            b1.Navigation("Rating")
                                .IsRequired();
                        });

                    b.Navigation("Rating");

                    b.Navigation("Supplements");

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

            modelBuilder.Entity("DataLayer.BookCategory", b =>
                {
                    b.HasOne("DataLayer.Book", "Book")
                        .WithMany("CategoriesLink")
                        .HasForeignKey("BookId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("DataLayer.CategoryLadder", "CategoryLadder")
                        .WithMany("BooksLink")
                        .HasForeignKey("CategoryLadderId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Book");

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

            modelBuilder.Entity("DataLayer.BookContributor", b =>
                {
                    b.HasOne("DataLayer.Book", "Book")
                        .WithMany("ContributorsLink")
                        .HasForeignKey("BookId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("DataLayer.Contributor", "Contributor")
                        .WithMany("BooksLink")
                        .HasForeignKey("ContributorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Book");

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

            modelBuilder.Entity("DataLayer.LibraryBook", b =>
                {
                    b.HasOne("DataLayer.Book", "Book")
                        .WithOne()
                        .HasForeignKey("DataLayer.LibraryBook", "BookId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

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

            modelBuilder.Entity("DataLayer.SeriesBook", b =>
                {
                    b.HasOne("DataLayer.Book", "Book")
                        .WithMany("SeriesLink")
                        .HasForeignKey("BookId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("DataLayer.Series", "Series")
                        .WithMany("BooksLink")
                        .HasForeignKey("SeriesId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Book");

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

            modelBuilder.Entity("DataLayer.Book", b =>
                {
                    b.Navigation("CategoriesLink");

                    b.Navigation("ContributorsLink");

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

            modelBuilder.Entity("DataLayer.CategoryLadder", b =>
                {
                    b.Navigation("BooksLink");
                });

            modelBuilder.Entity("DataLayer.Contributor", b =>
                {
                    b.Navigation("BooksLink");
                });

            modelBuilder.Entity("DataLayer.Series", b =>
                {
                    b.Navigation("BooksLink");
                });
#pragma warning restore 612, 618
        }
    }
}
