< Summary - Heimdall API

Line coverage
99%
Covered lines: 1394
Uncovered lines: 13
Coverable lines: 1407
Total lines: 1500
Line coverage: 99%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
66%
Covered methods: 2
Fully covered methods: 2
Total methods: 3
Method coverage: 66.6%
Full method coverage: 66.6%

Metrics

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

File(s)

/home/runner/work/heimdall-api/heimdall-api/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        {
 422            migrationBuilder.AddColumn<DateTime>(
 423                name: "account_email_last_sent_at",
 424                schema: "heimdall",
 425                table: "person",
 426                type: "timestamp with time zone",
 427                nullable: true);
 28
 429            migrationBuilder.AddColumn<DateTime>(
 430                name: "account_email_window_ends_at",
 431                schema: "heimdall",
 432                table: "person",
 433                type: "timestamp with time zone",
 434                nullable: true);
 35
 436            migrationBuilder.AddColumn<int>(
 437                name: "account_emails_sent",
 438                schema: "heimdall",
 439                table: "person",
 440                type: "integer",
 441                nullable: false,
 442                defaultValue: 0);
 443        }
 44
 45        /// <inheritdoc />
 46        protected override void Down(MigrationBuilder migrationBuilder)
 47        {
 048            migrationBuilder.DropColumn(
 049                name: "account_email_last_sent_at",
 050                schema: "heimdall",
 051                table: "person");
 52
 053            migrationBuilder.DropColumn(
 054                name: "account_email_window_ends_at",
 055                schema: "heimdall",
 056                table: "person");
 57
 058            migrationBuilder.DropColumn(
 059                name: "account_emails_sent",
 060                schema: "heimdall",
 061                table: "person");
 062        }
 63    }
 64}

/home/runner/work/heimdall-api/heimdall-api/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
 222            modelBuilder
 223                .HasDefaultSchema("heimdall")
 224                .HasAnnotation("ProductVersion", "10.0.13")
 225                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 26
 227            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 28
 229            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 230                {
 231                    b.Property<long>("Id")
 232                        .ValueGeneratedOnAdd()
 233                        .HasColumnType("bigint")
 234                        .HasColumnName("id")
 235                        .HasColumnOrder(1);
 236
 237                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 238
 239                    b.Property<DateTime>("CreatedAt")
 240                        .ValueGeneratedOnAdd()
 241                        .HasColumnType("timestamp with time zone")
 242                        .HasColumnName("created_at")
 243                        .HasDefaultValueSql("now()");
 244
 245                    b.Property<bool>("IsDeleted")
 246                        .ValueGeneratedOnAdd()
 247                        .HasColumnType("boolean")
 248                        .HasDefaultValue(false)
 249                        .HasColumnName("is_deleted");
 250
 251                    b.Property<string>("Name")
 252                        .IsRequired()
 253                        .HasMaxLength(200)
 254                        .HasColumnType("character varying(200)")
 255                        .HasColumnName("name");
 256
 257                    b.Property<long>("OwnerId")
 258                        .HasColumnType("bigint")
 259                        .HasColumnName("owner_id");
 260
 261                    b.Property<Guid>("PublicId")
 262                        .HasColumnType("uuid")
 263                        .HasColumnName("public_id");
 264
 265                    b.Property<long>("ScopeId")
 266                        .HasColumnType("bigint")
 267                        .HasColumnName("scope_id");
 268
 269                    b.Property<DateTime>("UpdatedAt")
 270                        .ValueGeneratedOnAdd()
 271                        .HasColumnType("timestamp with time zone")
 272                        .HasColumnName("updated_at")
 273                        .HasDefaultValueSql("now()");
 274
 275                    b.HasKey("Id")
 276                        .HasName("pk_application");
 277
 278                    b.HasIndex("OwnerId")
 279                        .HasDatabaseName("ix_application_owner_id");
 280
 281                    b.HasIndex("PublicId")
 282                        .IsUnique()
 283                        .HasDatabaseName("ix_application_public_id");
 284
 285                    b.HasIndex("ScopeId")
 286                        .HasDatabaseName("ix_application_scope_id");
 287
 288                    b.ToTable("application", "heimdall");
 489                });
 90
 291            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ApplicationCredential", b =>
 292                {
 293                    b.Property<long>("Id")
 294                        .ValueGeneratedOnAdd()
 295                        .HasColumnType("bigint")
 296                        .HasColumnName("id")
 297                        .HasColumnOrder(1);
 298
 299                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2100
 2101                    b.Property<long>("ApplicationId")
 2102                        .HasColumnType("bigint")
 2103                        .HasColumnName("application_id");
 2104
 2105                    b.Property<DateTime>("CreatedAt")
 2106                        .HasColumnType("timestamp with time zone")
 2107                        .HasColumnName("created_at");
 2108
 2109                    b.Property<DateTime?>("ExpiresAt")
 2110                        .HasColumnType("timestamp with time zone")
 2111                        .HasColumnName("expires_at");
 2112
 2113                    b.Property<DateTime?>("LastUsedAt")
 2114                        .HasColumnType("timestamp with time zone")
 2115                        .HasColumnName("last_used_at");
 2116
 2117                    b.Property<Guid>("PublicId")
 2118                        .HasColumnType("uuid")
 2119                        .HasColumnName("public_id");
 2120
 2121                    b.Property<DateTime?>("RevokedAt")
 2122                        .HasColumnType("timestamp with time zone")
 2123                        .HasColumnName("revoked_at");
 2124
 2125                    b.Property<string>("SecretHash")
 2126                        .IsRequired()
 2127                        .HasMaxLength(64)
 2128                        .HasColumnType("character varying(64)")
 2129                        .HasColumnName("secret_hash");
 2130
 2131                    b.HasKey("Id")
 2132                        .HasName("pk_application_credential");
 2133
 2134                    b.HasIndex("ApplicationId")
 2135                        .HasDatabaseName("ix_application_credential_application_id");
 2136
 2137                    b.HasIndex("PublicId")
 2138                        .IsUnique()
 2139                        .HasDatabaseName("ix_application_credential_public_id");
 2140
 2141                    b.HasIndex("SecretHash")
 2142                        .IsUnique()
 2143                        .HasDatabaseName("ix_application_credential_secret_hash");
 2144
 2145                    b.ToTable("application_credential", "heimdall");
 4146                });
 147
 2148            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.AttemptNoticeBudget", b =>
 2149                {
 2150                    b.Property<long>("Id")
 2151                        .ValueGeneratedOnAdd()
 2152                        .HasColumnType("bigint")
 2153                        .HasColumnName("id")
 2154                        .HasColumnOrder(1);
 2155
 2156                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2157
 2158                    b.Property<string>("AddressHash")
 2159                        .IsRequired()
 2160                        .HasMaxLength(64)
 2161                        .HasColumnType("character varying(64)")
 2162                        .HasColumnName("address_hash");
 2163
 2164                    b.Property<int>("NoticesSent")
 2165                        .HasColumnType("integer")
 2166                        .HasColumnName("notices_sent");
 2167
 2168                    b.Property<DateTime>("WindowEndsAt")
 2169                        .HasColumnType("timestamp with time zone")
 2170                        .HasColumnName("window_ends_at");
 2171
 2172                    b.HasKey("Id")
 2173                        .HasName("pk_attempt_notice_budget");
 2174
 2175                    b.HasIndex("AddressHash")
 2176                        .IsUnique()
 2177                        .HasDatabaseName("ix_attempt_notice_budget_address_hash");
 2178
 2179                    b.HasIndex("WindowEndsAt")
 2180                        .HasDatabaseName("ix_attempt_notice_budget_window_ends_at");
 2181
 2182                    b.ToTable("attempt_notice_budget", "heimdall");
 4183                });
 184
 2185            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.AuditLog", b =>
 2186                {
 2187                    b.Property<long>("Id")
 2188                        .ValueGeneratedOnAdd()
 2189                        .HasColumnType("bigint")
 2190                        .HasColumnName("id")
 2191                        .HasColumnOrder(1);
 2192
 2193                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2194
 2195                    b.Property<string>("Action")
 2196                        .IsRequired()
 2197                        .HasMaxLength(200)
 2198                        .HasColumnType("character varying(200)")
 2199                        .HasColumnName("action");
 2200
 2201                    b.Property<Guid?>("ActorPersonId")
 2202                        .HasColumnType("uuid")
 2203                        .HasColumnName("actor_person_id");
 2204
 2205                    b.Property<int?>("ActorRole")
 2206                        .HasColumnType("integer")
 2207                        .HasColumnName("actor_role");
 2208
 2209                    b.Property<DateTime>("CreatedAt")
 2210                        .ValueGeneratedOnAdd()
 2211                        .HasColumnType("timestamp with time zone")
 2212                        .HasColumnName("created_at")
 2213                        .HasDefaultValueSql("now()");
 2214
 2215                    b.Property<string>("FailureReason")
 2216                        .HasMaxLength(500)
 2217                        .HasColumnType("character varying(500)")
 2218                        .HasColumnName("failure_reason");
 2219
 2220                    b.Property<Guid>("PublicId")
 2221                        .HasColumnType("uuid")
 2222                        .HasColumnName("public_id");
 2223
 2224                    b.Property<bool>("Succeeded")
 2225                        .HasColumnType("boolean")
 2226                        .HasColumnName("succeeded");
 2227
 2228                    b.Property<Guid?>("TargetId")
 2229                        .HasColumnType("uuid")
 2230                        .HasColumnName("target_id");
 2231
 2232                    b.HasKey("Id")
 2233                        .HasName("pk_audit_log");
 2234
 2235                    b.HasIndex("ActorPersonId")
 2236                        .HasDatabaseName("ix_audit_log_actor_person_id");
 2237
 2238                    b.HasIndex("CreatedAt")
 2239                        .HasDatabaseName("ix_audit_log_created_at");
 2240
 2241                    b.HasIndex("PublicId")
 2242                        .IsUnique()
 2243                        .HasDatabaseName("ix_audit_log_public_id");
 2244
 2245                    b.HasIndex("TargetId")
 2246                        .HasDatabaseName("ix_audit_log_target_id");
 2247
 2248                    b.ToTable("audit_log", "heimdall");
 4249                });
 250
 2251            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 2252                {
 2253                    b.Property<long>("Id")
 2254                        .ValueGeneratedOnAdd()
 2255                        .HasColumnType("bigint")
 2256                        .HasColumnName("id")
 2257                        .HasColumnOrder(1);
 2258
 2259                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2260
 2261                    b.Property<DateTime>("ExpiresAt")
 2262                        .HasColumnType("timestamp with time zone")
 2263                        .HasColumnName("expires_at");
 2264
 2265                    b.Property<long>("PersonId")
 2266                        .HasColumnType("bigint")
 2267                        .HasColumnName("person_id");
 2268
 2269                    b.Property<string>("TokenHash")
 2270                        .IsRequired()
 2271                        .HasMaxLength(64)
 2272                        .HasColumnType("character varying(64)")
 2273                        .HasColumnName("token_hash");
 2274
 2275                    b.Property<bool>("Used")
 2276                        .ValueGeneratedOnAdd()
 2277                        .HasColumnType("boolean")
 2278                        .HasDefaultValue(false)
 2279                        .HasColumnName("used");
 2280
 2281                    b.HasKey("Id")
 2282                        .HasName("pk_email_verification_token");
 2283
 2284                    b.HasIndex("PersonId")
 2285                        .HasDatabaseName("ix_email_verification_token_person_id");
 2286
 2287                    b.HasIndex("TokenHash")
 2288                        .IsUnique()
 2289                        .HasDatabaseName("ix_email_verification_token_token_hash");
 2290
 2291                    b.ToTable("email_verification_token", "heimdall");
 4292                });
 293
 2294            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ErasedSubject", b =>
 2295                {
 2296                    b.Property<Guid>("Id")
 2297                        .HasColumnType("uuid")
 2298                        .HasColumnName("public_id")
 2299                        .HasColumnOrder(1);
 2300
 2301                    b.Property<DateTime>("CreatedAt")
 2302                        .ValueGeneratedOnAdd()
 2303                        .HasColumnType("timestamp with time zone")
 2304                        .HasColumnName("created_at")
 2305                        .HasDefaultValueSql("now()");
 2306
 2307                    b.Property<int>("Kind")
 2308                        .HasColumnType("integer")
 2309                        .HasColumnName("kind");
 2310
 2311                    b.HasKey("Id")
 2312                        .HasName("pk_erased_subject");
 2313
 2314                    b.HasIndex("CreatedAt")
 2315                        .HasDatabaseName("ix_erased_subject_created_at");
 2316
 2317                    b.ToTable("erased_subject", "heimdall");
 4318                });
 319
 2320            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 2321                {
 2322                    b.Property<long>("Id")
 2323                        .ValueGeneratedOnAdd()
 2324                        .HasColumnType("bigint")
 2325                        .HasColumnName("id")
 2326                        .HasColumnOrder(1);
 2327
 2328                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2329
 2330                    b.Property<DateTime?>("AnonymisedAt")
 2331                        .HasColumnType("timestamp with time zone")
 2332                        .HasColumnName("anonymised_at");
 2333
 2334                    b.Property<DateTime?>("BasisRecordedAt")
 2335                        .HasColumnType("timestamp with time zone")
 2336                        .HasColumnName("basis_recorded_at");
 2337
 2338                    b.Property<DateTime>("CreatedAt")
 2339                        .ValueGeneratedOnAdd()
 2340                        .HasColumnType("timestamp with time zone")
 2341                        .HasColumnName("created_at")
 2342                        .HasDefaultValueSql("now()");
 2343
 2344                    b.Property<DateTime?>("DeletedAt")
 2345                        .HasColumnType("timestamp with time zone")
 2346                        .HasColumnName("deleted_at");
 2347
 2348                    b.Property<int?>("DeletionKind")
 2349                        .HasColumnType("integer")
 2350                        .HasColumnName("deletion_kind");
 2351
 2352                    b.Property<string>("Email")
 2353                        .IsRequired()
 2354                        .HasMaxLength(256)
 2355                        .HasColumnType("character varying(256)")
 2356                        .HasColumnName("email");
 2357
 2358                    b.Property<bool>("EmailVerified")
 2359                        .ValueGeneratedOnAdd()
 2360                        .HasColumnType("boolean")
 2361                        .HasDefaultValue(false)
 2362                        .HasColumnName("email_verified");
 2363
 2364                    b.Property<string>("ErasureBlockedReason")
 2365                        .HasMaxLength(500)
 2366                        .HasColumnType("character varying(500)")
 2367                        .HasColumnName("erasure_blocked_reason");
 2368
 2369                    b.Property<DateTime?>("ErasureDueAt")
 2370                        .HasColumnType("timestamp with time zone")
 2371                        .HasColumnName("erasure_due_at");
 2372
 2373                    b.Property<DateTime?>("ErasureRequestedAt")
 2374                        .HasColumnType("timestamp with time zone")
 2375                        .HasColumnName("erasure_requested_at");
 2376
 2377                    b.Property<string>("GoogleId")
 2378                        .IsRequired()
 2379                        .HasMaxLength(255)
 2380                        .HasColumnType("character varying(255)")
 2381                        .HasColumnName("google_id");
 2382
 2383                    b.Property<bool>("IsDeleted")
 2384                        .ValueGeneratedOnAdd()
 2385                        .HasColumnType("boolean")
 2386                        .HasDefaultValue(false)
 2387                        .HasColumnName("is_deleted");
 2388
 2389                    b.Property<int>("LegalBasis")
 2390                        .ValueGeneratedOnAdd()
 2391                        .HasColumnType("integer")
 2392                        .HasDefaultValue(0)
 2393                        .HasColumnName("legal_basis");
 2394
 2395                    b.Property<string>("Name")
 2396                        .IsRequired()
 2397                        .HasMaxLength(200)
 2398                        .HasColumnType("character varying(200)")
 2399                        .HasColumnName("name");
 2400
 2401                    b.Property<string>("PrivacyNoticeVersion")
 2402                        .HasMaxLength(50)
 2403                        .HasColumnType("character varying(50)")
 2404                        .HasColumnName("privacy_notice_version");
 2405
 2406                    b.Property<DateTime?>("ProcessingRestrictedAt")
 2407                        .HasColumnType("timestamp with time zone")
 2408                        .HasColumnName("processing_restricted_at");
 2409
 2410                    b.Property<string>("ProfilePictureUrl")
 2411                        .HasMaxLength(2048)
 2412                        .HasColumnType("character varying(2048)")
 2413                        .HasColumnName("profile_picture_url");
 2414
 2415                    b.Property<Guid>("PublicId")
 2416                        .HasColumnType("uuid")
 2417                        .HasColumnName("public_id");
 2418
 2419                    b.Property<int?>("RestrictionGround")
 2420                        .HasColumnType("integer")
 2421                        .HasColumnName("restriction_ground");
 2422
 2423                    b.Property<DateTime?>("RestrictionLiftNotifiedAt")
 2424                        .HasColumnType("timestamp with time zone")
 2425                        .HasColumnName("restriction_lift_notified_at");
 2426
 2427                    b.Property<long>("ScopeId")
 2428                        .HasColumnType("bigint")
 2429                        .HasColumnName("scope_id");
 2430
 2431                    b.Property<DateTime>("UpdatedAt")
 2432                        .ValueGeneratedOnAdd()
 2433                        .HasColumnType("timestamp with time zone")
 2434                        .HasColumnName("updated_at")
 2435                        .HasDefaultValueSql("now()");
 2436
 2437                    b.HasKey("Id")
 2438                        .HasName("pk_google_user");
 2439
 2440                    b.HasIndex("DeletedAt")
 2441                        .HasDatabaseName("ix_google_user_deleted_at")
 2442                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 2443
 2444                    b.HasIndex("ProcessingRestrictedAt")
 2445                        .HasDatabaseName("ix_google_user_processing_restricted_at")
 2446                        .HasFilter("processing_restricted_at IS NOT NULL");
 2447
 2448                    b.HasIndex("PublicId")
 2449                        .IsUnique()
 2450                        .HasDatabaseName("ix_google_user_public_id");
 2451
 2452                    b.HasIndex("ScopeId", "Email")
 2453                        .IsUnique()
 2454                        .HasDatabaseName("ix_google_user_scope_id_email");
 2455
 2456                    b.HasIndex("ScopeId", "GoogleId")
 2457                        .IsUnique()
 2458                        .HasDatabaseName("ix_google_user_scope_id_google_id");
 2459
 2460                    b.ToTable("google_user", "heimdall");
 4461                });
 462
 2463            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 2464                {
 2465                    b.Property<long>("Id")
 2466                        .ValueGeneratedOnAdd()
 2467                        .HasColumnType("bigint")
 2468                        .HasColumnName("id")
 2469                        .HasColumnOrder(1);
 2470
 2471                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2472
 2473                    b.Property<DateTime>("ExpiresAt")
 2474                        .HasColumnType("timestamp with time zone")
 2475                        .HasColumnName("expires_at");
 2476
 2477                    b.Property<long>("PersonId")
 2478                        .HasColumnType("bigint")
 2479                        .HasColumnName("person_id");
 2480
 2481                    b.Property<string>("TokenHash")
 2482                        .IsRequired()
 2483                        .HasMaxLength(64)
 2484                        .HasColumnType("character varying(64)")
 2485                        .HasColumnName("token_hash");
 2486
 2487                    b.Property<bool>("Used")
 2488                        .ValueGeneratedOnAdd()
 2489                        .HasColumnType("boolean")
 2490                        .HasDefaultValue(false)
 2491                        .HasColumnName("used");
 2492
 2493                    b.HasKey("Id")
 2494                        .HasName("pk_password_reset_token");
 2495
 2496                    b.HasIndex("PersonId")
 2497                        .HasDatabaseName("ix_password_reset_token_person_id");
 2498
 2499                    b.HasIndex("TokenHash")
 2500                        .IsUnique()
 2501                        .HasDatabaseName("ix_password_reset_token_token_hash");
 2502
 2503                    b.ToTable("password_reset_token", "heimdall");
 4504                });
 505
 2506            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PendingRegistration", b =>
 2507                {
 2508                    b.Property<long>("Id")
 2509                        .ValueGeneratedOnAdd()
 2510                        .HasColumnType("bigint")
 2511                        .HasColumnName("id")
 2512                        .HasColumnOrder(1);
 2513
 2514                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2515
 2516                    b.Property<DateTime>("CreatedAt")
 2517                        .ValueGeneratedOnAdd()
 2518                        .HasColumnType("timestamp with time zone")
 2519                        .HasColumnName("created_at")
 2520                        .HasDefaultValueSql("now()");
 2521
 2522                    b.Property<string>("Email")
 2523                        .IsRequired()
 2524                        .HasMaxLength(256)
 2525                        .HasColumnType("character varying(256)")
 2526                        .HasColumnName("email");
 2527
 2528                    b.Property<DateTime>("ExpiresAt")
 2529                        .HasColumnType("timestamp with time zone")
 2530                        .HasColumnName("expires_at");
 2531
 2532                    b.Property<int>("FailedAttempts")
 2533                        .ValueGeneratedOnAdd()
 2534                        .HasColumnType("integer")
 2535                        .HasDefaultValue(0)
 2536                        .HasColumnName("failed_attempts");
 2537
 2538                    b.Property<string>("Name")
 2539                        .IsRequired()
 2540                        .HasMaxLength(200)
 2541                        .HasColumnType("character varying(200)")
 2542                        .HasColumnName("name");
 2543
 2544                    b.Property<byte[]>("PasswordHash")
 2545                        .IsRequired()
 2546                        .HasColumnType("bytea")
 2547                        .HasColumnName("password_hash");
 2548
 2549                    b.Property<Guid>("PublicId")
 2550                        .HasColumnType("uuid")
 2551                        .HasColumnName("public_id");
 2552
 2553                    b.Property<byte[]>("Salt")
 2554                        .IsRequired()
 2555                        .HasColumnType("bytea")
 2556                        .HasColumnName("salt");
 2557
 2558                    b.Property<long>("ScopeId")
 2559                        .HasColumnType("bigint")
 2560                        .HasColumnName("scope_id");
 2561
 2562                    b.Property<string>("TokenHash")
 2563                        .IsRequired()
 2564                        .HasMaxLength(64)
 2565                        .HasColumnType("character varying(64)")
 2566                        .HasColumnName("token_hash");
 2567
 2568                    b.HasKey("Id")
 2569                        .HasName("pk_pending_registration");
 2570
 2571                    b.HasIndex("PublicId")
 2572                        .IsUnique()
 2573                        .HasDatabaseName("ix_pending_registration_public_id");
 2574
 2575                    b.HasIndex("ScopeId")
 2576                        .HasDatabaseName("ix_pending_registration_scope_id");
 2577
 2578                    b.HasIndex("TokenHash")
 2579                        .IsUnique()
 2580                        .HasDatabaseName("ix_pending_registration_token_hash");
 2581
 2582                    b.ToTable("pending_registration", "heimdall");
 4583                });
 584
 2585            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 2586                {
 2587                    b.Property<long>("Id")
 2588                        .ValueGeneratedOnAdd()
 2589                        .HasColumnType("bigint")
 2590                        .HasColumnName("id")
 2591                        .HasColumnOrder(1);
 2592
 2593                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2594
 2595                    b.Property<DateTime?>("AccountEmailLastSentAt")
 2596                        .HasColumnType("timestamp with time zone")
 2597                        .HasColumnName("account_email_last_sent_at");
 2598
 2599                    b.Property<DateTime?>("AccountEmailWindowEndsAt")
 2600                        .HasColumnType("timestamp with time zone")
 2601                        .HasColumnName("account_email_window_ends_at");
 2602
 2603                    b.Property<int>("AccountEmailsSent")
 2604                        .HasColumnType("integer")
 2605                        .HasColumnName("account_emails_sent");
 2606
 2607                    b.Property<DateTime?>("AnonymisedAt")
 2608                        .HasColumnType("timestamp with time zone")
 2609                        .HasColumnName("anonymised_at");
 2610
 2611                    b.Property<DateTime?>("BasisRecordedAt")
 2612                        .HasColumnType("timestamp with time zone")
 2613                        .HasColumnName("basis_recorded_at");
 2614
 2615                    b.Property<DateTime>("CreatedAt")
 2616                        .ValueGeneratedOnAdd()
 2617                        .HasColumnType("timestamp with time zone")
 2618                        .HasColumnName("created_at")
 2619                        .HasDefaultValueSql("now()");
 2620
 2621                    b.Property<DateTime?>("DeletedAt")
 2622                        .HasColumnType("timestamp with time zone")
 2623                        .HasColumnName("deleted_at");
 2624
 2625                    b.Property<int?>("DeletionKind")
 2626                        .HasColumnType("integer")
 2627                        .HasColumnName("deletion_kind");
 2628
 2629                    b.Property<string>("Email")
 2630                        .IsRequired()
 2631                        .HasMaxLength(256)
 2632                        .HasColumnType("character varying(256)")
 2633                        .HasColumnName("email");
 2634
 2635                    b.Property<bool>("EmailVerified")
 2636                        .ValueGeneratedOnAdd()
 2637                        .HasColumnType("boolean")
 2638                        .HasDefaultValue(false)
 2639                        .HasColumnName("email_verified");
 2640
 2641                    b.Property<string>("ErasureBlockedReason")
 2642                        .HasMaxLength(500)
 2643                        .HasColumnType("character varying(500)")
 2644                        .HasColumnName("erasure_blocked_reason");
 2645
 2646                    b.Property<DateTime?>("ErasureDueAt")
 2647                        .HasColumnType("timestamp with time zone")
 2648                        .HasColumnName("erasure_due_at");
 2649
 2650                    b.Property<DateTime?>("ErasureRequestedAt")
 2651                        .HasColumnType("timestamp with time zone")
 2652                        .HasColumnName("erasure_requested_at");
 2653
 2654                    b.Property<int>("FailedLoginAttempts")
 2655                        .HasColumnType("integer")
 2656                        .HasColumnName("failed_login_attempts");
 2657
 2658                    b.Property<int>("FailedReauthenticationAttempts")
 2659                        .HasColumnType("integer")
 2660                        .HasColumnName("failed_reauthentication_attempts");
 2661
 2662                    b.Property<int>("FailedSecondFactorAttempts")
 2663                        .HasColumnType("integer")
 2664                        .HasColumnName("failed_second_factor_attempts");
 2665
 2666                    b.Property<bool>("IsDeleted")
 2667                        .ValueGeneratedOnAdd()
 2668                        .HasColumnType("boolean")
 2669                        .HasDefaultValue(false)
 2670                        .HasColumnName("is_deleted");
 2671
 2672                    b.Property<int>("LegalBasis")
 2673                        .ValueGeneratedOnAdd()
 2674                        .HasColumnType("integer")
 2675                        .HasDefaultValue(0)
 2676                        .HasColumnName("legal_basis");
 2677
 2678                    b.Property<DateTime?>("LockedOutUntil")
 2679                        .HasColumnType("timestamp with time zone")
 2680                        .HasColumnName("locked_out_until");
 2681
 2682                    b.Property<string>("Name")
 2683                        .IsRequired()
 2684                        .HasMaxLength(200)
 2685                        .HasColumnType("character varying(200)")
 2686                        .HasColumnName("name");
 2687
 2688                    b.Property<byte[]>("PasswordHash")
 2689                        .IsRequired()
 2690                        .HasColumnType("bytea")
 2691                        .HasColumnName("password_hash");
 2692
 2693                    b.Property<string>("PrivacyNoticeVersion")
 2694                        .HasMaxLength(50)
 2695                        .HasColumnType("character varying(50)")
 2696                        .HasColumnName("privacy_notice_version");
 2697
 2698                    b.Property<DateTime?>("ProcessingRestrictedAt")
 2699                        .HasColumnType("timestamp with time zone")
 2700                        .HasColumnName("processing_restricted_at");
 2701
 2702                    b.Property<Guid>("PublicId")
 2703                        .HasColumnType("uuid")
 2704                        .HasColumnName("public_id");
 2705
 2706                    b.Property<DateTime?>("ReauthenticationPausedUntil")
 2707                        .HasColumnType("timestamp with time zone")
 2708                        .HasColumnName("reauthentication_paused_until");
 2709
 2710                    b.Property<DateTime?>("ReauthenticationWindowStartedAt")
 2711                        .HasColumnType("timestamp with time zone")
 2712                        .HasColumnName("reauthentication_window_started_at");
 2713
 2714                    b.Property<int?>("RestrictionGround")
 2715                        .HasColumnType("integer")
 2716                        .HasColumnName("restriction_ground");
 2717
 2718                    b.Property<DateTime?>("RestrictionLiftNotifiedAt")
 2719                        .HasColumnType("timestamp with time zone")
 2720                        .HasColumnName("restriction_lift_notified_at");
 2721
 2722                    b.Property<long>("RoleId")
 2723                        .HasColumnType("bigint")
 2724                        .HasColumnName("role_id");
 2725
 2726                    b.Property<byte[]>("Salt")
 2727                        .IsRequired()
 2728                        .HasColumnType("bytea")
 2729                        .HasColumnName("salt");
 2730
 2731                    b.Property<long?>("ScopeId")
 2732                        .HasColumnType("bigint")
 2733                        .HasColumnName("scope_id");
 2734
 2735                    b.Property<DateTime?>("SecondFactorLockedOutUntil")
 2736                        .HasColumnType("timestamp with time zone")
 2737                        .HasColumnName("second_factor_locked_out_until");
 2738
 2739                    b.Property<int>("SecondFactorLockouts")
 2740                        .HasColumnType("integer")
 2741                        .HasColumnName("second_factor_lockouts");
 2742
 2743                    b.Property<Guid>("SecurityStamp")
 2744                        .ValueGeneratedOnAdd()
 2745                        .HasColumnType("uuid")
 2746                        .HasColumnName("security_stamp")
 2747                        .HasDefaultValueSql("gen_random_uuid()");
 2748
 2749                    b.Property<DateTime>("UpdatedAt")
 2750                        .ValueGeneratedOnAdd()
 2751                        .HasColumnType("timestamp with time zone")
 2752                        .HasColumnName("updated_at")
 2753                        .HasDefaultValueSql("now()");
 2754
 2755                    b.HasKey("Id")
 2756                        .HasName("pk_person");
 2757
 2758                    b.HasIndex("DeletedAt")
 2759                        .HasDatabaseName("ix_person_deleted_at")
 2760                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 2761
 2762                    b.HasIndex("Email")
 2763                        .HasDatabaseName("ix_person_email");
 2764
 2765                    b.HasIndex("ProcessingRestrictedAt")
 2766                        .HasDatabaseName("ix_person_processing_restricted_at")
 2767                        .HasFilter("processing_restricted_at IS NOT NULL");
 2768
 2769                    b.HasIndex("PublicId")
 2770                        .IsUnique()
 2771                        .HasDatabaseName("ix_person_public_id");
 2772
 2773                    b.HasIndex("RoleId")
 2774                        .HasDatabaseName("ix_person_role_id");
 2775
 2776                    b.ToTable("person", "heimdall");
 4777                });
 778
 2779            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 2780                {
 2781                    b.Property<long>("Id")
 2782                        .HasColumnType("bigint")
 2783                        .HasColumnName("id")
 2784                        .HasColumnOrder(1);
 2785
 2786                    b.Property<string>("Description")
 2787                        .HasMaxLength(500)
 2788                        .HasColumnType("character varying(500)")
 2789                        .HasColumnName("description");
 2790
 2791                    b.Property<string>("Name")
 2792                        .IsRequired()
 2793                        .HasMaxLength(200)
 2794                        .HasColumnType("character varying(200)")
 2795                        .HasColumnName("name");
 2796
 2797                    b.Property<Guid>("PublicId")
 2798                        .HasColumnType("uuid")
 2799                        .HasColumnName("public_id");
 2800
 2801                    b.HasKey("Id")
 2802                        .HasName("pk_role");
 2803
 2804                    b.HasIndex("Name")
 2805                        .IsUnique()
 2806                        .HasDatabaseName("ix_role_name");
 2807
 2808                    b.HasIndex("PublicId")
 2809                        .IsUnique()
 2810                        .HasDatabaseName("ix_role_public_id");
 2811
 2812                    b.ToTable("role", "heimdall");
 4813                });
 814
 2815            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 2816                {
 2817                    b.Property<long>("Id")
 2818                        .ValueGeneratedOnAdd()
 2819                        .HasColumnType("bigint")
 2820                        .HasColumnName("id")
 2821                        .HasColumnOrder(1);
 2822
 2823                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2824
 2825                    b.Property<DateTime>("CreatedAt")
 2826                        .ValueGeneratedOnAdd()
 2827                        .HasColumnType("timestamp with time zone")
 2828                        .HasColumnName("created_at")
 2829                        .HasDefaultValueSql("now()");
 2830
 2831                    b.Property<int?>("DefaultLegalBasis")
 2832                        .HasColumnType("integer")
 2833                        .HasColumnName("default_legal_basis");
 2834
 2835                    b.Property<string>("Description")
 2836                        .HasMaxLength(500)
 2837                        .HasColumnType("character varying(500)")
 2838                        .HasColumnName("description");
 2839
 2840                    b.Property<string>("EmailVerificationUrl")
 2841                        .HasMaxLength(2048)
 2842                        .HasColumnType("character varying(2048)")
 2843                        .HasColumnName("email_verification_url");
 2844
 2845                    b.Property<bool>("GoogleSignInEnabled")
 2846                        .ValueGeneratedOnAdd()
 2847                        .HasColumnType("boolean")
 2848                        .HasDefaultValue(false)
 2849                        .HasColumnName("google_sign_in_enabled");
 2850
 2851                    b.Property<bool>("IsDeleted")
 2852                        .ValueGeneratedOnAdd()
 2853                        .HasColumnType("boolean")
 2854                        .HasDefaultValue(false)
 2855                        .HasColumnName("is_deleted");
 2856
 2857                    b.Property<string>("Name")
 2858                        .IsRequired()
 2859                        .HasMaxLength(200)
 2860                        .HasColumnType("character varying(200)")
 2861                        .HasColumnName("name");
 2862
 2863                    b.Property<string>("PasswordResetUrl")
 2864                        .HasMaxLength(2048)
 2865                        .HasColumnType("character varying(2048)")
 2866                        .HasColumnName("password_reset_url");
 2867
 2868                    b.Property<string>("PrivacyNoticeUri")
 2869                        .HasMaxLength(2048)
 2870                        .HasColumnType("character varying(2048)")
 2871                        .HasColumnName("privacy_notice_uri");
 2872
 2873                    b.Property<Guid>("PublicId")
 2874                        .HasColumnType("uuid")
 2875                        .HasColumnName("public_id");
 2876
 2877                    b.Property<bool>("SelfRegistrationEnabled")
 2878                        .ValueGeneratedOnAdd()
 2879                        .HasColumnType("boolean")
 2880                        .HasDefaultValue(false)
 2881                        .HasColumnName("self_registration_enabled");
 2882
 2883                    b.Property<DateTime>("UpdatedAt")
 2884                        .ValueGeneratedOnAdd()
 2885                        .HasColumnType("timestamp with time zone")
 2886                        .HasColumnName("updated_at")
 2887                        .HasDefaultValueSql("now()");
 2888
 2889                    b.HasKey("Id")
 2890                        .HasName("pk_scope");
 2891
 2892                    b.HasIndex("Name")
 2893                        .IsUnique()
 2894                        .HasDatabaseName("ix_scope_name");
 2895
 2896                    b.HasIndex("PublicId")
 2897                        .IsUnique()
 2898                        .HasDatabaseName("ix_scope_public_id");
 2899
 2900                    b.ToTable("scope", "heimdall");
 4901                });
 902
 2903            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 2904                {
 2905                    b.Property<long>("ScopeId")
 2906                        .HasColumnType("bigint")
 2907                        .HasColumnName("scope_id");
 2908
 2909                    b.Property<long>("PersonId")
 2910                        .HasColumnType("bigint")
 2911                        .HasColumnName("person_id");
 2912
 2913                    b.HasKey("ScopeId", "PersonId")
 2914                        .HasName("pk_scope_owner");
 2915
 2916                    b.HasIndex("PersonId")
 2917                        .HasDatabaseName("ix_scope_owner_person_id");
 2918
 2919                    b.ToTable("scope_owner", "heimdall");
 4920                });
 921
 2922            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 2923                {
 2924                    b.Property<long>("Id")
 2925                        .ValueGeneratedOnAdd()
 2926                        .HasColumnType("bigint")
 2927                        .HasColumnName("id")
 2928                        .HasColumnOrder(1);
 2929
 2930                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2931
 2932                    b.Property<DateTime>("CreatedAt")
 2933                        .ValueGeneratedOnAdd()
 2934                        .HasColumnType("timestamp with time zone")
 2935                        .HasColumnName("created_at")
 2936                        .HasDefaultValueSql("now()");
 2937
 2938                    b.Property<string>("Description")
 2939                        .HasMaxLength(500)
 2940                        .HasColumnType("character varying(500)")
 2941                        .HasColumnName("description");
 2942
 2943                    b.Property<bool>("IncludeAsJwtClaim")
 2944                        .ValueGeneratedOnAdd()
 2945                        .HasColumnType("boolean")
 2946                        .HasDefaultValue(false)
 2947                        .HasColumnName("include_as_jwt_claim");
 2948
 2949                    b.Property<bool>("IsDeleted")
 2950                        .ValueGeneratedOnAdd()
 2951                        .HasColumnType("boolean")
 2952                        .HasDefaultValue(false)
 2953                        .HasColumnName("is_deleted");
 2954
 2955                    b.Property<string>("Name")
 2956                        .IsRequired()
 2957                        .HasMaxLength(200)
 2958                        .HasColumnType("character varying(200)")
 2959                        .HasColumnName("name");
 2960
 2961                    b.Property<Guid>("PublicId")
 2962                        .HasColumnType("uuid")
 2963                        .HasColumnName("public_id");
 2964
 2965                    b.Property<long>("ScopeId")
 2966                        .HasColumnType("bigint")
 2967                        .HasColumnName("scope_id");
 2968
 2969                    b.Property<DateTime>("UpdatedAt")
 2970                        .ValueGeneratedOnAdd()
 2971                        .HasColumnType("timestamp with time zone")
 2972                        .HasColumnName("updated_at")
 2973                        .HasDefaultValueSql("now()");
 2974
 2975                    b.HasKey("Id")
 2976                        .HasName("pk_scope_permission");
 2977
 2978                    b.HasIndex("PublicId")
 2979                        .IsUnique()
 2980                        .HasDatabaseName("ix_scope_permission_public_id");
 2981
 2982                    b.HasIndex("ScopeId")
 2983                        .HasDatabaseName("ix_scope_permission_scope_id");
 2984
 2985                    b.ToTable("scope_permission", "heimdall");
 4986                });
 987
 2988            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 2989                {
 2990                    b.Property<long>("ScopeId")
 2991                        .HasColumnType("bigint")
 2992                        .HasColumnName("scope_id");
 2993
 2994                    b.Property<long>("PersonId")
 2995                        .HasColumnType("bigint")
 2996                        .HasColumnName("person_id");
 2997
 2998                    b.HasKey("ScopeId", "PersonId")
 2999                        .HasName("pk_scope_user");
 21000
 21001                    b.HasIndex("PersonId")
 21002                        .IsUnique()
 21003                        .HasDatabaseName("ix_scope_user_person_id");
 21004
 21005                    b.ToTable("scope_user", "heimdall");
 41006                });
 1007
 21008            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 21009                {
 21010                    b.Property<long>("Id")
 21011                        .ValueGeneratedOnAdd()
 21012                        .HasColumnType("bigint")
 21013                        .HasColumnName("id")
 21014                        .HasColumnOrder(1);
 21015
 21016                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 21017
 21018                    b.Property<bool>("AppEnabled")
 21019                        .ValueGeneratedOnAdd()
 21020                        .HasColumnType("boolean")
 21021                        .HasDefaultValue(false)
 21022                        .HasColumnName("app_enabled");
 21023
 21024                    b.Property<int>("ChallengeAttempts")
 21025                        .ValueGeneratedOnAdd()
 21026                        .HasColumnType("integer")
 21027                        .HasDefaultValue(0)
 21028                        .HasColumnName("challenge_attempts");
 21029
 21030                    b.Property<Guid?>("ChallengeId")
 21031                        .HasColumnType("uuid")
 21032                        .HasColumnName("challenge_id");
 21033
 21034                    b.Property<DateTime>("CreatedAt")
 21035                        .ValueGeneratedOnAdd()
 21036                        .HasColumnType("timestamp with time zone")
 21037                        .HasColumnName("created_at")
 21038                        .HasDefaultValueSql("now()");
 21039
 21040                    b.Property<int>("EmailCodeReissueCount")
 21041                        .ValueGeneratedOnAdd()
 21042                        .HasColumnType("integer")
 21043                        .HasDefaultValue(0)
 21044                        .HasColumnName("email_code_reissue_count");
 21045
 21046                    b.Property<bool>("EmailEnabled")
 21047                        .ValueGeneratedOnAdd()
 21048                        .HasColumnType("boolean")
 21049                        .HasDefaultValue(false)
 21050                        .HasColumnName("email_enabled");
 21051
 21052                    b.Property<bool>("IsActive")
 21053                        .ValueGeneratedOnAdd()
 21054                        .HasColumnType("boolean")
 21055                        .HasDefaultValue(false)
 21056                        .HasColumnName("is_active");
 21057
 21058                    b.Property<long?>("LastTotpTimeStepUsed")
 21059                        .HasColumnType("bigint")
 21060                        .HasColumnName("last_totp_time_step_used");
 21061
 21062                    b.Property<long>("PersonId")
 21063                        .HasColumnType("bigint")
 21064                        .HasColumnName("person_id");
 21065
 21066                    b.Property<byte[]>("TotpSecretEncrypted")
 21067                        .HasColumnType("bytea")
 21068                        .HasColumnName("totp_secret_encrypted");
 21069
 21070                    b.Property<DateTime>("UpdatedAt")
 21071                        .ValueGeneratedOnAdd()
 21072                        .HasColumnType("timestamp with time zone")
 21073                        .HasColumnName("updated_at")
 21074                        .HasDefaultValueSql("now()");
 21075
 21076                    b.HasKey("Id")
 21077                        .HasName("pk_two_factor_auth");
 21078
 21079                    b.HasIndex("PersonId")
 21080                        .IsUnique()
 21081                        .HasDatabaseName("ix_two_factor_auth_person_id");
 21082
 21083                    b.ToTable("two_factor_auth", "heimdall");
 41084                });
 1085
 21086            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 21087                {
 21088                    b.Property<long>("Id")
 21089                        .ValueGeneratedOnAdd()
 21090                        .HasColumnType("bigint")
 21091                        .HasColumnName("id")
 21092                        .HasColumnOrder(1);
 21093
 21094                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 21095
 21096                    b.Property<byte[]>("CodeHash")
 21097                        .IsRequired()
 21098                        .HasColumnType("bytea")
 21099                        .HasColumnName("code_hash");
 21100
 21101                    b.Property<DateTime>("CreatedAt")
 21102                        .ValueGeneratedOnAdd()
 21103                        .HasColumnType("timestamp with time zone")
 21104                        .HasColumnName("created_at")
 21105                        .HasDefaultValueSql("now()");
 21106
 21107                    b.Property<DateTime>("ExpiresAt")
 21108                        .HasColumnType("timestamp with time zone")
 21109                        .HasColumnName("expires_at");
 21110
 21111                    b.Property<int>("FailedAttempts")
 21112                        .HasColumnType("integer")
 21113                        .HasColumnName("failed_attempts");
 21114
 21115                    b.Property<byte[]>("Salt")
 21116                        .IsRequired()
 21117                        .HasColumnType("bytea")
 21118                        .HasColumnName("salt");
 21119
 21120                    b.Property<long>("TwoFactorAuthId")
 21121                        .HasColumnType("bigint")
 21122                        .HasColumnName("two_factor_auth_id");
 21123
 21124                    b.Property<bool>("Used")
 21125                        .ValueGeneratedOnAdd()
 21126                        .HasColumnType("boolean")
 21127                        .HasDefaultValue(false)
 21128                        .HasColumnName("used");
 21129
 21130                    b.HasKey("Id")
 21131                        .HasName("pk_two_factor_email_code");
 21132
 21133                    b.HasIndex("TwoFactorAuthId")
 21134                        .HasDatabaseName("ix_two_factor_email_code_two_factor_auth_id");
 21135
 21136                    b.ToTable("two_factor_email_code", "heimdall");
 41137                });
 1138
 21139            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 21140                {
 21141                    b.Property<long>("Id")
 21142                        .ValueGeneratedOnAdd()
 21143                        .HasColumnType("bigint")
 21144                        .HasColumnName("id")
 21145                        .HasColumnOrder(1);
 21146
 21147                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 21148
 21149                    b.Property<byte[]>("CodeHash")
 21150                        .IsRequired()
 21151                        .HasColumnType("bytea")
 21152                        .HasColumnName("code_hash");
 21153
 21154                    b.Property<DateTime>("CreatedAt")
 21155                        .ValueGeneratedOnAdd()
 21156                        .HasColumnType("timestamp with time zone")
 21157                        .HasColumnName("created_at")
 21158                        .HasDefaultValueSql("now()");
 21159
 21160                    b.Property<long>("TwoFactorAuthId")
 21161                        .HasColumnType("bigint")
 21162                        .HasColumnName("two_factor_auth_id");
 21163
 21164                    b.Property<bool>("Used")
 21165                        .ValueGeneratedOnAdd()
 21166                        .HasColumnType("boolean")
 21167                        .HasDefaultValue(false)
 21168                        .HasColumnName("used");
 21169
 21170                    b.Property<DateTime?>("UsedAt")
 21171                        .HasColumnType("timestamp with time zone")
 21172                        .HasColumnName("used_at");
 21173
 21174                    b.HasKey("Id")
 21175                        .HasName("pk_two_factor_recovery_code");
 21176
 21177                    b.HasIndex("TwoFactorAuthId")
 21178                        .HasDatabaseName("ix_two_factor_recovery_code_two_factor_auth_id");
 21179
 21180                    b.ToTable("two_factor_recovery_code", "heimdall");
 41181                });
 1182
 21183            modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
 21184                {
 21185                    b.Property<int>("Id")
 21186                        .ValueGeneratedOnAdd()
 21187                        .HasColumnType("integer")
 21188                        .HasColumnName("id");
 21189
 21190                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 21191
 21192                    b.Property<string>("FriendlyName")
 21193                        .HasColumnType("text")
 21194                        .HasColumnName("friendly_name");
 21195
 21196                    b.Property<string>("Xml")
 21197                        .HasColumnType("text")
 21198                        .HasColumnName("xml");
 21199
 21200                    b.HasKey("Id")
 21201                        .HasName("pk_data_protection_keys");
 21202
 21203                    b.ToTable("data_protection_keys", "heimdall");
 41204                });
 1205
 21206            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 21207                {
 21208                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Owner")
 21209                        .WithMany("OwnedApplications")
 21210                        .HasForeignKey("OwnerId")
 21211                        .OnDelete(DeleteBehavior.Cascade)
 21212                        .IsRequired()
 21213                        .HasConstraintName("fk_application_person_owner_id");
 21214
 21215                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21216                        .WithMany("Applications")
 21217                        .HasForeignKey("ScopeId")
 21218                        .OnDelete(DeleteBehavior.Cascade)
 21219                        .IsRequired()
 21220                        .HasConstraintName("fk_application_scope_scope_id");
 21221
 21222                    b.Navigation("Owner");
 21223
 21224                    b.Navigation("Scope");
 41225                });
 1226
 21227            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ApplicationCredential", b =>
 21228                {
 21229                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Application", "Application")
 21230                        .WithMany("Credentials")
 21231                        .HasForeignKey("ApplicationId")
 21232                        .OnDelete(DeleteBehavior.Cascade)
 21233                        .IsRequired()
 21234                        .HasConstraintName("fk_application_credential_application_application_id");
 21235
 21236                    b.Navigation("Application");
 41237                });
 1238
 21239            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 21240                {
 21241                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21242                        .WithMany("EmailVerificationTokens")
 21243                        .HasForeignKey("PersonId")
 21244                        .OnDelete(DeleteBehavior.Cascade)
 21245                        .IsRequired()
 21246                        .HasConstraintName("fk_email_verification_token_person_person_id");
 21247
 21248                    b.Navigation("Person");
 41249                });
 1250
 21251            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 21252                {
 21253                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21254                        .WithMany("GoogleUsers")
 21255                        .HasForeignKey("ScopeId")
 21256                        .OnDelete(DeleteBehavior.Cascade)
 21257                        .IsRequired()
 21258                        .HasConstraintName("fk_google_user_scope_scope_id");
 21259
 21260                    b.Navigation("Scope");
 41261                });
 1262
 21263            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 21264                {
 21265                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21266                        .WithMany("PasswordResetTokens")
 21267                        .HasForeignKey("PersonId")
 21268                        .OnDelete(DeleteBehavior.Cascade)
 21269                        .IsRequired()
 21270                        .HasConstraintName("fk_password_reset_token_person_person_id");
 21271
 21272                    b.Navigation("Person");
 41273                });
 1274
 21275            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PendingRegistration", b =>
 21276                {
 21277                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21278                        .WithMany()
 21279                        .HasForeignKey("ScopeId")
 21280                        .OnDelete(DeleteBehavior.Cascade)
 21281                        .IsRequired()
 21282                        .HasConstraintName("fk_pending_registration_scope_scope_id");
 21283
 21284                    b.Navigation("Scope");
 41285                });
 1286
 21287            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 21288                {
 21289                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Role", "Role")
 21290                        .WithMany("Persons")
 21291                        .HasForeignKey("RoleId")
 21292                        .OnDelete(DeleteBehavior.Restrict)
 21293                        .IsRequired()
 21294                        .HasConstraintName("fk_person_roles_role_id");
 21295
 21296                    b.Navigation("Role");
 41297                });
 1298
 21299            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 21300                {
 21301                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21302                        .WithMany("ScopeOwnerships")
 21303                        .HasForeignKey("PersonId")
 21304                        .OnDelete(DeleteBehavior.Cascade)
 21305                        .IsRequired()
 21306                        .HasConstraintName("fk_scope_owner_person_person_id");
 21307
 21308                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21309                        .WithMany("Owners")
 21310                        .HasForeignKey("ScopeId")
 21311                        .OnDelete(DeleteBehavior.Cascade)
 21312                        .IsRequired()
 21313                        .HasConstraintName("fk_scope_owner_scope_scope_id");
 21314
 21315                    b.Navigation("Person");
 21316
 21317                    b.Navigation("Scope");
 41318                });
 1319
 21320            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 21321                {
 21322                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21323                        .WithMany("ScopePermissions")
 21324                        .HasForeignKey("ScopeId")
 21325                        .OnDelete(DeleteBehavior.Cascade)
 21326                        .IsRequired()
 21327                        .HasConstraintName("fk_scope_permission_scope_scope_id");
 21328
 21329                    b.Navigation("Scope");
 41330                });
 1331
 21332            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 21333                {
 21334                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21335                        .WithOne("ScopeMembership")
 21336                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.ScopeUser", "PersonId")
 21337                        .OnDelete(DeleteBehavior.Cascade)
 21338                        .IsRequired()
 21339                        .HasConstraintName("fk_scope_user_person_person_id");
 21340
 21341                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21342                        .WithMany("Users")
 21343                        .HasForeignKey("ScopeId")
 21344                        .OnDelete(DeleteBehavior.Cascade)
 21345                        .IsRequired()
 21346                        .HasConstraintName("fk_scope_user_scope_scope_id");
 21347
 21348                    b.Navigation("Person");
 21349
 21350                    b.Navigation("Scope");
 41351                });
 1352
 21353            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 21354                {
 21355                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21356                        .WithOne("TwoFactorAuth")
 21357                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "PersonId")
 21358                        .OnDelete(DeleteBehavior.Cascade)
 21359                        .IsRequired()
 21360                        .HasConstraintName("fk_two_factor_auth_person_person_id");
 21361
 21362                    b.Navigation("Person");
 41363                });
 1364
 21365            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 21366                {
 21367                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 21368                        .WithMany("EmailCodes")
 21369                        .HasForeignKey("TwoFactorAuthId")
 21370                        .OnDelete(DeleteBehavior.Cascade)
 21371                        .IsRequired()
 21372                        .HasConstraintName("fk_two_factor_email_code_two_factor_auth_two_factor_auth_id");
 21373
 21374                    b.Navigation("TwoFactorAuth");
 41375                });
 1376
 21377            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 21378                {
 21379                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 21380                        .WithMany("RecoveryCodes")
 21381                        .HasForeignKey("TwoFactorAuthId")
 21382                        .OnDelete(DeleteBehavior.Cascade)
 21383                        .IsRequired()
 21384                        .HasConstraintName("fk_two_factor_recovery_code_two_factor_auth_two_factor_auth_id");
 21385
 21386                    b.Navigation("TwoFactorAuth");
 41387                });
 1388
 21389            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 21390                {
 21391                    b.Navigation("Credentials");
 41392                });
 1393
 21394            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 21395                {
 21396                    b.Navigation("EmailVerificationTokens");
 21397
 21398                    b.Navigation("OwnedApplications");
 21399
 21400                    b.Navigation("PasswordResetTokens");
 21401
 21402                    b.Navigation("ScopeMembership");
 21403
 21404                    b.Navigation("ScopeOwnerships");
 21405
 21406                    b.Navigation("TwoFactorAuth");
 41407                });
 1408
 21409            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 21410                {
 21411                    b.Navigation("Persons");
 41412                });
 1413
 21414            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 21415                {
 21416                    b.Navigation("Applications");
 21417
 21418                    b.Navigation("GoogleUsers");
 21419
 21420                    b.Navigation("Owners");
 21421
 21422                    b.Navigation("ScopePermissions");
 21423
 21424                    b.Navigation("Users");
 41425                });
 1426
 21427            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 21428                {
 21429                    b.Navigation("EmailCodes");
 21430
 21431                    b.Navigation("RecoveryCodes");
 41432                });
 1433#pragma warning restore 612, 618
 21434        }
 1435    }
 1436}