protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
            .HasAnnotation("ProductVersion", "6.0.0")
            .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis");
            NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "uuid-ossp");
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.AccommodationChangeLog", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.Property <JsonDocument>("ChangeEventData")
                .IsRequired()
                .HasColumnType("jsonb");

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

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

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

                b.HasKey("Id");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Accommodations.RichAccommodationDetails", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

                b.Property <string>("AccommodationWithManualCorrections")
                .IsRequired()
                .HasColumnType("jsonb");

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

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

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

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

                b.Property <string>("FinalAccommodation")
                .IsRequired()
                .HasColumnType("jsonb");

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

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

                b.Property <bool>("IsCorrected")
                .ValueGeneratedOnAdd()
                .HasColumnType("boolean")
                .HasDefaultValue(true);

                b.Property <string>("KeyData")
                .IsRequired()
                .HasColumnType("jsonb");

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

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

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <string>("SupplierAccommodationCodes")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <string>("SuppliersPriority")
                .IsRequired()
                .HasColumnType("jsonb");

                b.HasKey("Id");

                b.HasIndex("CountryId");

                b.HasIndex("LocalityId");

                b.HasIndex("LocalityZoneId");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.AccommodationUncertainMatches", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

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

                b.Property <bool>("IsActive")
                .ValueGeneratedOnAdd()
                .HasColumnType("boolean")
                .HasDefaultValue(true);

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

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

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

                b.HasKey("Id");

                b.HasIndex("HtIdToMerge");

                b.HasIndex("SourceHtId");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Ancillary.InvalidAccommodationMappingEntry", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.Property <List <MatchingResultEntry> >("MatchingResults")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <Dictionary <string, string> >("Suppliers")
                .HasColumnType("jsonb");

                b.HasKey("Id");

                b.ToTable("InvalidAccommodationMappings", (string)null);
            });

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Country", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <bool>("IsActive")
                .ValueGeneratedOnAdd()
                .HasColumnType("boolean")
                .HasDefaultValue(true);

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <MultiLanguage <string> >("Names")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <string>("SupplierCountryCodes")
                .IsRequired()
                .HasColumnType("jsonb");

                b.HasKey("Id");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.DataUpdateHistory", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

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

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

                b.HasKey("Id");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.HtAccommodationMapping", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

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

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

                b.Property <HashSet <int> >("MappedHtIds")
                .IsRequired()
                .HasColumnType("jsonb");

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

                b.HasKey("Id");

                b.HasIndex("HtId");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.Locality", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <bool>("IsActive")
                .ValueGeneratedOnAdd()
                .HasColumnType("boolean")
                .HasDefaultValue(true);

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <MultiLanguage <string> >("Names")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <string>("SupplierLocalityCodes")
                .HasColumnType("jsonb");

                b.HasKey("Id");

                b.HasIndex("CountryId");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.LocalityCandidate", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <MultiLanguage <string> >("Names")
                .IsRequired()
                .HasColumnType("jsonb");

                b.HasKey("Id");

                b.HasIndex("CountryId");

                b.ToTable("LocalityCandidates", (string)null);
            });

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.LocalitySynonym", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

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

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

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <MultiLanguage <string> >("Names")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <int>("SynonymType")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasDefaultValue(1);

                b.HasKey("Id");

                b.HasIndex("ExLocalityId");

                NpgsqlIndexBuilderExtensions.IncludeProperties(b.HasIndex("ExLocalityId"), new[] { "SynonymType" });

                b.HasIndex("LocalityId");

                b.ToTable("LocalitySynonyms", (string)null);
            });

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.LocalityZone", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

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

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

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <MultiLanguage <string> >("Names")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <string>("SupplierLocalityZoneCodes")
                .HasColumnType("jsonb");

                b.HasKey("Id");

                b.HasIndex("LocalityId");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Mappers.RawAccommodation", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

                b.Property <JsonDocument>("Accommodation")
                .IsRequired()
                .HasColumnType("jsonb");

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

                b.Property <MultiLanguage <string> >("CountryNames")
                .IsRequired()
                .HasColumnType("jsonb");

                b.Property <DateTimeOffset>("Created")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

                b.Property <MultiLanguage <string> >("LocalityNames")
                .HasColumnType("jsonb");

                b.Property <MultiLanguage <string> >("LocalityZoneNames")
                .HasColumnType("jsonb");

                b.Property <DateTimeOffset>("Modified")
                .ValueGeneratedOnAdd()
                .HasColumnType("timestamp with time zone")
                .HasDefaultValueSql("now() at time zone 'utc'");

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

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

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

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

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

                b.HasKey("Id");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.ProjectionForGroupedAccommodations", b =>
            {
                b.Property <string>("SupplierCode")
                .HasColumnType("text");

                b.ToTable("ProjectionForGroupedAccommodations", null, t => t.ExcludeFromMigrations());
            });

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.ProjectionForSupplierLocality", b =>
            {
                b.Property <MultiLanguage <string> >("LocalityNames")
                .HasColumnType("jsonb");

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

                b.ToTable("ProjectionForSupplierLocalities", null, t => t.ExcludeFromMigrations());
            });

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.StaticData", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.Property <JsonDocument>("Value")
                .HasColumnType("jsonb");

                b.HasKey("Id");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Accommodations.RichAccommodationDetails", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Country", "Country")
                .WithMany("Accommodations")
                .HasForeignKey("CountryId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

                b.HasOne("HappyTravel.Nakijin.Data.Models.Localities.Locality", "Locality")
                .WithMany("Accommodations")
                .HasForeignKey("LocalityId")
                .OnDelete(DeleteBehavior.Restrict);

                b.HasOne("HappyTravel.Nakijin.Data.Models.LocalityZone", "LocalityZone")
                .WithMany("Accommodations")
                .HasForeignKey("LocalityZoneId")
                .OnDelete(DeleteBehavior.Restrict);

                b.Navigation("Country");

                b.Navigation("Locality");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.AccommodationUncertainMatches", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Accommodations.RichAccommodationDetails", "AccommodationToMatch")
                .WithMany("AccommodationToMatchUncertainMatches")
                .HasForeignKey("HtIdToMerge")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

                b.HasOne("HappyTravel.Nakijin.Data.Models.Accommodations.RichAccommodationDetails", "SourceAccommodation")
                .WithMany("SourceAccommodationUncertainMatches")
                .HasForeignKey("SourceHtId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

                b.Navigation("AccommodationToMatch");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.HtAccommodationMapping", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Accommodations.RichAccommodationDetails", "Accommodation")
                .WithMany("HtAccommodationMappings")
                .HasForeignKey("HtId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.Locality", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Country", "Country")
                .WithMany("Localities")
                .HasForeignKey("CountryId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.LocalityCandidate", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Country", "Country")
                .WithMany("LocalityCandidates")
                .HasForeignKey("CountryId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.LocalitySynonym", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Localities.Locality", "Locality")
                .WithMany("LocalitySynonyms")
                .HasForeignKey("LocalityId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.LocalityZone", b =>
            {
                b.HasOne("HappyTravel.Nakijin.Data.Models.Localities.Locality", "Locality")
                .WithMany("LocalityZones")
                .HasForeignKey("LocalityId")
                .OnDelete(DeleteBehavior.Restrict)
                .IsRequired();

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Accommodations.RichAccommodationDetails", b =>
            {
                b.Navigation("AccommodationToMatchUncertainMatches");

                b.Navigation("HtAccommodationMappings");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Country", b =>
            {
                b.Navigation("Accommodations");

                b.Navigation("Localities");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.Localities.Locality", b =>
            {
                b.Navigation("Accommodations");

                b.Navigation("LocalitySynonyms");

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

            modelBuilder.Entity("HappyTravel.Nakijin.Data.Models.LocalityZone", b =>
            {
                b.Navigation("Accommodations");
            });
#pragma warning restore 612, 618
        }
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
            .HasAnnotation("ProductVersion", "6.0.0")
            .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("Content.Server.Database.Admin", b =>
            {
                b.Property <Guid>("UserId")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid")
                .HasColumnName("user_id");

                b.Property <int?>("AdminRankId")
                .HasColumnType("integer")
                .HasColumnName("admin_rank_id");

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

                b.HasKey("UserId")
                .HasName("PK_admin");

                b.HasIndex("AdminRankId")
                .HasDatabaseName("IX_admin_admin_rank_id");

                b.ToTable("admin", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("admin_flag_id");

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

                b.Property <Guid>("AdminId")
                .HasColumnType("uuid")
                .HasColumnName("admin_id");

                b.Property <string>("Flag")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("flag");

                b.Property <bool>("Negative")
                .HasColumnType("boolean")
                .HasColumnName("negative");

                b.HasKey("Id")
                .HasName("PK_admin_flag");

                b.HasIndex("AdminId")
                .HasDatabaseName("IX_admin_flag_admin_id");

                b.HasIndex("Flag", "AdminId")
                .IsUnique();

                b.ToTable("admin_flag", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminLog", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("admin_log_id");

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

                b.Property <int>("RoundId")
                .HasColumnType("integer")
                .HasColumnName("round_id");

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

                b.Property <short>("Impact")
                .HasColumnType("smallint")
                .HasColumnName("impact");

                b.Property <JsonDocument>("Json")
                .IsRequired()
                .HasColumnType("jsonb")
                .HasColumnName("json");

                b.Property <string>("Message")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("message");

                b.Property <int>("Type")
                .HasColumnType("integer")
                .HasColumnName("type");

                b.HasKey("Id", "RoundId")
                .HasName("PK_admin_log");

                b.HasIndex("Date");

                b.HasIndex("Message")
                .HasAnnotation("Npgsql:TsVectorConfig", "english");

                NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN");

                b.HasIndex("RoundId")
                .HasDatabaseName("IX_admin_log_round_id");

                b.HasIndex("Type")
                .HasDatabaseName("IX_admin_log_type");

                b.ToTable("admin_log", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminLogEntity", b =>
            {
                b.Property <int>("Uid")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("uid");

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

                b.Property <int?>("AdminLogId")
                .HasColumnType("integer")
                .HasColumnName("admin_log_id");

                b.Property <int?>("AdminLogRoundId")
                .HasColumnType("integer")
                .HasColumnName("admin_log_round_id");

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

                b.HasKey("Uid")
                .HasName("PK_admin_log_entity");

                b.HasIndex("AdminLogId", "AdminLogRoundId")
                .HasDatabaseName("IX_admin_log_entity_admin_log_id_admin_log_round_id");

                b.ToTable("admin_log_entity", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b =>
            {
                b.Property <Guid>("PlayerUserId")
                .HasColumnType("uuid")
                .HasColumnName("player_user_id");

                b.Property <int>("LogId")
                .HasColumnType("integer")
                .HasColumnName("log_id");

                b.Property <int>("RoundId")
                .HasColumnType("integer")
                .HasColumnName("round_id");

                b.HasKey("PlayerUserId", "LogId", "RoundId")
                .HasName("PK_admin_log_player");

                b.HasIndex("LogId", "RoundId");

                b.ToTable("admin_log_player", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminNote", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("admin_notes_id");

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

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

                b.Property <Guid>("CreatedById")
                .HasColumnType("uuid")
                .HasColumnName("created_by_id");

                b.Property <bool>("Deleted")
                .HasColumnType("boolean")
                .HasColumnName("deleted");

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

                b.Property <Guid?>("DeletedById")
                .HasColumnType("uuid")
                .HasColumnName("deleted_by_id");

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

                b.Property <Guid>("LastEditedById")
                .HasColumnType("uuid")
                .HasColumnName("last_edited_by_id");

                b.Property <string>("Message")
                .IsRequired()
                .HasMaxLength(4096)
                .HasColumnType("character varying(4096)")
                .HasColumnName("message");

                b.Property <Guid>("PlayerUserId")
                .HasColumnType("uuid")
                .HasColumnName("player_user_id");

                b.Property <int?>("RoundId")
                .HasColumnType("integer")
                .HasColumnName("round_id");

                b.Property <bool>("ShownToPlayer")
                .HasColumnType("boolean")
                .HasColumnName("shown_to_player");

                b.HasKey("Id")
                .HasName("PK_admin_notes");

                b.HasIndex("CreatedById");

                b.HasIndex("DeletedById");

                b.HasIndex("LastEditedById");

                b.HasIndex("PlayerUserId")
                .HasDatabaseName("IX_admin_notes_player_user_id");

                b.HasIndex("RoundId")
                .HasDatabaseName("IX_admin_notes_round_id");

                b.ToTable("admin_notes", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("admin_rank_id");

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

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

                b.HasKey("Id")
                .HasName("PK_admin_rank");

                b.ToTable("admin_rank", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("admin_rank_flag_id");

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

                b.Property <int>("AdminRankId")
                .HasColumnType("integer")
                .HasColumnName("admin_rank_id");

                b.Property <string>("Flag")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("flag");

                b.HasKey("Id")
                .HasName("PK_admin_rank_flag");

                b.HasIndex("AdminRankId")
                .HasDatabaseName("IX_admin_rank_flag_admin_rank_id");

                b.HasIndex("Flag", "AdminRankId")
                .IsUnique();

                b.ToTable("admin_rank_flag", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Antag", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("antag_id");

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

                b.Property <string>("AntagName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("antag_name");

                b.Property <int>("ProfileId")
                .HasColumnType("integer")
                .HasColumnName("profile_id");

                b.HasKey("Id")
                .HasName("PK_antag");

                b.HasIndex("ProfileId", "AntagName")
                .IsUnique();

                b.ToTable("antag", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.AssignedUserId", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("assigned_user_id_id");

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

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

                b.Property <string>("UserName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("user_name");

                b.HasKey("Id")
                .HasName("PK_assigned_user_id");

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

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

                b.ToTable("assigned_user_id", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.ConnectionLog", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("connection_log_id");

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

                b.Property <IPAddress>("Address")
                .IsRequired()
                .HasColumnType("inet")
                .HasColumnName("address");

                b.Property <byte?>("Denied")
                .HasColumnType("smallint")
                .HasColumnName("denied");

                b.Property <byte[]>("HWId")
                .HasColumnType("bytea")
                .HasColumnName("hwid");

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

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

                b.Property <string>("UserName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("user_name");

                b.HasKey("Id")
                .HasName("PK_connection_log");

                b.HasIndex("UserId");

                b.ToTable("connection_log", (string)null);

                b.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address");
            });

            modelBuilder.Entity("Content.Server.Database.Job", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("job_id");

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

                b.Property <string>("JobName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("job_name");

                b.Property <int>("Priority")
                .HasColumnType("integer")
                .HasColumnName("priority");

                b.Property <int>("ProfileId")
                .HasColumnType("integer")
                .HasColumnName("profile_id");

                b.HasKey("Id")
                .HasName("PK_job");

                b.HasIndex("ProfileId")
                .HasDatabaseName("IX_job_profile_id");

                b.HasIndex("ProfileId", "JobName")
                .IsUnique();

                b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority")
                .IsUnique()
                .HasFilter("priority = 3");

                b.ToTable("job", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Player", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("player_id");

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

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

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

                b.Property <IPAddress>("LastSeenAddress")
                .IsRequired()
                .HasColumnType("inet")
                .HasColumnName("last_seen_address");

                b.Property <byte[]>("LastSeenHWId")
                .HasColumnType("bytea")
                .HasColumnName("last_seen_hwid");

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

                b.Property <string>("LastSeenUserName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("last_seen_user_name");

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

                b.HasKey("Id")
                .HasName("PK_player");

                b.HasAlternateKey("UserId")
                .HasName("ak_player_user_id");

                b.HasIndex("LastSeenUserName");

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

                b.ToTable("player", (string)null);

                b.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address");
            });

            modelBuilder.Entity("Content.Server.Database.Preference", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("preference_id");

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

                b.Property <string>("AdminOOCColor")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("admin_ooc_color");

                b.Property <int>("SelectedCharacterSlot")
                .HasColumnType("integer")
                .HasColumnName("selected_character_slot");

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

                b.HasKey("Id")
                .HasName("PK_preference");

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

                b.ToTable("preference", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Profile", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("profile_id");

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

                b.Property <int>("Age")
                .HasColumnType("integer")
                .HasColumnName("age");

                b.Property <string>("Backpack")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("backpack");

                b.Property <string>("CharacterName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("char_name");

                b.Property <string>("Clothing")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("clothing");

                b.Property <string>("EyeColor")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("eye_color");

                b.Property <string>("FacialHairColor")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("facial_hair_color");

                b.Property <string>("FacialHairName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("facial_hair_name");

                b.Property <string>("FlavorText")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("flavor_text");

                b.Property <string>("Gender")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("gender");

                b.Property <string>("HairColor")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("hair_color");

                b.Property <string>("HairName")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("hair_name");

                b.Property <JsonDocument>("Markings")
                .HasColumnType("jsonb")
                .HasColumnName("markings");

                b.Property <int>("PreferenceId")
                .HasColumnType("integer")
                .HasColumnName("preference_id");

                b.Property <int>("PreferenceUnavailable")
                .HasColumnType("integer")
                .HasColumnName("pref_unavailable");

                b.Property <string>("Sex")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("sex");

                b.Property <string>("SkinColor")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("skin_color");

                b.Property <int>("Slot")
                .HasColumnType("integer")
                .HasColumnName("slot");

                b.Property <string>("Species")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("species");

                b.HasKey("Id")
                .HasName("PK_profile");

                b.HasIndex("PreferenceId")
                .HasDatabaseName("IX_profile_preference_id");

                b.HasIndex("Slot", "PreferenceId")
                .IsUnique();

                b.ToTable("profile", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Round", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("round_id");

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

                b.Property <int>("ServerId")
                .HasColumnType("integer")
                .HasColumnName("server_id");

                b.HasKey("Id")
                .HasName("PK_round");

                b.HasIndex("ServerId")
                .HasDatabaseName("IX_round_server_id");

                b.ToTable("round", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Server", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("server_id");

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

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

                b.HasKey("Id")
                .HasName("PK_server");

                b.ToTable("server", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.ServerBan", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("server_ban_id");

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

                b.Property <ValueTuple <IPAddress, int>?>("Address")
                .HasColumnType("inet")
                .HasColumnName("address");

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

                b.Property <Guid?>("BanningAdmin")
                .HasColumnType("uuid")
                .HasColumnName("banning_admin");

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

                b.Property <byte[]>("HWId")
                .HasColumnType("bytea")
                .HasColumnName("hwid");

                b.Property <string>("Reason")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("reason");

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

                b.HasKey("Id")
                .HasName("PK_server_ban");

                b.HasIndex("Address");

                b.HasIndex("UserId");

                b.ToTable("server_ban", (string)null);

                b.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address");

                b.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR user_id IS NOT NULL OR hwid IS NOT NULL");
            });

            modelBuilder.Entity("Content.Server.Database.ServerBanHit", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("server_ban_hit_id");

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

                b.Property <int>("BanId")
                .HasColumnType("integer")
                .HasColumnName("ban_id");

                b.Property <int>("ConnectionId")
                .HasColumnType("integer")
                .HasColumnName("connection_id");

                b.HasKey("Id")
                .HasName("PK_server_ban_hit");

                b.HasIndex("BanId")
                .HasDatabaseName("IX_server_ban_hit_ban_id");

                b.HasIndex("ConnectionId")
                .HasDatabaseName("IX_server_ban_hit_connection_id");

                b.ToTable("server_ban_hit", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("server_role_ban_id");

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

                b.Property <ValueTuple <IPAddress, int>?>("Address")
                .HasColumnType("inet")
                .HasColumnName("address");

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

                b.Property <Guid?>("BanningAdmin")
                .HasColumnType("uuid")
                .HasColumnName("banning_admin");

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

                b.Property <byte[]>("HWId")
                .HasColumnType("bytea")
                .HasColumnName("hwid");

                b.Property <string>("Reason")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("reason");

                b.Property <string>("RoleId")
                .IsRequired()
                .HasColumnType("text")
                .HasColumnName("role_id");

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

                b.HasKey("Id")
                .HasName("PK_server_role_ban");

                b.HasIndex("Address");

                b.HasIndex("UserId");

                b.ToTable("server_role_ban", (string)null);

                b.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address");

                b.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR user_id IS NOT NULL OR hwid IS NOT NULL");
            });

            modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("role_unban_id");

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

                b.Property <int>("BanId")
                .HasColumnType("integer")
                .HasColumnName("ban_id");

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

                b.Property <Guid?>("UnbanningAdmin")
                .HasColumnType("uuid")
                .HasColumnName("unbanning_admin");

                b.HasKey("Id")
                .HasName("PK_server_role_unban");

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

                b.ToTable("server_role_unban", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.ServerUnban", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("unban_id");

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

                b.Property <int>("BanId")
                .HasColumnType("integer")
                .HasColumnName("ban_id");

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

                b.Property <Guid?>("UnbanningAdmin")
                .HasColumnType("uuid")
                .HasColumnName("unbanning_admin");

                b.HasKey("Id")
                .HasName("PK_server_unban");

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

                b.ToTable("server_unban", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("uploaded_resource_log_id");

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

                b.Property <byte[]>("Data")
                .IsRequired()
                .HasColumnType("bytea")
                .HasColumnName("data");

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

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

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

                b.HasKey("Id")
                .HasName("PK_uploaded_resource_log");

                b.ToTable("uploaded_resource_log", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Whitelist", b =>
            {
                b.Property <Guid>("UserId")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid")
                .HasColumnName("user_id");

                b.HasKey("UserId")
                .HasName("PK_whitelist");

                b.ToTable("whitelist", (string)null);
            });

            modelBuilder.Entity("PlayerRound", b =>
            {
                b.Property <int>("PlayersId")
                .HasColumnType("integer")
                .HasColumnName("players_id");

                b.Property <int>("RoundsId")
                .HasColumnType("integer")
                .HasColumnName("rounds_id");

                b.HasKey("PlayersId", "RoundsId")
                .HasName("PK_player_round");

                b.HasIndex("RoundsId")
                .HasDatabaseName("IX_player_round_rounds_id");

                b.ToTable("player_round", (string)null);
            });

            modelBuilder.Entity("Content.Server.Database.Admin", b =>
            {
                b.HasOne("Content.Server.Database.AdminRank", "AdminRank")
                .WithMany("Admins")
                .HasForeignKey("AdminRankId")
                .OnDelete(DeleteBehavior.SetNull)
                .HasConstraintName("FK_admin_admin_rank_admin_rank_id");

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

            modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
            {
                b.HasOne("Content.Server.Database.Admin", "Admin")
                .WithMany("Flags")
                .HasForeignKey("AdminId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_flag_admin_admin_id");

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

            modelBuilder.Entity("Content.Server.Database.AdminLog", b =>
            {
                b.HasOne("Content.Server.Database.Round", "Round")
                .WithMany("AdminLogs")
                .HasForeignKey("RoundId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_log_round_round_id");

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

            modelBuilder.Entity("Content.Server.Database.AdminLogEntity", b =>
            {
                b.HasOne("Content.Server.Database.AdminLog", null)
                .WithMany("Entities")
                .HasForeignKey("AdminLogId", "AdminLogRoundId")
                .HasConstraintName("FK_admin_log_entity_admin_log_admin_log_id_admin_log_round_id");
            });

            modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b =>
            {
                b.HasOne("Content.Server.Database.Player", "Player")
                .WithMany("AdminLogs")
                .HasForeignKey("PlayerUserId")
                .HasPrincipalKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_log_player_player_player_user_id");

                b.HasOne("Content.Server.Database.AdminLog", "Log")
                .WithMany("Players")
                .HasForeignKey("LogId", "RoundId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_log_player_admin_log_log_id_round_id");

                b.Navigation("Log");

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

            modelBuilder.Entity("Content.Server.Database.AdminNote", b =>
            {
                b.HasOne("Content.Server.Database.Player", "CreatedBy")
                .WithMany("AdminNotesCreated")
                .HasForeignKey("CreatedById")
                .HasPrincipalKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_notes_player_created_by_id");

                b.HasOne("Content.Server.Database.Player", "DeletedBy")
                .WithMany("AdminNotesDeleted")
                .HasForeignKey("DeletedById")
                .HasPrincipalKey("UserId")
                .HasConstraintName("FK_admin_notes_player_deleted_by_id");

                b.HasOne("Content.Server.Database.Player", "LastEditedBy")
                .WithMany("AdminNotesLastEdited")
                .HasForeignKey("LastEditedById")
                .HasPrincipalKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_notes_player_last_edited_by_id");

                b.HasOne("Content.Server.Database.Player", "Player")
                .WithMany("AdminNotesReceived")
                .HasForeignKey("PlayerUserId")
                .HasPrincipalKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_notes_player_player_user_id");

                b.HasOne("Content.Server.Database.Round", "Round")
                .WithMany()
                .HasForeignKey("RoundId")
                .HasConstraintName("FK_admin_notes_round_round_id");

                b.Navigation("CreatedBy");

                b.Navigation("DeletedBy");

                b.Navigation("LastEditedBy");

                b.Navigation("Player");

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

            modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
            {
                b.HasOne("Content.Server.Database.AdminRank", "Rank")
                .WithMany("Flags")
                .HasForeignKey("AdminRankId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id");

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

            modelBuilder.Entity("Content.Server.Database.Antag", b =>
            {
                b.HasOne("Content.Server.Database.Profile", "Profile")
                .WithMany("Antags")
                .HasForeignKey("ProfileId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_antag_profile_profile_id");

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

            modelBuilder.Entity("Content.Server.Database.Job", b =>
            {
                b.HasOne("Content.Server.Database.Profile", "Profile")
                .WithMany("Jobs")
                .HasForeignKey("ProfileId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_job_profile_profile_id");

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

            modelBuilder.Entity("Content.Server.Database.Profile", b =>
            {
                b.HasOne("Content.Server.Database.Preference", "Preference")
                .WithMany("Profiles")
                .HasForeignKey("PreferenceId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_profile_preference_preference_id");

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

            modelBuilder.Entity("Content.Server.Database.Round", b =>
            {
                b.HasOne("Content.Server.Database.Server", "Server")
                .WithMany("Rounds")
                .HasForeignKey("ServerId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_round_server_server_id");

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

            modelBuilder.Entity("Content.Server.Database.ServerBanHit", b =>
            {
                b.HasOne("Content.Server.Database.ServerBan", "Ban")
                .WithMany("BanHits")
                .HasForeignKey("BanId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_server_ban_hit_server_ban_ban_id");

                b.HasOne("Content.Server.Database.ConnectionLog", "Connection")
                .WithMany("BanHits")
                .HasForeignKey("ConnectionId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_server_ban_hit_connection_log_connection_id");

                b.Navigation("Ban");

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

            modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b =>
            {
                b.HasOne("Content.Server.Database.ServerRoleBan", "Ban")
                .WithOne("Unban")
                .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id");

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

            modelBuilder.Entity("Content.Server.Database.ServerUnban", b =>
            {
                b.HasOne("Content.Server.Database.ServerBan", "Ban")
                .WithOne("Unban")
                .HasForeignKey("Content.Server.Database.ServerUnban", "BanId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_server_unban_server_ban_ban_id");

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

            modelBuilder.Entity("PlayerRound", b =>
            {
                b.HasOne("Content.Server.Database.Player", null)
                .WithMany()
                .HasForeignKey("PlayersId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_player_round_player_players_id");

                b.HasOne("Content.Server.Database.Round", null)
                .WithMany()
                .HasForeignKey("RoundsId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("FK_player_round_round_rounds_id");
            });

            modelBuilder.Entity("Content.Server.Database.Admin", b =>
            {
                b.Navigation("Flags");
            });

            modelBuilder.Entity("Content.Server.Database.AdminLog", b =>
            {
                b.Navigation("Entities");

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

            modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
            {
                b.Navigation("Admins");

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

            modelBuilder.Entity("Content.Server.Database.ConnectionLog", b =>
            {
                b.Navigation("BanHits");
            });

            modelBuilder.Entity("Content.Server.Database.Player", b =>
            {
                b.Navigation("AdminLogs");

                b.Navigation("AdminNotesCreated");

                b.Navigation("AdminNotesDeleted");

                b.Navigation("AdminNotesLastEdited");

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

            modelBuilder.Entity("Content.Server.Database.Preference", b =>
            {
                b.Navigation("Profiles");
            });

            modelBuilder.Entity("Content.Server.Database.Profile", b =>
            {
                b.Navigation("Antags");

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

            modelBuilder.Entity("Content.Server.Database.Round", b =>
            {
                b.Navigation("AdminLogs");
            });

            modelBuilder.Entity("Content.Server.Database.Server", b =>
            {
                b.Navigation("Rounds");
            });

            modelBuilder.Entity("Content.Server.Database.ServerBan", b =>
            {
                b.Navigation("BanHits");

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

            modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b =>
            {
                b.Navigation("Unban");
            });
#pragma warning restore 612, 618
        }
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
            .HasAnnotation("ProductVersion", "6.0.0")
            .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.AllowedMediaType", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

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

                b.HasKey("Id");

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

                b.ToTable("MediaTypes");

                b.HasData(
                    new
                {
                    Id        = 1,
                    Extension = "jpg",
                    MediaType = "image/jpeg"
                },
                    new
                {
                    Id        = 2,
                    Extension = "png",
                    MediaType = "image/png"
                });
            });

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Category", b =>
            {
                b.Property <Guid>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid");

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

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

                b.HasKey("Id");

                b.HasIndex("ParentId");

                b.HasIndex("Name", "ParentId")
                .IsUnique();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Context", b =>
            {
                b.Property <Guid>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid");

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

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

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

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

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

                b.HasKey("Id");

                b.HasIndex("MediaTypeId");

                b.HasIndex("ProjectId", "CorrelationId")
                .IsUnique();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.NpgsqlQuery", b =>
            {
                b.Property <NpgsqlTsVector>("Vec")
                .IsRequired()
                .HasColumnType("tsvector");

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Project", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.HasKey("Id");

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

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Translation", b =>
            {
                b.Property <Guid>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid");

                b.Property <string>("AssociatedData")
                .HasColumnType("jsonb");

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

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

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

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

                b.Property <NotesCollection>("Notes")
                .HasColumnType("jsonb");

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

                b.Property <NpgsqlTsVector>("SearchVector")
                .IsRequired()
                .HasColumnType("tsvector");

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

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

                b.HasKey("Id");

                b.HasIndex("CategoryId");

                b.HasIndex("CorrelationId");

                b.HasIndex("SearchVector");

                NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "GIN");

                b.HasIndex("ParentId", "CorrelationId")
                .IsUnique();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.User", b =>
            {
                b.Property <string>("Id")
                .HasColumnType("text");

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

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

                b.Property <string>("Email")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)");

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

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

                b.Property <DateTimeOffset?>("LockoutEnd")
                .HasColumnType("timestamp with time zone");

                b.Property <string>("NormalizedEmail")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)");

                b.Property <string>("NormalizedUserName")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)");

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

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

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

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

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

                b.Property <string>("UserName")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)");

                b.HasKey("Id");

                b.HasIndex("NormalizedEmail")
                .HasDatabaseName("EmailIndex");

                b.HasIndex("NormalizedUserName")
                .IsUnique()
                .HasDatabaseName("UserNameIndex");

                b.ToTable("AspNetUsers", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
            {
                b.Property <string>("Id")
                .HasColumnType("text");

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

                b.Property <string>("Name")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)");

                b.Property <string>("NormalizedName")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)");

                b.HasKey("Id");

                b.HasIndex("NormalizedName")
                .IsUnique()
                .HasDatabaseName("RoleNameIndex");

                b.ToTable("AspNetRoles", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

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

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

                b.HasKey("Id");

                b.HasIndex("RoleId");

                b.ToTable("AspNetRoleClaims", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

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

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

                b.HasKey("Id");

                b.HasIndex("UserId");

                b.ToTable("AspNetUserClaims", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
            {
                b.Property <string>("LoginProvider")
                .HasMaxLength(128)
                .HasColumnType("character varying(128)");

                b.Property <string>("ProviderKey")
                .HasMaxLength(128)
                .HasColumnType("character varying(128)");

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

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

                b.HasKey("LoginProvider", "ProviderKey");

                b.HasIndex("UserId");

                b.ToTable("AspNetUserLogins", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
            {
                b.Property <string>("UserId")
                .HasColumnType("text");

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

                b.HasKey("UserId", "RoleId");

                b.HasIndex("RoleId");

                b.ToTable("AspNetUserRoles", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
            {
                b.Property <string>("UserId")
                .HasColumnType("text");

                b.Property <string>("LoginProvider")
                .HasMaxLength(128)
                .HasColumnType("character varying(128)");

                b.Property <string>("Name")
                .HasMaxLength(128)
                .HasColumnType("character varying(128)");

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

                b.HasKey("UserId", "LoginProvider", "Name");

                b.ToTable("AspNetUserTokens", (string)null);
            });

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Category", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.Project", "Parent")
                .WithMany("Categories")
                .HasForeignKey("ParentId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Context", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.AllowedMediaType", "MediaType")
                .WithMany()
                .HasForeignKey("MediaTypeId");

                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.Project", "Project")
                .WithMany()
                .HasForeignKey("ProjectId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();

                b.Navigation("MediaType");

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

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Translation", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.Category", "Category")
                .WithMany("Translations")
                .HasForeignKey("CategoryId")
                .OnDelete(DeleteBehavior.SetNull);

                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.Project", "Parent")
                .WithMany("Translations")
                .HasForeignKey("ParentId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();

                b.Navigation("Category");

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

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
            {
                b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
                .WithMany()
                .HasForeignKey("RoleId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
            {
                b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
                .WithMany()
                .HasForeignKey("RoleId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();

                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.DatabaseModels.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();
            });

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Category", b =>
            {
                b.Navigation("Translations");
            });

            modelBuilder.Entity("DidacticalEnigma.Mem.DatabaseModels.Project", b =>
            {
                b.Navigation("Categories");

                b.Navigation("Translations");
            });
#pragma warning restore 612, 618
        }
Beispiel #4
0
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
            .HasAnnotation("ProductVersion", "6.0.0")
            .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.AllowedMediaType", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

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

                b.HasKey("Id");

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

                b.ToTable("MediaTypes");

                b.HasData(
                    new
                {
                    Id        = 1,
                    Extension = "jpg",
                    MediaType = "image/jpeg"
                },
                    new
                {
                    Id        = 2,
                    Extension = "png",
                    MediaType = "image/png"
                });
            });

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.Context", b =>
            {
                b.Property <Guid>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid");

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

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

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

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

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

                b.HasKey("Id");

                b.HasIndex("MediaTypeId");

                b.HasIndex("ProjectId", "CorrelationId")
                .IsUnique();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.NpgsqlQuery", b =>
            {
                b.Property <NpgsqlTsVector>("Vec")
                .IsRequired()
                .HasColumnType("tsvector");

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

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.Project", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer");

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

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

                b.HasKey("Id");

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

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

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.Translation", b =>
            {
                b.Property <Guid>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("uuid");

                b.Property <string>("AssociatedData")
                .HasColumnType("jsonb");

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

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

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

                b.Property <NotesCollection>("Notes")
                .HasColumnType("jsonb");

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

                b.Property <NpgsqlTsVector>("SearchVector")
                .IsRequired()
                .HasColumnType("tsvector");

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

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

                b.HasKey("Id");

                b.HasIndex("CorrelationId");

                b.HasIndex("SearchVector");

                NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "GIN");

                b.HasIndex("ParentId", "CorrelationId")
                .IsUnique();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.Context", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.Translation.StoredModels.AllowedMediaType", "MediaType")
                .WithMany()
                .HasForeignKey("MediaTypeId");

                b.HasOne("DidacticalEnigma.Mem.Translation.StoredModels.Project", "Project")
                .WithMany()
                .HasForeignKey("ProjectId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();

                b.Navigation("MediaType");

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

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.Translation", b =>
            {
                b.HasOne("DidacticalEnigma.Mem.Translation.StoredModels.Project", "Parent")
                .WithMany("Translations")
                .HasForeignKey("ParentId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired();

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

            modelBuilder.Entity("DidacticalEnigma.Mem.Translation.StoredModels.Project", b =>
            {
                b.Navigation("Translations");
            });
#pragma warning restore 612, 618
        }
        protected override void BuildModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
            .HasAnnotation("ProductVersion", "6.0.0")
            .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("Dive.App.Models.Comment", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

                b.Property <string>("Body")
                .HasColumnType("text")
                .HasColumnName("body");

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

                b.Property <int?>("PostId")
                .HasColumnType("integer")
                .HasColumnName("post_id");

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

                b.Property <int?>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.HasKey("Id")
                .HasName("pk_comments");

                b.HasIndex("PostId")
                .HasDatabaseName("ix_comments_post_id");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_comments_user_id");

                b.ToTable("comments", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.Post", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

                b.Property <int?>("AcceptedAnswerId")
                .HasColumnType("integer")
                .HasColumnName("accepted_answer_id");

                b.Property <int>("AnwsersCount")
                .HasColumnType("integer")
                .HasColumnName("anwsers_count");

                b.Property <string>("Body")
                .HasColumnType("text")
                .HasColumnName("body");

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

                b.Property <int?>("ParentId")
                .HasColumnType("integer")
                .HasColumnName("parent_id");

                b.Property <NpgsqlTsVector>("SearchVector")
                .ValueGeneratedOnAddOrUpdate()
                .HasColumnType("tsvector")
                .HasColumnName("search_vector")
                .HasAnnotation("Npgsql:TsVectorConfig", "english")
                .HasAnnotation("Npgsql:TsVectorProperties", new[] { "Title", "Body" });

                b.Property <string>("Title")
                .HasMaxLength(300)
                .HasColumnType("character varying(300)")
                .HasColumnName("title");

                b.Property <int>("Type")
                .HasColumnType("integer")
                .HasColumnName("type");

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

                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.Property <int>("ViewsCount")
                .HasColumnType("integer")
                .HasColumnName("views_count");

                b.Property <int>("VoteScore")
                .HasColumnType("integer")
                .HasColumnName("vote_score");

                b.HasKey("Id")
                .HasName("pk_posts");

                b.HasIndex("AcceptedAnswerId")
                .IsUnique()
                .HasDatabaseName("ix_posts_accepted_answer_id");

                b.HasIndex("ParentId")
                .HasDatabaseName("ix_posts_parent_id");

                b.HasIndex("SearchVector")
                .HasDatabaseName("ix_posts_search_vector");

                NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "GIN");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_posts_user_id");

                b.ToTable("posts", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.Role", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

                b.Property <string>("ConcurrencyStamp")
                .IsConcurrencyToken()
                .HasColumnType("text")
                .HasColumnName("concurrency_stamp");

                b.Property <string>("Name")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("name");

                b.Property <string>("NormalizedName")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("normalized_name");

                b.HasKey("Id")
                .HasName("pk_roles");

                b.HasIndex("NormalizedName")
                .IsUnique()
                .HasDatabaseName("RoleNameIndex");

                b.ToTable("roles", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.Tag", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

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

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

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

                b.HasKey("Id")
                .HasName("pk_tags");

                b.ToTable("tags", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.User", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

                b.Property <int>("AccessFailedCount")
                .HasColumnType("integer")
                .HasColumnName("access_failed_count");

                b.Property <string>("ConcurrencyStamp")
                .IsConcurrencyToken()
                .HasColumnType("text")
                .HasColumnName("concurrency_stamp");

                b.Property <int>("CorrectAnswersCount")
                .HasColumnType("integer")
                .HasColumnName("correct_answers_count");

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

                b.Property <string>("Email")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("email");

                b.Property <bool>("EmailConfirmed")
                .HasColumnType("boolean")
                .HasColumnName("email_confirmed");

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

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

                b.Property <bool>("LockoutEnabled")
                .HasColumnType("boolean")
                .HasColumnName("lockout_enabled");

                b.Property <DateTimeOffset?>("LockoutEnd")
                .HasColumnType("timestamp with time zone")
                .HasColumnName("lockout_end");

                b.Property <string>("NormalizedEmail")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("normalized_email");

                b.Property <string>("NormalizedUserName")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("normalized_user_name");

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

                b.Property <int>("QuestionsCount")
                .HasColumnType("integer")
                .HasColumnName("questions_count");

                b.Property <string>("SecurityStamp")
                .HasColumnType("text")
                .HasColumnName("security_stamp");

                b.Property <string>("UserName")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("user_name");

                b.HasKey("Id")
                .HasName("pk_users");

                b.HasIndex("NormalizedEmail")
                .HasDatabaseName("EmailIndex");

                b.HasIndex("NormalizedUserName")
                .IsUnique()
                .HasDatabaseName("UserNameIndex");

                b.ToTable("users", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.View", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

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

                b.Property <int>("PostId")
                .HasColumnType("integer")
                .HasColumnName("post_id");

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

                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.HasKey("Id")
                .HasName("pk_views");

                b.HasIndex("PostId")
                .HasDatabaseName("ix_views_post_id");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_views_user_id");

                b.ToTable("views", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.Vote", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

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

                b.Property <int>("PostId")
                .HasColumnType("integer")
                .HasColumnName("post_id");

                b.Property <int>("Type")
                .HasColumnType("integer")
                .HasColumnName("type");

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

                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.HasKey("Id")
                .HasName("pk_votes");

                b.HasIndex("PostId")
                .HasDatabaseName("ix_votes_post_id");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_votes_user_id");

                b.ToTable("votes", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<int>", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

                b.Property <string>("ClaimType")
                .HasColumnType("text")
                .HasColumnName("claim_type");

                b.Property <string>("ClaimValue")
                .HasColumnType("text")
                .HasColumnName("claim_value");

                b.Property <int>("RoleId")
                .HasColumnType("integer")
                .HasColumnName("role_id");

                b.HasKey("Id")
                .HasName("pk_role_claims");

                b.HasIndex("RoleId")
                .HasDatabaseName("ix_role_claims_role_id");

                b.ToTable("role_claims", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<int>", b =>
            {
                b.Property <int>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("integer")
                .HasColumnName("id");

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

                b.Property <string>("ClaimType")
                .HasColumnType("text")
                .HasColumnName("claim_type");

                b.Property <string>("ClaimValue")
                .HasColumnType("text")
                .HasColumnName("claim_value");

                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.HasKey("Id")
                .HasName("pk_user_claims");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_user_claims_user_id");

                b.ToTable("user_claims", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<int>", b =>
            {
                b.Property <string>("LoginProvider")
                .HasColumnType("text")
                .HasColumnName("login_provider");

                b.Property <string>("ProviderKey")
                .HasColumnType("text")
                .HasColumnName("provider_key");

                b.Property <string>("ProviderDisplayName")
                .HasColumnType("text")
                .HasColumnName("provider_display_name");

                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.HasKey("LoginProvider", "ProviderKey")
                .HasName("pk_user_logins");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_user_logins_user_id");

                b.ToTable("user_logins", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<int>", b =>
            {
                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.Property <int>("RoleId")
                .HasColumnType("integer")
                .HasColumnName("role_id");

                b.HasKey("UserId", "RoleId")
                .HasName("pk_user_roles");

                b.HasIndex("RoleId")
                .HasDatabaseName("ix_user_roles_role_id");

                b.ToTable("user_roles", (string)null);
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<int>", b =>
            {
                b.Property <int>("UserId")
                .HasColumnType("integer")
                .HasColumnName("user_id");

                b.Property <string>("LoginProvider")
                .HasColumnType("text")
                .HasColumnName("login_provider");

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

                b.Property <string>("Value")
                .HasColumnType("text")
                .HasColumnName("value");

                b.HasKey("UserId", "LoginProvider", "Name")
                .HasName("pk_user_tokens");

                b.ToTable("user_tokens", (string)null);
            });

            modelBuilder.Entity("PostTag", b =>
            {
                b.Property <int>("PostsId")
                .HasColumnType("integer")
                .HasColumnName("posts_id");

                b.Property <int>("TagsId")
                .HasColumnType("integer")
                .HasColumnName("tags_id");

                b.HasKey("PostsId", "TagsId")
                .HasName("pk_post_tag");

                b.HasIndex("TagsId")
                .HasDatabaseName("ix_post_tag_tags_id");

                b.ToTable("post_tag", (string)null);
            });

            modelBuilder.Entity("Dive.App.Models.Comment", b =>
            {
                b.HasOne("Dive.App.Models.Post", "Post")
                .WithMany("Comments")
                .HasForeignKey("PostId")
                .HasConstraintName("fk_comments_posts_post_id");

                b.HasOne("Dive.App.Models.User", "User")
                .WithMany()
                .HasForeignKey("UserId")
                .HasConstraintName("fk_comments_users_user_id");

                b.Navigation("Post");

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

            modelBuilder.Entity("Dive.App.Models.Post", b =>
            {
                b.HasOne("Dive.App.Models.Post", "AcceptedAnswer")
                .WithOne()
                .HasForeignKey("Dive.App.Models.Post", "AcceptedAnswerId")
                .OnDelete(DeleteBehavior.Restrict)
                .HasConstraintName("fk_posts_posts_accepted_answer_id");

                b.HasOne("Dive.App.Models.Post", "Parent")
                .WithMany("Anwsers")
                .HasForeignKey("ParentId")
                .OnDelete(DeleteBehavior.Restrict)
                .HasConstraintName("fk_posts_posts_parent_id");

                b.HasOne("Dive.App.Models.User", "User")
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_posts_users_user_id");

                b.Navigation("AcceptedAnswer");

                b.Navigation("Parent");

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

            modelBuilder.Entity("Dive.App.Models.View", b =>
            {
                b.HasOne("Dive.App.Models.Post", "Post")
                .WithMany("Views")
                .HasForeignKey("PostId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_views_posts_post_id");

                b.HasOne("Dive.App.Models.User", "User")
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_views_users_user_id");

                b.Navigation("Post");

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

            modelBuilder.Entity("Dive.App.Models.Vote", b =>
            {
                b.HasOne("Dive.App.Models.Post", "Post")
                .WithMany("Votes")
                .HasForeignKey("PostId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_votes_posts_post_id");

                b.HasOne("Dive.App.Models.User", "User")
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_votes_users_user_id");

                b.Navigation("Post");

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

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<int>", b =>
            {
                b.HasOne("Dive.App.Models.Role", null)
                .WithMany()
                .HasForeignKey("RoleId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_role_claims_roles_role_id");
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<int>", b =>
            {
                b.HasOne("Dive.App.Models.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_user_claims_users_user_id");
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<int>", b =>
            {
                b.HasOne("Dive.App.Models.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_user_logins_users_user_id");
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<int>", b =>
            {
                b.HasOne("Dive.App.Models.Role", null)
                .WithMany()
                .HasForeignKey("RoleId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_user_roles_roles_role_id");

                b.HasOne("Dive.App.Models.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_user_roles_users_user_id");
            });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<int>", b =>
            {
                b.HasOne("Dive.App.Models.User", null)
                .WithMany()
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_user_tokens_users_user_id");
            });

            modelBuilder.Entity("PostTag", b =>
            {
                b.HasOne("Dive.App.Models.Post", null)
                .WithMany()
                .HasForeignKey("PostsId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_post_tag_posts_posts_id");

                b.HasOne("Dive.App.Models.Tag", null)
                .WithMany()
                .HasForeignKey("TagsId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_post_tag_tags_tags_id");
            });

            modelBuilder.Entity("Dive.App.Models.Post", b =>
            {
                b.Navigation("Anwsers");

                b.Navigation("Comments");

                b.Navigation("Views");

                b.Navigation("Votes");
            });
#pragma warning restore 612, 618
        }
Beispiel #6
0
        protected override void BuildModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
            .HasAnnotation("ProductVersion", "6.0.0")
            .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "uuid-ossp");
            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("Audiochan.Domain.Entities.Audio", b =>
            {
                b.Property <long>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("bigint")
                .HasColumnName("id");

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

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

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

                b.Property <decimal>("Duration")
                .HasColumnType("numeric")
                .HasColumnName("duration");

                b.Property <string>("File")
                .IsRequired()
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("file");

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

                b.Property <string>("Picture")
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("picture");

                b.Property <long>("Size")
                .HasColumnType("bigint")
                .HasColumnName("size");

                b.Property <List <string> >("Tags")
                .IsRequired()
                .HasColumnType("text[]")
                .HasColumnName("tags");

                b.Property <string>("Title")
                .IsRequired()
                .HasMaxLength(100)
                .HasColumnType("character varying(100)")
                .HasColumnName("title");

                b.Property <long>("UserId")
                .HasColumnType("bigint")
                .HasColumnName("user_id");

                b.HasKey("Id")
                .HasName("pk_audios");

                b.HasIndex("Created")
                .HasDatabaseName("ix_audios_created");

                b.HasIndex("Tags")
                .HasDatabaseName("ix_audios_tags");

                NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Tags"), "GIN");

                b.HasIndex("Title")
                .HasDatabaseName("ix_audios_title");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_audios_user_id");

                b.ToTable("audios", (string)null);
            });

            modelBuilder.Entity("Audiochan.Domain.Entities.FavoriteAudio", b =>
            {
                b.Property <long>("AudioId")
                .HasColumnType("bigint")
                .HasColumnName("audio_id");

                b.Property <long>("UserId")
                .HasColumnType("bigint")
                .HasColumnName("user_id");

                b.Property <long?>("AudioId1")
                .HasColumnType("bigint")
                .HasColumnName("audio_id1");

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

                b.HasKey("AudioId", "UserId")
                .HasName("pk_favorite_audios");

                b.HasIndex("AudioId1")
                .HasDatabaseName("ix_favorite_audios_audio_id1");

                b.HasIndex("UserId")
                .HasDatabaseName("ix_favorite_audios_user_id");

                b.ToTable("favorite_audios", (string)null);
            });

            modelBuilder.Entity("Audiochan.Domain.Entities.FollowedUser", b =>
            {
                b.Property <long>("ObserverId")
                .HasColumnType("bigint")
                .HasColumnName("observer_id");

                b.Property <long>("TargetId")
                .HasColumnType("bigint")
                .HasColumnName("target_id");

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

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

                b.HasKey("ObserverId", "TargetId")
                .HasName("pk_followed_users");

                b.HasIndex("FollowedDate")
                .HasDatabaseName("ix_followed_users_followed_date");

                b.HasIndex("TargetId")
                .HasDatabaseName("ix_followed_users_target_id");

                b.ToTable("followed_users", (string)null);
            });

            modelBuilder.Entity("Audiochan.Domain.Entities.User", b =>
            {
                b.Property <long>("Id")
                .ValueGeneratedOnAdd()
                .HasColumnType("bigint")
                .HasColumnName("id");

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

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

                b.Property <string>("Email")
                .IsRequired()
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("email");

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

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

                b.Property <string>("Picture")
                .HasColumnType("text")
                .HasColumnName("picture");

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

                b.Property <string>("UserName")
                .IsRequired()
                .HasMaxLength(256)
                .HasColumnType("character varying(256)")
                .HasColumnName("user_name");

                b.HasKey("Id")
                .HasName("pk_users");

                b.HasIndex("Email")
                .IsUnique()
                .HasDatabaseName("ix_users_email");

                b.HasIndex("UserName")
                .IsUnique()
                .HasDatabaseName("ix_users_user_name");

                b.ToTable("users", (string)null);
            });

            modelBuilder.Entity("Audiochan.Domain.Entities.Audio", b =>
            {
                b.HasOne("Audiochan.Domain.Entities.User", "User")
                .WithMany("Audios")
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_audios_users_user_id");

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

            modelBuilder.Entity("Audiochan.Domain.Entities.FavoriteAudio", b =>
            {
                b.HasOne("Audiochan.Domain.Entities.Audio", "Audio")
                .WithMany()
                .HasForeignKey("AudioId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_favorite_audios_audios_audio_id");

                b.HasOne("Audiochan.Domain.Entities.Audio", null)
                .WithMany("FavoriteAudios")
                .HasForeignKey("AudioId1")
                .HasConstraintName("fk_favorite_audios_audios_audio_id1");

                b.HasOne("Audiochan.Domain.Entities.User", "User")
                .WithMany("FavoriteAudios")
                .HasForeignKey("UserId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_favorite_audios_users_user_id");

                b.Navigation("Audio");

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

            modelBuilder.Entity("Audiochan.Domain.Entities.FollowedUser", b =>
            {
                b.HasOne("Audiochan.Domain.Entities.User", "Observer")
                .WithMany("Followings")
                .HasForeignKey("ObserverId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_followed_users_users_observer_id");

                b.HasOne("Audiochan.Domain.Entities.User", "Target")
                .WithMany("Followers")
                .HasForeignKey("TargetId")
                .OnDelete(DeleteBehavior.Cascade)
                .IsRequired()
                .HasConstraintName("fk_followed_users_users_target_id");

                b.Navigation("Observer");

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

            modelBuilder.Entity("Audiochan.Domain.Entities.Audio", b =>
            {
                b.Navigation("FavoriteAudios");
            });

            modelBuilder.Entity("Audiochan.Domain.Entities.User", b =>
            {
                b.Navigation("Audios");

                b.Navigation("FavoriteAudios");

                b.Navigation("Followers");

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