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

#nullable disable

namespace MyOffice.Migrations.Postgres.Migrations
{
    [DbContext(typeof(AppDbContext))]
    [Migration("20230726160638_AccessOwner")]
    partial class AccessOwner
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("Npgsql:CollationDefinition:my_ci_collation", "en-u-ks-primary,en-u-ks-primary,icu,False")
                .HasAnnotation("ProductVersion", "7.0.0")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.Account", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

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

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

                    b.Property<Guid?>("OwnerId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("CurrencyGlobalId");

                    b.HasIndex("OwnerId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountAccess", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

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

                    b.Property<Guid>("AccountId")
                        .HasColumnType("uuid");

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

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

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

                    b.Property<Guid?>("OwnerId")
                        .HasColumnType("uuid");

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

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("AccountId");

                    b.HasIndex("OwnerId");

                    b.HasIndex("UserId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountAccountCategory", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

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

                    b.Property<Guid>("AccountId")
                        .HasColumnType("uuid");

                    b.Property<Guid>("CategoryId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("AccountId");

                    b.HasIndex("CategoryId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountCategory", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

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

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("UserId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.Motion", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

                    b.Property<Guid>("AccountId")
                        .HasColumnType("uuid");

                    b.Property<decimal>("AmountMinus")
                        .HasPrecision(18, 6)
                        .HasColumnType("numeric(18,6)");

                    b.Property<decimal>("AmountPlus")
                        .HasPrecision(18, 6)
                        .HasColumnType("numeric(18,6)");

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

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

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

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

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

                    b.Property<Guid?>("UserId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("AccountId");

                    b.HasIndex("ItemId");

                    b.HasIndex("UserId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.Currency", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

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

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

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

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

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

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("CurrencyGlobalId");

                    b.HasIndex("CurrentRateId");

                    b.HasIndex("UserId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.CurrencyGlobal", b =>
                {
                    b.Property<string>("Id")
                        .HasColumnType("text");

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

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

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

                    b.HasKey("Id");

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

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.CurrencyRate", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

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

                    b.Property<Guid>("CurrencyId")
                        .HasColumnType("uuid");

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

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

                    b.Property<decimal>("Rate")
                        .HasColumnType("numeric");

                    b.HasKey("Id");

                    b.HasIndex("CurrencyId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Items.Item", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

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

                    b.Property<Guid>("CategoryId")
                        .HasColumnType("uuid");

                    b.Property<Guid>("ItemGlobalId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("CategoryId");

                    b.HasIndex("ItemGlobalId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Items.ItemCategory", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

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

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

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("UserId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Items.ItemGlobal", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

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

                    b.HasKey("Id");

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

            modelBuilder.Entity("MyOffice.Data.Models.Users.User", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid");

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

                    b.Property<string>("Email")
                        .IsRequired()
                        .HasColumnType("text")
                        .UseCollation("my_ci_collation");

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

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

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

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

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

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

                    b.Property<string>("UserName")
                        .IsRequired()
                        .HasColumnType("text")
                        .UseCollation("my_ci_collation");

                    b.HasKey("Id");

                    b.HasIndex("CurrencyId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Users.UserExternal", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

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

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

                    b.Property<string>("Email")
                        .IsRequired()
                        .HasColumnType("text")
                        .UseCollation("my_ci_collation");

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

                    b.Property<string>("Provider")
                        .IsRequired()
                        .HasColumnType("text")
                        .UseCollation("my_ci_collation");

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid");

                    b.HasKey("Id");

                    b.HasIndex("UserId");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.Account", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Currencies.CurrencyGlobal", "CurrencyGlobal")
                        .WithMany("Accounts")
                        .HasForeignKey("CurrencyGlobalId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Users.User", "Owner")
                        .WithMany("Accounts")
                        .HasForeignKey("OwnerId");

                    b.Navigation("CurrencyGlobal");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountAccess", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Accounts.Account", "Account")
                        .WithMany("AccessRights")
                        .HasForeignKey("AccountId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Users.User", "Owner")
                        .WithMany("AccountAccessOwners")
                        .HasForeignKey("OwnerId");

                    b.HasOne("MyOffice.Data.Models.Users.User", "User")
                        .WithMany("AccountAccess")
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Account");

                    b.Navigation("Owner");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountAccountCategory", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Accounts.Account", "Account")
                        .WithMany("Categories")
                        .HasForeignKey("AccountId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Accounts.AccountCategory", "Category")
                        .WithMany("Accounts")
                        .HasForeignKey("CategoryId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Account");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountCategory", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Users.User", "User")
                        .WithMany("AccountCategories")
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.Motion", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Accounts.Account", "Account")
                        .WithMany("Motions")
                        .HasForeignKey("AccountId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Items.Item", "Item")
                        .WithMany("Motions")
                        .HasForeignKey("ItemId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Users.User", null)
                        .WithMany("AccountMotions")
                        .HasForeignKey("UserId");

                    b.Navigation("Account");

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

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.Currency", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Currencies.CurrencyGlobal", "CurrencyGlobal")
                        .WithMany("Currencies")
                        .HasForeignKey("CurrencyGlobalId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Currencies.CurrencyRate", "CurrentRate")
                        .WithMany("Currencies")
                        .HasForeignKey("CurrentRateId");

                    b.HasOne("MyOffice.Data.Models.Users.User", "User")
                        .WithMany("Currencies")
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("CurrencyGlobal");

                    b.Navigation("CurrentRate");

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

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.CurrencyRate", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Currencies.Currency", "Currency")
                        .WithMany("Rates")
                        .HasForeignKey("CurrencyId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

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

            modelBuilder.Entity("MyOffice.Data.Models.Items.Item", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Items.ItemCategory", "Category")
                        .WithMany("Items")
                        .HasForeignKey("CategoryId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("MyOffice.Data.Models.Items.ItemGlobal", "ItemGlobal")
                        .WithMany("Items")
                        .HasForeignKey("ItemGlobalId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Category");

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

            modelBuilder.Entity("MyOffice.Data.Models.Items.ItemCategory", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Users.User", "User")
                        .WithMany("ItemCategories")
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

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

            modelBuilder.Entity("MyOffice.Data.Models.Users.User", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Currencies.CurrencyGlobal", "Currency")
                        .WithMany()
                        .HasForeignKey("CurrencyId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

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

            modelBuilder.Entity("MyOffice.Data.Models.Users.UserExternal", b =>
                {
                    b.HasOne("MyOffice.Data.Models.Users.User", "User")
                        .WithMany("UserClaims")
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.Account", b =>
                {
                    b.Navigation("AccessRights");

                    b.Navigation("Categories");

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

            modelBuilder.Entity("MyOffice.Data.Models.Accounts.AccountCategory", b =>
                {
                    b.Navigation("Accounts");
                });

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.Currency", b =>
                {
                    b.Navigation("Rates");
                });

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.CurrencyGlobal", b =>
                {
                    b.Navigation("Accounts");

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

            modelBuilder.Entity("MyOffice.Data.Models.Currencies.CurrencyRate", b =>
                {
                    b.Navigation("Currencies");
                });

            modelBuilder.Entity("MyOffice.Data.Models.Items.Item", b =>
                {
                    b.Navigation("Motions");
                });

            modelBuilder.Entity("MyOffice.Data.Models.Items.ItemCategory", b =>
                {
                    b.Navigation("Items");
                });

            modelBuilder.Entity("MyOffice.Data.Models.Items.ItemGlobal", b =>
                {
                    b.Navigation("Items");
                });

            modelBuilder.Entity("MyOffice.Data.Models.Users.User", b =>
                {
                    b.Navigation("AccountAccess");

                    b.Navigation("AccountAccessOwners");

                    b.Navigation("AccountCategories");

                    b.Navigation("AccountMotions");

                    b.Navigation("Accounts");

                    b.Navigation("Currencies");

                    b.Navigation("ItemCategories");

                    b.Navigation("UserClaims");
                });
#pragma warning restore 612, 618
        }
    }
}
