< Summary - Heimdall API

Line coverage
100%
Covered lines: 1407
Uncovered lines: 0
Coverable lines: 1407
Total lines: 1500
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
100%
Covered methods: 3
Fully covered methods: 3
Total methods: 3
Method coverage: 100%
Full method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: Up(...)100%11100%
File 1: Down(...)100%11100%
File 2: BuildTargetModel(...)100%11100%

File(s)

/home/ci/agent/workspace/heimdall-api-docs_main/app/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20261015221314_AddAccountEmailBudget.cs

#LineLine coverage
 1using System;
 2using Microsoft.EntityFrameworkCore.Migrations;
 3
 4#nullable disable
 5
 6namespace ArturRios.Heimdall.Data.Migrations
 7{
 8    /// <summary>
 9    ///     Adds the per-person account-email budget to <c>heimdall.person</c> (FR-PE-16): how many
 10    ///     account emails the person's own requests had sent in the current one-day window, when that
 11    ///     window ends, and when the last was sent, which the cooldown counts from.
 12    /// </summary>
 13    /// <remarks>
 14    ///     Every existing row starts with nothing sent and no window. Like the factor budgets, the
 15    ///     columns are written only by targeted writes, never by a whole-row save.
 16    /// </remarks>
 17    public partial class AddAccountEmailBudget : Migration
 18    {
 19        /// <inheritdoc />
 20        protected override void Up(MigrationBuilder migrationBuilder)
 21        {
 1922            migrationBuilder.AddColumn<DateTime>(
 1923                name: "account_email_last_sent_at",
 1924                schema: "heimdall",
 1925                table: "person",
 1926                type: "timestamp with time zone",
 1927                nullable: true);
 28
 1929            migrationBuilder.AddColumn<DateTime>(
 1930                name: "account_email_window_ends_at",
 1931                schema: "heimdall",
 1932                table: "person",
 1933                type: "timestamp with time zone",
 1934                nullable: true);
 35
 1936            migrationBuilder.AddColumn<int>(
 1937                name: "account_emails_sent",
 1938                schema: "heimdall",
 1939                table: "person",
 1940                type: "integer",
 1941                nullable: false,
 1942                defaultValue: 0);
 1943        }
 44
 45        /// <inheritdoc />
 46        protected override void Down(MigrationBuilder migrationBuilder)
 47        {
 148            migrationBuilder.DropColumn(
 149                name: "account_email_last_sent_at",
 150                schema: "heimdall",
 151                table: "person");
 52
 153            migrationBuilder.DropColumn(
 154                name: "account_email_window_ends_at",
 155                schema: "heimdall",
 156                table: "person");
 57
 158            migrationBuilder.DropColumn(
 159                name: "account_emails_sent",
 160                schema: "heimdall",
 161                table: "person");
 162        }
 63    }
 64}

/home/ci/agent/workspace/heimdall-api-docs_main/app/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20261015221314_AddAccountEmailBudget.Designer.cs

#LineLine coverage
 1// <auto-generated />
 2using System;
 3using ArturRios.Heimdall.Data.Configuration;
 4using Microsoft.EntityFrameworkCore;
 5using Microsoft.EntityFrameworkCore.Infrastructure;
 6using Microsoft.EntityFrameworkCore.Migrations;
 7using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 8using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 9
 10#nullable disable
 11
 12namespace ArturRios.Heimdall.Data.Migrations
 13{
 14    [DbContext(typeof(AppDbContext))]
 15    [Migration("20261015221314_AddAccountEmailBudget")]
 16    partial class AddAccountEmailBudget
 17    {
 18        /// <inheritdoc />
 19        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 20        {
 21#pragma warning disable 612, 618
 1022            modelBuilder
 1023                .HasDefaultSchema("heimdall")
 1024                .HasAnnotation("ProductVersion", "10.0.13")
 1025                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 26
 1027            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 28
 1029            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 1030                {
 1031                    b.Property<long>("Id")
 1032                        .ValueGeneratedOnAdd()
 1033                        .HasColumnType("bigint")
 1034                        .HasColumnName("id")
 1035                        .HasColumnOrder(1);
 1036
 1037                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 1038
 1039                    b.Property<DateTime>("CreatedAt")
 1040                        .ValueGeneratedOnAdd()
 1041                        .HasColumnType("timestamp with time zone")
 1042                        .HasColumnName("created_at")
 1043                        .HasDefaultValueSql("now()");
 1044
 1045                    b.Property<bool>("IsDeleted")
 1046                        .ValueGeneratedOnAdd()
 1047                        .HasColumnType("boolean")
 1048                        .HasDefaultValue(false)
 1049                        .HasColumnName("is_deleted");
 1050
 1051                    b.Property<string>("Name")
 1052                        .IsRequired()
 1053                        .HasMaxLength(200)
 1054                        .HasColumnType("character varying(200)")
 1055                        .HasColumnName("name");
 1056
 1057                    b.Property<long>("OwnerId")
 1058                        .HasColumnType("bigint")
 1059                        .HasColumnName("owner_id");
 1060
 1061                    b.Property<Guid>("PublicId")
 1062                        .HasColumnType("uuid")
 1063                        .HasColumnName("public_id");
 1064
 1065                    b.Property<long>("ScopeId")
 1066                        .HasColumnType("bigint")
 1067                        .HasColumnName("scope_id");
 1068
 1069                    b.Property<DateTime>("UpdatedAt")
 1070                        .ValueGeneratedOnAdd()
 1071                        .HasColumnType("timestamp with time zone")
 1072                        .HasColumnName("updated_at")
 1073                        .HasDefaultValueSql("now()");
 1074
 1075                    b.HasKey("Id")
 1076                        .HasName("pk_application");
 1077
 1078                    b.HasIndex("OwnerId")
 1079                        .HasDatabaseName("ix_application_owner_id");
 1080
 1081                    b.HasIndex("PublicId")
 1082                        .IsUnique()
 1083                        .HasDatabaseName("ix_application_public_id");
 1084
 1085                    b.HasIndex("ScopeId")
 1086                        .HasDatabaseName("ix_application_scope_id");
 1087
 1088                    b.ToTable("application", "heimdall");
 2089                });
 90
 1091            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ApplicationCredential", b =>
 1092                {
 1093                    b.Property<long>("Id")
 1094                        .ValueGeneratedOnAdd()
 1095                        .HasColumnType("bigint")
 1096                        .HasColumnName("id")
 1097                        .HasColumnOrder(1);
 1098
 1099                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10100
 10101                    b.Property<long>("ApplicationId")
 10102                        .HasColumnType("bigint")
 10103                        .HasColumnName("application_id");
 10104
 10105                    b.Property<DateTime>("CreatedAt")
 10106                        .HasColumnType("timestamp with time zone")
 10107                        .HasColumnName("created_at");
 10108
 10109                    b.Property<DateTime?>("ExpiresAt")
 10110                        .HasColumnType("timestamp with time zone")
 10111                        .HasColumnName("expires_at");
 10112
 10113                    b.Property<DateTime?>("LastUsedAt")
 10114                        .HasColumnType("timestamp with time zone")
 10115                        .HasColumnName("last_used_at");
 10116
 10117                    b.Property<Guid>("PublicId")
 10118                        .HasColumnType("uuid")
 10119                        .HasColumnName("public_id");
 10120
 10121                    b.Property<DateTime?>("RevokedAt")
 10122                        .HasColumnType("timestamp with time zone")
 10123                        .HasColumnName("revoked_at");
 10124
 10125                    b.Property<string>("SecretHash")
 10126                        .IsRequired()
 10127                        .HasMaxLength(64)
 10128                        .HasColumnType("character varying(64)")
 10129                        .HasColumnName("secret_hash");
 10130
 10131                    b.HasKey("Id")
 10132                        .HasName("pk_application_credential");
 10133
 10134                    b.HasIndex("ApplicationId")
 10135                        .HasDatabaseName("ix_application_credential_application_id");
 10136
 10137                    b.HasIndex("PublicId")
 10138                        .IsUnique()
 10139                        .HasDatabaseName("ix_application_credential_public_id");
 10140
 10141                    b.HasIndex("SecretHash")
 10142                        .IsUnique()
 10143                        .HasDatabaseName("ix_application_credential_secret_hash");
 10144
 10145                    b.ToTable("application_credential", "heimdall");
 20146                });
 147
 10148            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.AttemptNoticeBudget", b =>
 10149                {
 10150                    b.Property<long>("Id")
 10151                        .ValueGeneratedOnAdd()
 10152                        .HasColumnType("bigint")
 10153                        .HasColumnName("id")
 10154                        .HasColumnOrder(1);
 10155
 10156                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10157
 10158                    b.Property<string>("AddressHash")
 10159                        .IsRequired()
 10160                        .HasMaxLength(64)
 10161                        .HasColumnType("character varying(64)")
 10162                        .HasColumnName("address_hash");
 10163
 10164                    b.Property<int>("NoticesSent")
 10165                        .HasColumnType("integer")
 10166                        .HasColumnName("notices_sent");
 10167
 10168                    b.Property<DateTime>("WindowEndsAt")
 10169                        .HasColumnType("timestamp with time zone")
 10170                        .HasColumnName("window_ends_at");
 10171
 10172                    b.HasKey("Id")
 10173                        .HasName("pk_attempt_notice_budget");
 10174
 10175                    b.HasIndex("AddressHash")
 10176                        .IsUnique()
 10177                        .HasDatabaseName("ix_attempt_notice_budget_address_hash");
 10178
 10179                    b.HasIndex("WindowEndsAt")
 10180                        .HasDatabaseName("ix_attempt_notice_budget_window_ends_at");
 10181
 10182                    b.ToTable("attempt_notice_budget", "heimdall");
 20183                });
 184
 10185            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.AuditLog", b =>
 10186                {
 10187                    b.Property<long>("Id")
 10188                        .ValueGeneratedOnAdd()
 10189                        .HasColumnType("bigint")
 10190                        .HasColumnName("id")
 10191                        .HasColumnOrder(1);
 10192
 10193                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10194
 10195                    b.Property<string>("Action")
 10196                        .IsRequired()
 10197                        .HasMaxLength(200)
 10198                        .HasColumnType("character varying(200)")
 10199                        .HasColumnName("action");
 10200
 10201                    b.Property<Guid?>("ActorPersonId")
 10202                        .HasColumnType("uuid")
 10203                        .HasColumnName("actor_person_id");
 10204
 10205                    b.Property<int?>("ActorRole")
 10206                        .HasColumnType("integer")
 10207                        .HasColumnName("actor_role");
 10208
 10209                    b.Property<DateTime>("CreatedAt")
 10210                        .ValueGeneratedOnAdd()
 10211                        .HasColumnType("timestamp with time zone")
 10212                        .HasColumnName("created_at")
 10213                        .HasDefaultValueSql("now()");
 10214
 10215                    b.Property<string>("FailureReason")
 10216                        .HasMaxLength(500)
 10217                        .HasColumnType("character varying(500)")
 10218                        .HasColumnName("failure_reason");
 10219
 10220                    b.Property<Guid>("PublicId")
 10221                        .HasColumnType("uuid")
 10222                        .HasColumnName("public_id");
 10223
 10224                    b.Property<bool>("Succeeded")
 10225                        .HasColumnType("boolean")
 10226                        .HasColumnName("succeeded");
 10227
 10228                    b.Property<Guid?>("TargetId")
 10229                        .HasColumnType("uuid")
 10230                        .HasColumnName("target_id");
 10231
 10232                    b.HasKey("Id")
 10233                        .HasName("pk_audit_log");
 10234
 10235                    b.HasIndex("ActorPersonId")
 10236                        .HasDatabaseName("ix_audit_log_actor_person_id");
 10237
 10238                    b.HasIndex("CreatedAt")
 10239                        .HasDatabaseName("ix_audit_log_created_at");
 10240
 10241                    b.HasIndex("PublicId")
 10242                        .IsUnique()
 10243                        .HasDatabaseName("ix_audit_log_public_id");
 10244
 10245                    b.HasIndex("TargetId")
 10246                        .HasDatabaseName("ix_audit_log_target_id");
 10247
 10248                    b.ToTable("audit_log", "heimdall");
 20249                });
 250
 10251            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 10252                {
 10253                    b.Property<long>("Id")
 10254                        .ValueGeneratedOnAdd()
 10255                        .HasColumnType("bigint")
 10256                        .HasColumnName("id")
 10257                        .HasColumnOrder(1);
 10258
 10259                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10260
 10261                    b.Property<DateTime>("ExpiresAt")
 10262                        .HasColumnType("timestamp with time zone")
 10263                        .HasColumnName("expires_at");
 10264
 10265                    b.Property<long>("PersonId")
 10266                        .HasColumnType("bigint")
 10267                        .HasColumnName("person_id");
 10268
 10269                    b.Property<string>("TokenHash")
 10270                        .IsRequired()
 10271                        .HasMaxLength(64)
 10272                        .HasColumnType("character varying(64)")
 10273                        .HasColumnName("token_hash");
 10274
 10275                    b.Property<bool>("Used")
 10276                        .ValueGeneratedOnAdd()
 10277                        .HasColumnType("boolean")
 10278                        .HasDefaultValue(false)
 10279                        .HasColumnName("used");
 10280
 10281                    b.HasKey("Id")
 10282                        .HasName("pk_email_verification_token");
 10283
 10284                    b.HasIndex("PersonId")
 10285                        .HasDatabaseName("ix_email_verification_token_person_id");
 10286
 10287                    b.HasIndex("TokenHash")
 10288                        .IsUnique()
 10289                        .HasDatabaseName("ix_email_verification_token_token_hash");
 10290
 10291                    b.ToTable("email_verification_token", "heimdall");
 20292                });
 293
 10294            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ErasedSubject", b =>
 10295                {
 10296                    b.Property<Guid>("Id")
 10297                        .HasColumnType("uuid")
 10298                        .HasColumnName("public_id")
 10299                        .HasColumnOrder(1);
 10300
 10301                    b.Property<DateTime>("CreatedAt")
 10302                        .ValueGeneratedOnAdd()
 10303                        .HasColumnType("timestamp with time zone")
 10304                        .HasColumnName("created_at")
 10305                        .HasDefaultValueSql("now()");
 10306
 10307                    b.Property<int>("Kind")
 10308                        .HasColumnType("integer")
 10309                        .HasColumnName("kind");
 10310
 10311                    b.HasKey("Id")
 10312                        .HasName("pk_erased_subject");
 10313
 10314                    b.HasIndex("CreatedAt")
 10315                        .HasDatabaseName("ix_erased_subject_created_at");
 10316
 10317                    b.ToTable("erased_subject", "heimdall");
 20318                });
 319
 10320            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 10321                {
 10322                    b.Property<long>("Id")
 10323                        .ValueGeneratedOnAdd()
 10324                        .HasColumnType("bigint")
 10325                        .HasColumnName("id")
 10326                        .HasColumnOrder(1);
 10327
 10328                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10329
 10330                    b.Property<DateTime?>("AnonymisedAt")
 10331                        .HasColumnType("timestamp with time zone")
 10332                        .HasColumnName("anonymised_at");
 10333
 10334                    b.Property<DateTime?>("BasisRecordedAt")
 10335                        .HasColumnType("timestamp with time zone")
 10336                        .HasColumnName("basis_recorded_at");
 10337
 10338                    b.Property<DateTime>("CreatedAt")
 10339                        .ValueGeneratedOnAdd()
 10340                        .HasColumnType("timestamp with time zone")
 10341                        .HasColumnName("created_at")
 10342                        .HasDefaultValueSql("now()");
 10343
 10344                    b.Property<DateTime?>("DeletedAt")
 10345                        .HasColumnType("timestamp with time zone")
 10346                        .HasColumnName("deleted_at");
 10347
 10348                    b.Property<int?>("DeletionKind")
 10349                        .HasColumnType("integer")
 10350                        .HasColumnName("deletion_kind");
 10351
 10352                    b.Property<string>("Email")
 10353                        .IsRequired()
 10354                        .HasMaxLength(256)
 10355                        .HasColumnType("character varying(256)")
 10356                        .HasColumnName("email");
 10357
 10358                    b.Property<bool>("EmailVerified")
 10359                        .ValueGeneratedOnAdd()
 10360                        .HasColumnType("boolean")
 10361                        .HasDefaultValue(false)
 10362                        .HasColumnName("email_verified");
 10363
 10364                    b.Property<string>("ErasureBlockedReason")
 10365                        .HasMaxLength(500)
 10366                        .HasColumnType("character varying(500)")
 10367                        .HasColumnName("erasure_blocked_reason");
 10368
 10369                    b.Property<DateTime?>("ErasureDueAt")
 10370                        .HasColumnType("timestamp with time zone")
 10371                        .HasColumnName("erasure_due_at");
 10372
 10373                    b.Property<DateTime?>("ErasureRequestedAt")
 10374                        .HasColumnType("timestamp with time zone")
 10375                        .HasColumnName("erasure_requested_at");
 10376
 10377                    b.Property<string>("GoogleId")
 10378                        .IsRequired()
 10379                        .HasMaxLength(255)
 10380                        .HasColumnType("character varying(255)")
 10381                        .HasColumnName("google_id");
 10382
 10383                    b.Property<bool>("IsDeleted")
 10384                        .ValueGeneratedOnAdd()
 10385                        .HasColumnType("boolean")
 10386                        .HasDefaultValue(false)
 10387                        .HasColumnName("is_deleted");
 10388
 10389                    b.Property<int>("LegalBasis")
 10390                        .ValueGeneratedOnAdd()
 10391                        .HasColumnType("integer")
 10392                        .HasDefaultValue(0)
 10393                        .HasColumnName("legal_basis");
 10394
 10395                    b.Property<string>("Name")
 10396                        .IsRequired()
 10397                        .HasMaxLength(200)
 10398                        .HasColumnType("character varying(200)")
 10399                        .HasColumnName("name");
 10400
 10401                    b.Property<string>("PrivacyNoticeVersion")
 10402                        .HasMaxLength(50)
 10403                        .HasColumnType("character varying(50)")
 10404                        .HasColumnName("privacy_notice_version");
 10405
 10406                    b.Property<DateTime?>("ProcessingRestrictedAt")
 10407                        .HasColumnType("timestamp with time zone")
 10408                        .HasColumnName("processing_restricted_at");
 10409
 10410                    b.Property<string>("ProfilePictureUrl")
 10411                        .HasMaxLength(2048)
 10412                        .HasColumnType("character varying(2048)")
 10413                        .HasColumnName("profile_picture_url");
 10414
 10415                    b.Property<Guid>("PublicId")
 10416                        .HasColumnType("uuid")
 10417                        .HasColumnName("public_id");
 10418
 10419                    b.Property<int?>("RestrictionGround")
 10420                        .HasColumnType("integer")
 10421                        .HasColumnName("restriction_ground");
 10422
 10423                    b.Property<DateTime?>("RestrictionLiftNotifiedAt")
 10424                        .HasColumnType("timestamp with time zone")
 10425                        .HasColumnName("restriction_lift_notified_at");
 10426
 10427                    b.Property<long>("ScopeId")
 10428                        .HasColumnType("bigint")
 10429                        .HasColumnName("scope_id");
 10430
 10431                    b.Property<DateTime>("UpdatedAt")
 10432                        .ValueGeneratedOnAdd()
 10433                        .HasColumnType("timestamp with time zone")
 10434                        .HasColumnName("updated_at")
 10435                        .HasDefaultValueSql("now()");
 10436
 10437                    b.HasKey("Id")
 10438                        .HasName("pk_google_user");
 10439
 10440                    b.HasIndex("DeletedAt")
 10441                        .HasDatabaseName("ix_google_user_deleted_at")
 10442                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 10443
 10444                    b.HasIndex("ProcessingRestrictedAt")
 10445                        .HasDatabaseName("ix_google_user_processing_restricted_at")
 10446                        .HasFilter("processing_restricted_at IS NOT NULL");
 10447
 10448                    b.HasIndex("PublicId")
 10449                        .IsUnique()
 10450                        .HasDatabaseName("ix_google_user_public_id");
 10451
 10452                    b.HasIndex("ScopeId", "Email")
 10453                        .IsUnique()
 10454                        .HasDatabaseName("ix_google_user_scope_id_email");
 10455
 10456                    b.HasIndex("ScopeId", "GoogleId")
 10457                        .IsUnique()
 10458                        .HasDatabaseName("ix_google_user_scope_id_google_id");
 10459
 10460                    b.ToTable("google_user", "heimdall");
 20461                });
 462
 10463            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 10464                {
 10465                    b.Property<long>("Id")
 10466                        .ValueGeneratedOnAdd()
 10467                        .HasColumnType("bigint")
 10468                        .HasColumnName("id")
 10469                        .HasColumnOrder(1);
 10470
 10471                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10472
 10473                    b.Property<DateTime>("ExpiresAt")
 10474                        .HasColumnType("timestamp with time zone")
 10475                        .HasColumnName("expires_at");
 10476
 10477                    b.Property<long>("PersonId")
 10478                        .HasColumnType("bigint")
 10479                        .HasColumnName("person_id");
 10480
 10481                    b.Property<string>("TokenHash")
 10482                        .IsRequired()
 10483                        .HasMaxLength(64)
 10484                        .HasColumnType("character varying(64)")
 10485                        .HasColumnName("token_hash");
 10486
 10487                    b.Property<bool>("Used")
 10488                        .ValueGeneratedOnAdd()
 10489                        .HasColumnType("boolean")
 10490                        .HasDefaultValue(false)
 10491                        .HasColumnName("used");
 10492
 10493                    b.HasKey("Id")
 10494                        .HasName("pk_password_reset_token");
 10495
 10496                    b.HasIndex("PersonId")
 10497                        .HasDatabaseName("ix_password_reset_token_person_id");
 10498
 10499                    b.HasIndex("TokenHash")
 10500                        .IsUnique()
 10501                        .HasDatabaseName("ix_password_reset_token_token_hash");
 10502
 10503                    b.ToTable("password_reset_token", "heimdall");
 20504                });
 505
 10506            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PendingRegistration", b =>
 10507                {
 10508                    b.Property<long>("Id")
 10509                        .ValueGeneratedOnAdd()
 10510                        .HasColumnType("bigint")
 10511                        .HasColumnName("id")
 10512                        .HasColumnOrder(1);
 10513
 10514                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10515
 10516                    b.Property<DateTime>("CreatedAt")
 10517                        .ValueGeneratedOnAdd()
 10518                        .HasColumnType("timestamp with time zone")
 10519                        .HasColumnName("created_at")
 10520                        .HasDefaultValueSql("now()");
 10521
 10522                    b.Property<string>("Email")
 10523                        .IsRequired()
 10524                        .HasMaxLength(256)
 10525                        .HasColumnType("character varying(256)")
 10526                        .HasColumnName("email");
 10527
 10528                    b.Property<DateTime>("ExpiresAt")
 10529                        .HasColumnType("timestamp with time zone")
 10530                        .HasColumnName("expires_at");
 10531
 10532                    b.Property<int>("FailedAttempts")
 10533                        .ValueGeneratedOnAdd()
 10534                        .HasColumnType("integer")
 10535                        .HasDefaultValue(0)
 10536                        .HasColumnName("failed_attempts");
 10537
 10538                    b.Property<string>("Name")
 10539                        .IsRequired()
 10540                        .HasMaxLength(200)
 10541                        .HasColumnType("character varying(200)")
 10542                        .HasColumnName("name");
 10543
 10544                    b.Property<byte[]>("PasswordHash")
 10545                        .IsRequired()
 10546                        .HasColumnType("bytea")
 10547                        .HasColumnName("password_hash");
 10548
 10549                    b.Property<Guid>("PublicId")
 10550                        .HasColumnType("uuid")
 10551                        .HasColumnName("public_id");
 10552
 10553                    b.Property<byte[]>("Salt")
 10554                        .IsRequired()
 10555                        .HasColumnType("bytea")
 10556                        .HasColumnName("salt");
 10557
 10558                    b.Property<long>("ScopeId")
 10559                        .HasColumnType("bigint")
 10560                        .HasColumnName("scope_id");
 10561
 10562                    b.Property<string>("TokenHash")
 10563                        .IsRequired()
 10564                        .HasMaxLength(64)
 10565                        .HasColumnType("character varying(64)")
 10566                        .HasColumnName("token_hash");
 10567
 10568                    b.HasKey("Id")
 10569                        .HasName("pk_pending_registration");
 10570
 10571                    b.HasIndex("PublicId")
 10572                        .IsUnique()
 10573                        .HasDatabaseName("ix_pending_registration_public_id");
 10574
 10575                    b.HasIndex("ScopeId")
 10576                        .HasDatabaseName("ix_pending_registration_scope_id");
 10577
 10578                    b.HasIndex("TokenHash")
 10579                        .IsUnique()
 10580                        .HasDatabaseName("ix_pending_registration_token_hash");
 10581
 10582                    b.ToTable("pending_registration", "heimdall");
 20583                });
 584
 10585            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 10586                {
 10587                    b.Property<long>("Id")
 10588                        .ValueGeneratedOnAdd()
 10589                        .HasColumnType("bigint")
 10590                        .HasColumnName("id")
 10591                        .HasColumnOrder(1);
 10592
 10593                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10594
 10595                    b.Property<DateTime?>("AccountEmailLastSentAt")
 10596                        .HasColumnType("timestamp with time zone")
 10597                        .HasColumnName("account_email_last_sent_at");
 10598
 10599                    b.Property<DateTime?>("AccountEmailWindowEndsAt")
 10600                        .HasColumnType("timestamp with time zone")
 10601                        .HasColumnName("account_email_window_ends_at");
 10602
 10603                    b.Property<int>("AccountEmailsSent")
 10604                        .HasColumnType("integer")
 10605                        .HasColumnName("account_emails_sent");
 10606
 10607                    b.Property<DateTime?>("AnonymisedAt")
 10608                        .HasColumnType("timestamp with time zone")
 10609                        .HasColumnName("anonymised_at");
 10610
 10611                    b.Property<DateTime?>("BasisRecordedAt")
 10612                        .HasColumnType("timestamp with time zone")
 10613                        .HasColumnName("basis_recorded_at");
 10614
 10615                    b.Property<DateTime>("CreatedAt")
 10616                        .ValueGeneratedOnAdd()
 10617                        .HasColumnType("timestamp with time zone")
 10618                        .HasColumnName("created_at")
 10619                        .HasDefaultValueSql("now()");
 10620
 10621                    b.Property<DateTime?>("DeletedAt")
 10622                        .HasColumnType("timestamp with time zone")
 10623                        .HasColumnName("deleted_at");
 10624
 10625                    b.Property<int?>("DeletionKind")
 10626                        .HasColumnType("integer")
 10627                        .HasColumnName("deletion_kind");
 10628
 10629                    b.Property<string>("Email")
 10630                        .IsRequired()
 10631                        .HasMaxLength(256)
 10632                        .HasColumnType("character varying(256)")
 10633                        .HasColumnName("email");
 10634
 10635                    b.Property<bool>("EmailVerified")
 10636                        .ValueGeneratedOnAdd()
 10637                        .HasColumnType("boolean")
 10638                        .HasDefaultValue(false)
 10639                        .HasColumnName("email_verified");
 10640
 10641                    b.Property<string>("ErasureBlockedReason")
 10642                        .HasMaxLength(500)
 10643                        .HasColumnType("character varying(500)")
 10644                        .HasColumnName("erasure_blocked_reason");
 10645
 10646                    b.Property<DateTime?>("ErasureDueAt")
 10647                        .HasColumnType("timestamp with time zone")
 10648                        .HasColumnName("erasure_due_at");
 10649
 10650                    b.Property<DateTime?>("ErasureRequestedAt")
 10651                        .HasColumnType("timestamp with time zone")
 10652                        .HasColumnName("erasure_requested_at");
 10653
 10654                    b.Property<int>("FailedLoginAttempts")
 10655                        .HasColumnType("integer")
 10656                        .HasColumnName("failed_login_attempts");
 10657
 10658                    b.Property<int>("FailedReauthenticationAttempts")
 10659                        .HasColumnType("integer")
 10660                        .HasColumnName("failed_reauthentication_attempts");
 10661
 10662                    b.Property<int>("FailedSecondFactorAttempts")
 10663                        .HasColumnType("integer")
 10664                        .HasColumnName("failed_second_factor_attempts");
 10665
 10666                    b.Property<bool>("IsDeleted")
 10667                        .ValueGeneratedOnAdd()
 10668                        .HasColumnType("boolean")
 10669                        .HasDefaultValue(false)
 10670                        .HasColumnName("is_deleted");
 10671
 10672                    b.Property<int>("LegalBasis")
 10673                        .ValueGeneratedOnAdd()
 10674                        .HasColumnType("integer")
 10675                        .HasDefaultValue(0)
 10676                        .HasColumnName("legal_basis");
 10677
 10678                    b.Property<DateTime?>("LockedOutUntil")
 10679                        .HasColumnType("timestamp with time zone")
 10680                        .HasColumnName("locked_out_until");
 10681
 10682                    b.Property<string>("Name")
 10683                        .IsRequired()
 10684                        .HasMaxLength(200)
 10685                        .HasColumnType("character varying(200)")
 10686                        .HasColumnName("name");
 10687
 10688                    b.Property<byte[]>("PasswordHash")
 10689                        .IsRequired()
 10690                        .HasColumnType("bytea")
 10691                        .HasColumnName("password_hash");
 10692
 10693                    b.Property<string>("PrivacyNoticeVersion")
 10694                        .HasMaxLength(50)
 10695                        .HasColumnType("character varying(50)")
 10696                        .HasColumnName("privacy_notice_version");
 10697
 10698                    b.Property<DateTime?>("ProcessingRestrictedAt")
 10699                        .HasColumnType("timestamp with time zone")
 10700                        .HasColumnName("processing_restricted_at");
 10701
 10702                    b.Property<Guid>("PublicId")
 10703                        .HasColumnType("uuid")
 10704                        .HasColumnName("public_id");
 10705
 10706                    b.Property<DateTime?>("ReauthenticationPausedUntil")
 10707                        .HasColumnType("timestamp with time zone")
 10708                        .HasColumnName("reauthentication_paused_until");
 10709
 10710                    b.Property<DateTime?>("ReauthenticationWindowStartedAt")
 10711                        .HasColumnType("timestamp with time zone")
 10712                        .HasColumnName("reauthentication_window_started_at");
 10713
 10714                    b.Property<int?>("RestrictionGround")
 10715                        .HasColumnType("integer")
 10716                        .HasColumnName("restriction_ground");
 10717
 10718                    b.Property<DateTime?>("RestrictionLiftNotifiedAt")
 10719                        .HasColumnType("timestamp with time zone")
 10720                        .HasColumnName("restriction_lift_notified_at");
 10721
 10722                    b.Property<long>("RoleId")
 10723                        .HasColumnType("bigint")
 10724                        .HasColumnName("role_id");
 10725
 10726                    b.Property<byte[]>("Salt")
 10727                        .IsRequired()
 10728                        .HasColumnType("bytea")
 10729                        .HasColumnName("salt");
 10730
 10731                    b.Property<long?>("ScopeId")
 10732                        .HasColumnType("bigint")
 10733                        .HasColumnName("scope_id");
 10734
 10735                    b.Property<DateTime?>("SecondFactorLockedOutUntil")
 10736                        .HasColumnType("timestamp with time zone")
 10737                        .HasColumnName("second_factor_locked_out_until");
 10738
 10739                    b.Property<int>("SecondFactorLockouts")
 10740                        .HasColumnType("integer")
 10741                        .HasColumnName("second_factor_lockouts");
 10742
 10743                    b.Property<Guid>("SecurityStamp")
 10744                        .ValueGeneratedOnAdd()
 10745                        .HasColumnType("uuid")
 10746                        .HasColumnName("security_stamp")
 10747                        .HasDefaultValueSql("gen_random_uuid()");
 10748
 10749                    b.Property<DateTime>("UpdatedAt")
 10750                        .ValueGeneratedOnAdd()
 10751                        .HasColumnType("timestamp with time zone")
 10752                        .HasColumnName("updated_at")
 10753                        .HasDefaultValueSql("now()");
 10754
 10755                    b.HasKey("Id")
 10756                        .HasName("pk_person");
 10757
 10758                    b.HasIndex("DeletedAt")
 10759                        .HasDatabaseName("ix_person_deleted_at")
 10760                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 10761
 10762                    b.HasIndex("Email")
 10763                        .HasDatabaseName("ix_person_email");
 10764
 10765                    b.HasIndex("ProcessingRestrictedAt")
 10766                        .HasDatabaseName("ix_person_processing_restricted_at")
 10767                        .HasFilter("processing_restricted_at IS NOT NULL");
 10768
 10769                    b.HasIndex("PublicId")
 10770                        .IsUnique()
 10771                        .HasDatabaseName("ix_person_public_id");
 10772
 10773                    b.HasIndex("RoleId")
 10774                        .HasDatabaseName("ix_person_role_id");
 10775
 10776                    b.ToTable("person", "heimdall");
 20777                });
 778
 10779            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 10780                {
 10781                    b.Property<long>("Id")
 10782                        .HasColumnType("bigint")
 10783                        .HasColumnName("id")
 10784                        .HasColumnOrder(1);
 10785
 10786                    b.Property<string>("Description")
 10787                        .HasMaxLength(500)
 10788                        .HasColumnType("character varying(500)")
 10789                        .HasColumnName("description");
 10790
 10791                    b.Property<string>("Name")
 10792                        .IsRequired()
 10793                        .HasMaxLength(200)
 10794                        .HasColumnType("character varying(200)")
 10795                        .HasColumnName("name");
 10796
 10797                    b.Property<Guid>("PublicId")
 10798                        .HasColumnType("uuid")
 10799                        .HasColumnName("public_id");
 10800
 10801                    b.HasKey("Id")
 10802                        .HasName("pk_role");
 10803
 10804                    b.HasIndex("Name")
 10805                        .IsUnique()
 10806                        .HasDatabaseName("ix_role_name");
 10807
 10808                    b.HasIndex("PublicId")
 10809                        .IsUnique()
 10810                        .HasDatabaseName("ix_role_public_id");
 10811
 10812                    b.ToTable("role", "heimdall");
 20813                });
 814
 10815            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 10816                {
 10817                    b.Property<long>("Id")
 10818                        .ValueGeneratedOnAdd()
 10819                        .HasColumnType("bigint")
 10820                        .HasColumnName("id")
 10821                        .HasColumnOrder(1);
 10822
 10823                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10824
 10825                    b.Property<DateTime>("CreatedAt")
 10826                        .ValueGeneratedOnAdd()
 10827                        .HasColumnType("timestamp with time zone")
 10828                        .HasColumnName("created_at")
 10829                        .HasDefaultValueSql("now()");
 10830
 10831                    b.Property<int?>("DefaultLegalBasis")
 10832                        .HasColumnType("integer")
 10833                        .HasColumnName("default_legal_basis");
 10834
 10835                    b.Property<string>("Description")
 10836                        .HasMaxLength(500)
 10837                        .HasColumnType("character varying(500)")
 10838                        .HasColumnName("description");
 10839
 10840                    b.Property<string>("EmailVerificationUrl")
 10841                        .HasMaxLength(2048)
 10842                        .HasColumnType("character varying(2048)")
 10843                        .HasColumnName("email_verification_url");
 10844
 10845                    b.Property<bool>("GoogleSignInEnabled")
 10846                        .ValueGeneratedOnAdd()
 10847                        .HasColumnType("boolean")
 10848                        .HasDefaultValue(false)
 10849                        .HasColumnName("google_sign_in_enabled");
 10850
 10851                    b.Property<bool>("IsDeleted")
 10852                        .ValueGeneratedOnAdd()
 10853                        .HasColumnType("boolean")
 10854                        .HasDefaultValue(false)
 10855                        .HasColumnName("is_deleted");
 10856
 10857                    b.Property<string>("Name")
 10858                        .IsRequired()
 10859                        .HasMaxLength(200)
 10860                        .HasColumnType("character varying(200)")
 10861                        .HasColumnName("name");
 10862
 10863                    b.Property<string>("PasswordResetUrl")
 10864                        .HasMaxLength(2048)
 10865                        .HasColumnType("character varying(2048)")
 10866                        .HasColumnName("password_reset_url");
 10867
 10868                    b.Property<string>("PrivacyNoticeUri")
 10869                        .HasMaxLength(2048)
 10870                        .HasColumnType("character varying(2048)")
 10871                        .HasColumnName("privacy_notice_uri");
 10872
 10873                    b.Property<Guid>("PublicId")
 10874                        .HasColumnType("uuid")
 10875                        .HasColumnName("public_id");
 10876
 10877                    b.Property<bool>("SelfRegistrationEnabled")
 10878                        .ValueGeneratedOnAdd()
 10879                        .HasColumnType("boolean")
 10880                        .HasDefaultValue(false)
 10881                        .HasColumnName("self_registration_enabled");
 10882
 10883                    b.Property<DateTime>("UpdatedAt")
 10884                        .ValueGeneratedOnAdd()
 10885                        .HasColumnType("timestamp with time zone")
 10886                        .HasColumnName("updated_at")
 10887                        .HasDefaultValueSql("now()");
 10888
 10889                    b.HasKey("Id")
 10890                        .HasName("pk_scope");
 10891
 10892                    b.HasIndex("Name")
 10893                        .IsUnique()
 10894                        .HasDatabaseName("ix_scope_name");
 10895
 10896                    b.HasIndex("PublicId")
 10897                        .IsUnique()
 10898                        .HasDatabaseName("ix_scope_public_id");
 10899
 10900                    b.ToTable("scope", "heimdall");
 20901                });
 902
 10903            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 10904                {
 10905                    b.Property<long>("ScopeId")
 10906                        .HasColumnType("bigint")
 10907                        .HasColumnName("scope_id");
 10908
 10909                    b.Property<long>("PersonId")
 10910                        .HasColumnType("bigint")
 10911                        .HasColumnName("person_id");
 10912
 10913                    b.HasKey("ScopeId", "PersonId")
 10914                        .HasName("pk_scope_owner");
 10915
 10916                    b.HasIndex("PersonId")
 10917                        .HasDatabaseName("ix_scope_owner_person_id");
 10918
 10919                    b.ToTable("scope_owner", "heimdall");
 20920                });
 921
 10922            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 10923                {
 10924                    b.Property<long>("Id")
 10925                        .ValueGeneratedOnAdd()
 10926                        .HasColumnType("bigint")
 10927                        .HasColumnName("id")
 10928                        .HasColumnOrder(1);
 10929
 10930                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10931
 10932                    b.Property<DateTime>("CreatedAt")
 10933                        .ValueGeneratedOnAdd()
 10934                        .HasColumnType("timestamp with time zone")
 10935                        .HasColumnName("created_at")
 10936                        .HasDefaultValueSql("now()");
 10937
 10938                    b.Property<string>("Description")
 10939                        .HasMaxLength(500)
 10940                        .HasColumnType("character varying(500)")
 10941                        .HasColumnName("description");
 10942
 10943                    b.Property<bool>("IncludeAsJwtClaim")
 10944                        .ValueGeneratedOnAdd()
 10945                        .HasColumnType("boolean")
 10946                        .HasDefaultValue(false)
 10947                        .HasColumnName("include_as_jwt_claim");
 10948
 10949                    b.Property<bool>("IsDeleted")
 10950                        .ValueGeneratedOnAdd()
 10951                        .HasColumnType("boolean")
 10952                        .HasDefaultValue(false)
 10953                        .HasColumnName("is_deleted");
 10954
 10955                    b.Property<string>("Name")
 10956                        .IsRequired()
 10957                        .HasMaxLength(200)
 10958                        .HasColumnType("character varying(200)")
 10959                        .HasColumnName("name");
 10960
 10961                    b.Property<Guid>("PublicId")
 10962                        .HasColumnType("uuid")
 10963                        .HasColumnName("public_id");
 10964
 10965                    b.Property<long>("ScopeId")
 10966                        .HasColumnType("bigint")
 10967                        .HasColumnName("scope_id");
 10968
 10969                    b.Property<DateTime>("UpdatedAt")
 10970                        .ValueGeneratedOnAdd()
 10971                        .HasColumnType("timestamp with time zone")
 10972                        .HasColumnName("updated_at")
 10973                        .HasDefaultValueSql("now()");
 10974
 10975                    b.HasKey("Id")
 10976                        .HasName("pk_scope_permission");
 10977
 10978                    b.HasIndex("PublicId")
 10979                        .IsUnique()
 10980                        .HasDatabaseName("ix_scope_permission_public_id");
 10981
 10982                    b.HasIndex("ScopeId")
 10983                        .HasDatabaseName("ix_scope_permission_scope_id");
 10984
 10985                    b.ToTable("scope_permission", "heimdall");
 20986                });
 987
 10988            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 10989                {
 10990                    b.Property<long>("ScopeId")
 10991                        .HasColumnType("bigint")
 10992                        .HasColumnName("scope_id");
 10993
 10994                    b.Property<long>("PersonId")
 10995                        .HasColumnType("bigint")
 10996                        .HasColumnName("person_id");
 10997
 10998                    b.HasKey("ScopeId", "PersonId")
 10999                        .HasName("pk_scope_user");
 101000
 101001                    b.HasIndex("PersonId")
 101002                        .IsUnique()
 101003                        .HasDatabaseName("ix_scope_user_person_id");
 101004
 101005                    b.ToTable("scope_user", "heimdall");
 201006                });
 1007
 101008            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 101009                {
 101010                    b.Property<long>("Id")
 101011                        .ValueGeneratedOnAdd()
 101012                        .HasColumnType("bigint")
 101013                        .HasColumnName("id")
 101014                        .HasColumnOrder(1);
 101015
 101016                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 101017
 101018                    b.Property<bool>("AppEnabled")
 101019                        .ValueGeneratedOnAdd()
 101020                        .HasColumnType("boolean")
 101021                        .HasDefaultValue(false)
 101022                        .HasColumnName("app_enabled");
 101023
 101024                    b.Property<int>("ChallengeAttempts")
 101025                        .ValueGeneratedOnAdd()
 101026                        .HasColumnType("integer")
 101027                        .HasDefaultValue(0)
 101028                        .HasColumnName("challenge_attempts");
 101029
 101030                    b.Property<Guid?>("ChallengeId")
 101031                        .HasColumnType("uuid")
 101032                        .HasColumnName("challenge_id");
 101033
 101034                    b.Property<DateTime>("CreatedAt")
 101035                        .ValueGeneratedOnAdd()
 101036                        .HasColumnType("timestamp with time zone")
 101037                        .HasColumnName("created_at")
 101038                        .HasDefaultValueSql("now()");
 101039
 101040                    b.Property<int>("EmailCodeReissueCount")
 101041                        .ValueGeneratedOnAdd()
 101042                        .HasColumnType("integer")
 101043                        .HasDefaultValue(0)
 101044                        .HasColumnName("email_code_reissue_count");
 101045
 101046                    b.Property<bool>("EmailEnabled")
 101047                        .ValueGeneratedOnAdd()
 101048                        .HasColumnType("boolean")
 101049                        .HasDefaultValue(false)
 101050                        .HasColumnName("email_enabled");
 101051
 101052                    b.Property<bool>("IsActive")
 101053                        .ValueGeneratedOnAdd()
 101054                        .HasColumnType("boolean")
 101055                        .HasDefaultValue(false)
 101056                        .HasColumnName("is_active");
 101057
 101058                    b.Property<long?>("LastTotpTimeStepUsed")
 101059                        .HasColumnType("bigint")
 101060                        .HasColumnName("last_totp_time_step_used");
 101061
 101062                    b.Property<long>("PersonId")
 101063                        .HasColumnType("bigint")
 101064                        .HasColumnName("person_id");
 101065
 101066                    b.Property<byte[]>("TotpSecretEncrypted")
 101067                        .HasColumnType("bytea")
 101068                        .HasColumnName("totp_secret_encrypted");
 101069
 101070                    b.Property<DateTime>("UpdatedAt")
 101071                        .ValueGeneratedOnAdd()
 101072                        .HasColumnType("timestamp with time zone")
 101073                        .HasColumnName("updated_at")
 101074                        .HasDefaultValueSql("now()");
 101075
 101076                    b.HasKey("Id")
 101077                        .HasName("pk_two_factor_auth");
 101078
 101079                    b.HasIndex("PersonId")
 101080                        .IsUnique()
 101081                        .HasDatabaseName("ix_two_factor_auth_person_id");
 101082
 101083                    b.ToTable("two_factor_auth", "heimdall");
 201084                });
 1085
 101086            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 101087                {
 101088                    b.Property<long>("Id")
 101089                        .ValueGeneratedOnAdd()
 101090                        .HasColumnType("bigint")
 101091                        .HasColumnName("id")
 101092                        .HasColumnOrder(1);
 101093
 101094                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 101095
 101096                    b.Property<byte[]>("CodeHash")
 101097                        .IsRequired()
 101098                        .HasColumnType("bytea")
 101099                        .HasColumnName("code_hash");
 101100
 101101                    b.Property<DateTime>("CreatedAt")
 101102                        .ValueGeneratedOnAdd()
 101103                        .HasColumnType("timestamp with time zone")
 101104                        .HasColumnName("created_at")
 101105                        .HasDefaultValueSql("now()");
 101106
 101107                    b.Property<DateTime>("ExpiresAt")
 101108                        .HasColumnType("timestamp with time zone")
 101109                        .HasColumnName("expires_at");
 101110
 101111                    b.Property<int>("FailedAttempts")
 101112                        .HasColumnType("integer")
 101113                        .HasColumnName("failed_attempts");
 101114
 101115                    b.Property<byte[]>("Salt")
 101116                        .IsRequired()
 101117                        .HasColumnType("bytea")
 101118                        .HasColumnName("salt");
 101119
 101120                    b.Property<long>("TwoFactorAuthId")
 101121                        .HasColumnType("bigint")
 101122                        .HasColumnName("two_factor_auth_id");
 101123
 101124                    b.Property<bool>("Used")
 101125                        .ValueGeneratedOnAdd()
 101126                        .HasColumnType("boolean")
 101127                        .HasDefaultValue(false)
 101128                        .HasColumnName("used");
 101129
 101130                    b.HasKey("Id")
 101131                        .HasName("pk_two_factor_email_code");
 101132
 101133                    b.HasIndex("TwoFactorAuthId")
 101134                        .HasDatabaseName("ix_two_factor_email_code_two_factor_auth_id");
 101135
 101136                    b.ToTable("two_factor_email_code", "heimdall");
 201137                });
 1138
 101139            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 101140                {
 101141                    b.Property<long>("Id")
 101142                        .ValueGeneratedOnAdd()
 101143                        .HasColumnType("bigint")
 101144                        .HasColumnName("id")
 101145                        .HasColumnOrder(1);
 101146
 101147                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 101148
 101149                    b.Property<byte[]>("CodeHash")
 101150                        .IsRequired()
 101151                        .HasColumnType("bytea")
 101152                        .HasColumnName("code_hash");
 101153
 101154                    b.Property<DateTime>("CreatedAt")
 101155                        .ValueGeneratedOnAdd()
 101156                        .HasColumnType("timestamp with time zone")
 101157                        .HasColumnName("created_at")
 101158                        .HasDefaultValueSql("now()");
 101159
 101160                    b.Property<long>("TwoFactorAuthId")
 101161                        .HasColumnType("bigint")
 101162                        .HasColumnName("two_factor_auth_id");
 101163
 101164                    b.Property<bool>("Used")
 101165                        .ValueGeneratedOnAdd()
 101166                        .HasColumnType("boolean")
 101167                        .HasDefaultValue(false)
 101168                        .HasColumnName("used");
 101169
 101170                    b.Property<DateTime?>("UsedAt")
 101171                        .HasColumnType("timestamp with time zone")
 101172                        .HasColumnName("used_at");
 101173
 101174                    b.HasKey("Id")
 101175                        .HasName("pk_two_factor_recovery_code");
 101176
 101177                    b.HasIndex("TwoFactorAuthId")
 101178                        .HasDatabaseName("ix_two_factor_recovery_code_two_factor_auth_id");
 101179
 101180                    b.ToTable("two_factor_recovery_code", "heimdall");
 201181                });
 1182
 101183            modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
 101184                {
 101185                    b.Property<int>("Id")
 101186                        .ValueGeneratedOnAdd()
 101187                        .HasColumnType("integer")
 101188                        .HasColumnName("id");
 101189
 101190                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 101191
 101192                    b.Property<string>("FriendlyName")
 101193                        .HasColumnType("text")
 101194                        .HasColumnName("friendly_name");
 101195
 101196                    b.Property<string>("Xml")
 101197                        .HasColumnType("text")
 101198                        .HasColumnName("xml");
 101199
 101200                    b.HasKey("Id")
 101201                        .HasName("pk_data_protection_keys");
 101202
 101203                    b.ToTable("data_protection_keys", "heimdall");
 201204                });
 1205
 101206            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 101207                {
 101208                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Owner")
 101209                        .WithMany("OwnedApplications")
 101210                        .HasForeignKey("OwnerId")
 101211                        .OnDelete(DeleteBehavior.Cascade)
 101212                        .IsRequired()
 101213                        .HasConstraintName("fk_application_person_owner_id");
 101214
 101215                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101216                        .WithMany("Applications")
 101217                        .HasForeignKey("ScopeId")
 101218                        .OnDelete(DeleteBehavior.Cascade)
 101219                        .IsRequired()
 101220                        .HasConstraintName("fk_application_scope_scope_id");
 101221
 101222                    b.Navigation("Owner");
 101223
 101224                    b.Navigation("Scope");
 201225                });
 1226
 101227            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ApplicationCredential", b =>
 101228                {
 101229                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Application", "Application")
 101230                        .WithMany("Credentials")
 101231                        .HasForeignKey("ApplicationId")
 101232                        .OnDelete(DeleteBehavior.Cascade)
 101233                        .IsRequired()
 101234                        .HasConstraintName("fk_application_credential_application_application_id");
 101235
 101236                    b.Navigation("Application");
 201237                });
 1238
 101239            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 101240                {
 101241                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101242                        .WithMany("EmailVerificationTokens")
 101243                        .HasForeignKey("PersonId")
 101244                        .OnDelete(DeleteBehavior.Cascade)
 101245                        .IsRequired()
 101246                        .HasConstraintName("fk_email_verification_token_person_person_id");
 101247
 101248                    b.Navigation("Person");
 201249                });
 1250
 101251            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 101252                {
 101253                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101254                        .WithMany("GoogleUsers")
 101255                        .HasForeignKey("ScopeId")
 101256                        .OnDelete(DeleteBehavior.Cascade)
 101257                        .IsRequired()
 101258                        .HasConstraintName("fk_google_user_scope_scope_id");
 101259
 101260                    b.Navigation("Scope");
 201261                });
 1262
 101263            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 101264                {
 101265                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101266                        .WithMany("PasswordResetTokens")
 101267                        .HasForeignKey("PersonId")
 101268                        .OnDelete(DeleteBehavior.Cascade)
 101269                        .IsRequired()
 101270                        .HasConstraintName("fk_password_reset_token_person_person_id");
 101271
 101272                    b.Navigation("Person");
 201273                });
 1274
 101275            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PendingRegistration", b =>
 101276                {
 101277                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101278                        .WithMany()
 101279                        .HasForeignKey("ScopeId")
 101280                        .OnDelete(DeleteBehavior.Cascade)
 101281                        .IsRequired()
 101282                        .HasConstraintName("fk_pending_registration_scope_scope_id");
 101283
 101284                    b.Navigation("Scope");
 201285                });
 1286
 101287            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 101288                {
 101289                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Role", "Role")
 101290                        .WithMany("Persons")
 101291                        .HasForeignKey("RoleId")
 101292                        .OnDelete(DeleteBehavior.Restrict)
 101293                        .IsRequired()
 101294                        .HasConstraintName("fk_person_roles_role_id");
 101295
 101296                    b.Navigation("Role");
 201297                });
 1298
 101299            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 101300                {
 101301                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101302                        .WithMany("ScopeOwnerships")
 101303                        .HasForeignKey("PersonId")
 101304                        .OnDelete(DeleteBehavior.Cascade)
 101305                        .IsRequired()
 101306                        .HasConstraintName("fk_scope_owner_person_person_id");
 101307
 101308                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101309                        .WithMany("Owners")
 101310                        .HasForeignKey("ScopeId")
 101311                        .OnDelete(DeleteBehavior.Cascade)
 101312                        .IsRequired()
 101313                        .HasConstraintName("fk_scope_owner_scope_scope_id");
 101314
 101315                    b.Navigation("Person");
 101316
 101317                    b.Navigation("Scope");
 201318                });
 1319
 101320            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 101321                {
 101322                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101323                        .WithMany("ScopePermissions")
 101324                        .HasForeignKey("ScopeId")
 101325                        .OnDelete(DeleteBehavior.Cascade)
 101326                        .IsRequired()
 101327                        .HasConstraintName("fk_scope_permission_scope_scope_id");
 101328
 101329                    b.Navigation("Scope");
 201330                });
 1331
 101332            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 101333                {
 101334                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101335                        .WithOne("ScopeMembership")
 101336                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.ScopeUser", "PersonId")
 101337                        .OnDelete(DeleteBehavior.Cascade)
 101338                        .IsRequired()
 101339                        .HasConstraintName("fk_scope_user_person_person_id");
 101340
 101341                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101342                        .WithMany("Users")
 101343                        .HasForeignKey("ScopeId")
 101344                        .OnDelete(DeleteBehavior.Cascade)
 101345                        .IsRequired()
 101346                        .HasConstraintName("fk_scope_user_scope_scope_id");
 101347
 101348                    b.Navigation("Person");
 101349
 101350                    b.Navigation("Scope");
 201351                });
 1352
 101353            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 101354                {
 101355                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101356                        .WithOne("TwoFactorAuth")
 101357                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "PersonId")
 101358                        .OnDelete(DeleteBehavior.Cascade)
 101359                        .IsRequired()
 101360                        .HasConstraintName("fk_two_factor_auth_person_person_id");
 101361
 101362                    b.Navigation("Person");
 201363                });
 1364
 101365            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 101366                {
 101367                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 101368                        .WithMany("EmailCodes")
 101369                        .HasForeignKey("TwoFactorAuthId")
 101370                        .OnDelete(DeleteBehavior.Cascade)
 101371                        .IsRequired()
 101372                        .HasConstraintName("fk_two_factor_email_code_two_factor_auth_two_factor_auth_id");
 101373
 101374                    b.Navigation("TwoFactorAuth");
 201375                });
 1376
 101377            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 101378                {
 101379                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 101380                        .WithMany("RecoveryCodes")
 101381                        .HasForeignKey("TwoFactorAuthId")
 101382                        .OnDelete(DeleteBehavior.Cascade)
 101383                        .IsRequired()
 101384                        .HasConstraintName("fk_two_factor_recovery_code_two_factor_auth_two_factor_auth_id");
 101385
 101386                    b.Navigation("TwoFactorAuth");
 201387                });
 1388
 101389            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 101390                {
 101391                    b.Navigation("Credentials");
 201392                });
 1393
 101394            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 101395                {
 101396                    b.Navigation("EmailVerificationTokens");
 101397
 101398                    b.Navigation("OwnedApplications");
 101399
 101400                    b.Navigation("PasswordResetTokens");
 101401
 101402                    b.Navigation("ScopeMembership");
 101403
 101404                    b.Navigation("ScopeOwnerships");
 101405
 101406                    b.Navigation("TwoFactorAuth");
 201407                });
 1408
 101409            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 101410                {
 101411                    b.Navigation("Persons");
 201412                });
 1413
 101414            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 101415                {
 101416                    b.Navigation("Applications");
 101417
 101418                    b.Navigation("GoogleUsers");
 101419
 101420                    b.Navigation("Owners");
 101421
 101422                    b.Navigation("ScopePermissions");
 101423
 101424                    b.Navigation("Users");
 201425                });
 1426
 101427            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 101428                {
 101429                    b.Navigation("EmailCodes");
 101430
 101431                    b.Navigation("RecoveryCodes");
 201432                });
 1433#pragma warning restore 612, 618
 101434        }
 1435    }
 1436}