< Summary - Heimdall API

Line coverage
99%
Covered lines: 1198
Uncovered lines: 5
Coverable lines: 1203
Total lines: 1286
Line coverage: 99.5%
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/20261014045512_AddAuditLogTargetIndex.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore.Migrations;
 2
 3#nullable disable
 4
 5namespace ArturRios.Heimdall.Data.Migrations
 6{
 7    /// <summary>
 8    ///     Indexes AUDIT_LOG.target_id, so UC-48's filter by affected entity (FR-AT-01) reads an index
 9    ///     rather than the whole trail.
 10    /// </summary>
 11    /// <remarks>
 12    ///     Adding an index is DDL, not a row change, so the append-only triggers installed by
 13    ///     MakeAuditLogAppendOnly and AllowClearingAuditActor neither see it nor need changing. No
 14    ///     column is added, so the record of processing (Data Protection Document §5.1) is unchanged.
 15    /// </remarks>
 16    public partial class AddAuditLogTargetIndex : Migration
 17    {
 18        /// <inheritdoc />
 19        protected override void Up(MigrationBuilder migrationBuilder)
 20        {
 421            migrationBuilder.CreateIndex(
 422                name: "ix_audit_log_target_id",
 423                schema: "heimdall",
 424                table: "audit_log",
 425                column: "target_id");
 426        }
 27
 28        /// <inheritdoc />
 29        protected override void Down(MigrationBuilder migrationBuilder)
 30        {
 031            migrationBuilder.DropIndex(
 032                name: "ix_audit_log_target_id",
 033                schema: "heimdall",
 034                table: "audit_log");
 035        }
 36    }
 37}

/home/runner/work/heimdall-api/heimdall-api/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20261014045512_AddAuditLogTargetIndex.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("20261014045512_AddAuditLogTargetIndex")]
 16    partial class AddAuditLogTargetIndex
 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.AuditLog", 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<string>("Action")
 2102                        .IsRequired()
 2103                        .HasMaxLength(200)
 2104                        .HasColumnType("character varying(200)")
 2105                        .HasColumnName("action");
 2106
 2107                    b.Property<Guid?>("ActorPersonId")
 2108                        .HasColumnType("uuid")
 2109                        .HasColumnName("actor_person_id");
 2110
 2111                    b.Property<int?>("ActorRole")
 2112                        .HasColumnType("integer")
 2113                        .HasColumnName("actor_role");
 2114
 2115                    b.Property<DateTime>("CreatedAt")
 2116                        .ValueGeneratedOnAdd()
 2117                        .HasColumnType("timestamp with time zone")
 2118                        .HasColumnName("created_at")
 2119                        .HasDefaultValueSql("now()");
 2120
 2121                    b.Property<string>("FailureReason")
 2122                        .HasMaxLength(500)
 2123                        .HasColumnType("character varying(500)")
 2124                        .HasColumnName("failure_reason");
 2125
 2126                    b.Property<Guid>("PublicId")
 2127                        .HasColumnType("uuid")
 2128                        .HasColumnName("public_id");
 2129
 2130                    b.Property<bool>("Succeeded")
 2131                        .HasColumnType("boolean")
 2132                        .HasColumnName("succeeded");
 2133
 2134                    b.Property<Guid?>("TargetId")
 2135                        .HasColumnType("uuid")
 2136                        .HasColumnName("target_id");
 2137
 2138                    b.HasKey("Id")
 2139                        .HasName("pk_audit_log");
 2140
 2141                    b.HasIndex("ActorPersonId")
 2142                        .HasDatabaseName("ix_audit_log_actor_person_id");
 2143
 2144                    b.HasIndex("CreatedAt")
 2145                        .HasDatabaseName("ix_audit_log_created_at");
 2146
 2147                    b.HasIndex("PublicId")
 2148                        .IsUnique()
 2149                        .HasDatabaseName("ix_audit_log_public_id");
 2150
 2151                    b.HasIndex("TargetId")
 2152                        .HasDatabaseName("ix_audit_log_target_id");
 2153
 2154                    b.ToTable("audit_log", "heimdall");
 4155                });
 156
 2157            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 2158                {
 2159                    b.Property<long>("Id")
 2160                        .ValueGeneratedOnAdd()
 2161                        .HasColumnType("bigint")
 2162                        .HasColumnName("id")
 2163                        .HasColumnOrder(1);
 2164
 2165                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2166
 2167                    b.Property<DateTime>("ExpiresAt")
 2168                        .HasColumnType("timestamp with time zone")
 2169                        .HasColumnName("expires_at");
 2170
 2171                    b.Property<long>("PersonId")
 2172                        .HasColumnType("bigint")
 2173                        .HasColumnName("person_id");
 2174
 2175                    b.Property<string>("TokenHash")
 2176                        .IsRequired()
 2177                        .HasMaxLength(64)
 2178                        .HasColumnType("character varying(64)")
 2179                        .HasColumnName("token_hash");
 2180
 2181                    b.Property<bool>("Used")
 2182                        .ValueGeneratedOnAdd()
 2183                        .HasColumnType("boolean")
 2184                        .HasDefaultValue(false)
 2185                        .HasColumnName("used");
 2186
 2187                    b.HasKey("Id")
 2188                        .HasName("pk_email_verification_token");
 2189
 2190                    b.HasIndex("PersonId")
 2191                        .HasDatabaseName("ix_email_verification_token_person_id");
 2192
 2193                    b.HasIndex("TokenHash")
 2194                        .IsUnique()
 2195                        .HasDatabaseName("ix_email_verification_token_token_hash");
 2196
 2197                    b.ToTable("email_verification_token", "heimdall");
 4198                });
 199
 2200            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 2201                {
 2202                    b.Property<long>("Id")
 2203                        .ValueGeneratedOnAdd()
 2204                        .HasColumnType("bigint")
 2205                        .HasColumnName("id")
 2206                        .HasColumnOrder(1);
 2207
 2208                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2209
 2210                    b.Property<DateTime?>("AnonymisedAt")
 2211                        .HasColumnType("timestamp with time zone")
 2212                        .HasColumnName("anonymised_at");
 2213
 2214                    b.Property<DateTime?>("BasisRecordedAt")
 2215                        .HasColumnType("timestamp with time zone")
 2216                        .HasColumnName("basis_recorded_at");
 2217
 2218                    b.Property<DateTime>("CreatedAt")
 2219                        .ValueGeneratedOnAdd()
 2220                        .HasColumnType("timestamp with time zone")
 2221                        .HasColumnName("created_at")
 2222                        .HasDefaultValueSql("now()");
 2223
 2224                    b.Property<DateTime?>("DeletedAt")
 2225                        .HasColumnType("timestamp with time zone")
 2226                        .HasColumnName("deleted_at");
 2227
 2228                    b.Property<int?>("DeletionKind")
 2229                        .HasColumnType("integer")
 2230                        .HasColumnName("deletion_kind");
 2231
 2232                    b.Property<string>("Email")
 2233                        .IsRequired()
 2234                        .HasMaxLength(256)
 2235                        .HasColumnType("character varying(256)")
 2236                        .HasColumnName("email");
 2237
 2238                    b.Property<bool>("EmailVerified")
 2239                        .ValueGeneratedOnAdd()
 2240                        .HasColumnType("boolean")
 2241                        .HasDefaultValue(false)
 2242                        .HasColumnName("email_verified");
 2243
 2244                    b.Property<string>("ErasureBlockedReason")
 2245                        .HasMaxLength(500)
 2246                        .HasColumnType("character varying(500)")
 2247                        .HasColumnName("erasure_blocked_reason");
 2248
 2249                    b.Property<DateTime?>("ErasureDueAt")
 2250                        .HasColumnType("timestamp with time zone")
 2251                        .HasColumnName("erasure_due_at");
 2252
 2253                    b.Property<DateTime?>("ErasureRequestedAt")
 2254                        .HasColumnType("timestamp with time zone")
 2255                        .HasColumnName("erasure_requested_at");
 2256
 2257                    b.Property<string>("GoogleId")
 2258                        .IsRequired()
 2259                        .HasMaxLength(255)
 2260                        .HasColumnType("character varying(255)")
 2261                        .HasColumnName("google_id");
 2262
 2263                    b.Property<bool>("IsDeleted")
 2264                        .ValueGeneratedOnAdd()
 2265                        .HasColumnType("boolean")
 2266                        .HasDefaultValue(false)
 2267                        .HasColumnName("is_deleted");
 2268
 2269                    b.Property<int>("LegalBasis")
 2270                        .ValueGeneratedOnAdd()
 2271                        .HasColumnType("integer")
 2272                        .HasDefaultValue(0)
 2273                        .HasColumnName("legal_basis");
 2274
 2275                    b.Property<string>("Name")
 2276                        .IsRequired()
 2277                        .HasMaxLength(200)
 2278                        .HasColumnType("character varying(200)")
 2279                        .HasColumnName("name");
 2280
 2281                    b.Property<string>("PrivacyNoticeVersion")
 2282                        .HasMaxLength(50)
 2283                        .HasColumnType("character varying(50)")
 2284                        .HasColumnName("privacy_notice_version");
 2285
 2286                    b.Property<DateTime?>("ProcessingRestrictedAt")
 2287                        .HasColumnType("timestamp with time zone")
 2288                        .HasColumnName("processing_restricted_at");
 2289
 2290                    b.Property<string>("ProfilePictureUrl")
 2291                        .HasMaxLength(2048)
 2292                        .HasColumnType("character varying(2048)")
 2293                        .HasColumnName("profile_picture_url");
 2294
 2295                    b.Property<Guid>("PublicId")
 2296                        .HasColumnType("uuid")
 2297                        .HasColumnName("public_id");
 2298
 2299                    b.Property<int?>("RestrictionGround")
 2300                        .HasColumnType("integer")
 2301                        .HasColumnName("restriction_ground");
 2302
 2303                    b.Property<DateTime?>("RestrictionLiftNotifiedAt")
 2304                        .HasColumnType("timestamp with time zone")
 2305                        .HasColumnName("restriction_lift_notified_at");
 2306
 2307                    b.Property<long>("ScopeId")
 2308                        .HasColumnType("bigint")
 2309                        .HasColumnName("scope_id");
 2310
 2311                    b.Property<DateTime>("UpdatedAt")
 2312                        .ValueGeneratedOnAdd()
 2313                        .HasColumnType("timestamp with time zone")
 2314                        .HasColumnName("updated_at")
 2315                        .HasDefaultValueSql("now()");
 2316
 2317                    b.HasKey("Id")
 2318                        .HasName("pk_google_user");
 2319
 2320                    b.HasIndex("DeletedAt")
 2321                        .HasDatabaseName("ix_google_user_deleted_at")
 2322                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 2323
 2324                    b.HasIndex("ProcessingRestrictedAt")
 2325                        .HasDatabaseName("ix_google_user_processing_restricted_at")
 2326                        .HasFilter("processing_restricted_at IS NOT NULL");
 2327
 2328                    b.HasIndex("PublicId")
 2329                        .IsUnique()
 2330                        .HasDatabaseName("ix_google_user_public_id");
 2331
 2332                    b.HasIndex("ScopeId", "Email")
 2333                        .IsUnique()
 2334                        .HasDatabaseName("ix_google_user_scope_id_email");
 2335
 2336                    b.HasIndex("ScopeId", "GoogleId")
 2337                        .IsUnique()
 2338                        .HasDatabaseName("ix_google_user_scope_id_google_id");
 2339
 2340                    b.ToTable("google_user", "heimdall");
 4341                });
 342
 2343            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 2344                {
 2345                    b.Property<long>("Id")
 2346                        .ValueGeneratedOnAdd()
 2347                        .HasColumnType("bigint")
 2348                        .HasColumnName("id")
 2349                        .HasColumnOrder(1);
 2350
 2351                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2352
 2353                    b.Property<DateTime>("ExpiresAt")
 2354                        .HasColumnType("timestamp with time zone")
 2355                        .HasColumnName("expires_at");
 2356
 2357                    b.Property<long>("PersonId")
 2358                        .HasColumnType("bigint")
 2359                        .HasColumnName("person_id");
 2360
 2361                    b.Property<string>("TokenHash")
 2362                        .IsRequired()
 2363                        .HasMaxLength(64)
 2364                        .HasColumnType("character varying(64)")
 2365                        .HasColumnName("token_hash");
 2366
 2367                    b.Property<bool>("Used")
 2368                        .ValueGeneratedOnAdd()
 2369                        .HasColumnType("boolean")
 2370                        .HasDefaultValue(false)
 2371                        .HasColumnName("used");
 2372
 2373                    b.HasKey("Id")
 2374                        .HasName("pk_password_reset_token");
 2375
 2376                    b.HasIndex("PersonId")
 2377                        .HasDatabaseName("ix_password_reset_token_person_id");
 2378
 2379                    b.HasIndex("TokenHash")
 2380                        .IsUnique()
 2381                        .HasDatabaseName("ix_password_reset_token_token_hash");
 2382
 2383                    b.ToTable("password_reset_token", "heimdall");
 4384                });
 385
 2386            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PendingRegistration", b =>
 2387                {
 2388                    b.Property<long>("Id")
 2389                        .ValueGeneratedOnAdd()
 2390                        .HasColumnType("bigint")
 2391                        .HasColumnName("id")
 2392                        .HasColumnOrder(1);
 2393
 2394                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2395
 2396                    b.Property<DateTime>("CreatedAt")
 2397                        .ValueGeneratedOnAdd()
 2398                        .HasColumnType("timestamp with time zone")
 2399                        .HasColumnName("created_at")
 2400                        .HasDefaultValueSql("now()");
 2401
 2402                    b.Property<string>("Email")
 2403                        .IsRequired()
 2404                        .HasMaxLength(256)
 2405                        .HasColumnType("character varying(256)")
 2406                        .HasColumnName("email");
 2407
 2408                    b.Property<DateTime>("ExpiresAt")
 2409                        .HasColumnType("timestamp with time zone")
 2410                        .HasColumnName("expires_at");
 2411
 2412                    b.Property<int>("FailedAttempts")
 2413                        .ValueGeneratedOnAdd()
 2414                        .HasColumnType("integer")
 2415                        .HasDefaultValue(0)
 2416                        .HasColumnName("failed_attempts");
 2417
 2418                    b.Property<string>("Name")
 2419                        .IsRequired()
 2420                        .HasMaxLength(200)
 2421                        .HasColumnType("character varying(200)")
 2422                        .HasColumnName("name");
 2423
 2424                    b.Property<byte[]>("PasswordHash")
 2425                        .IsRequired()
 2426                        .HasColumnType("bytea")
 2427                        .HasColumnName("password_hash");
 2428
 2429                    b.Property<byte[]>("Salt")
 2430                        .IsRequired()
 2431                        .HasColumnType("bytea")
 2432                        .HasColumnName("salt");
 2433
 2434                    b.Property<long>("ScopeId")
 2435                        .HasColumnType("bigint")
 2436                        .HasColumnName("scope_id");
 2437
 2438                    b.Property<string>("TokenHash")
 2439                        .IsRequired()
 2440                        .HasMaxLength(64)
 2441                        .HasColumnType("character varying(64)")
 2442                        .HasColumnName("token_hash");
 2443
 2444                    b.HasKey("Id")
 2445                        .HasName("pk_pending_registration");
 2446
 2447                    b.HasIndex("ScopeId")
 2448                        .HasDatabaseName("ix_pending_registration_scope_id");
 2449
 2450                    b.HasIndex("TokenHash")
 2451                        .IsUnique()
 2452                        .HasDatabaseName("ix_pending_registration_token_hash");
 2453
 2454                    b.ToTable("pending_registration", "heimdall");
 4455                });
 456
 2457            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 2458                {
 2459                    b.Property<long>("Id")
 2460                        .ValueGeneratedOnAdd()
 2461                        .HasColumnType("bigint")
 2462                        .HasColumnName("id")
 2463                        .HasColumnOrder(1);
 2464
 2465                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2466
 2467                    b.Property<DateTime?>("AnonymisedAt")
 2468                        .HasColumnType("timestamp with time zone")
 2469                        .HasColumnName("anonymised_at");
 2470
 2471                    b.Property<DateTime?>("BasisRecordedAt")
 2472                        .HasColumnType("timestamp with time zone")
 2473                        .HasColumnName("basis_recorded_at");
 2474
 2475                    b.Property<DateTime>("CreatedAt")
 2476                        .ValueGeneratedOnAdd()
 2477                        .HasColumnType("timestamp with time zone")
 2478                        .HasColumnName("created_at")
 2479                        .HasDefaultValueSql("now()");
 2480
 2481                    b.Property<DateTime?>("DeletedAt")
 2482                        .HasColumnType("timestamp with time zone")
 2483                        .HasColumnName("deleted_at");
 2484
 2485                    b.Property<int?>("DeletionKind")
 2486                        .HasColumnType("integer")
 2487                        .HasColumnName("deletion_kind");
 2488
 2489                    b.Property<string>("Email")
 2490                        .IsRequired()
 2491                        .HasMaxLength(256)
 2492                        .HasColumnType("character varying(256)")
 2493                        .HasColumnName("email");
 2494
 2495                    b.Property<bool>("EmailVerified")
 2496                        .ValueGeneratedOnAdd()
 2497                        .HasColumnType("boolean")
 2498                        .HasDefaultValue(false)
 2499                        .HasColumnName("email_verified");
 2500
 2501                    b.Property<string>("ErasureBlockedReason")
 2502                        .HasMaxLength(500)
 2503                        .HasColumnType("character varying(500)")
 2504                        .HasColumnName("erasure_blocked_reason");
 2505
 2506                    b.Property<DateTime?>("ErasureDueAt")
 2507                        .HasColumnType("timestamp with time zone")
 2508                        .HasColumnName("erasure_due_at");
 2509
 2510                    b.Property<DateTime?>("ErasureRequestedAt")
 2511                        .HasColumnType("timestamp with time zone")
 2512                        .HasColumnName("erasure_requested_at");
 2513
 2514                    b.Property<int>("FailedLoginAttempts")
 2515                        .HasColumnType("integer")
 2516                        .HasColumnName("failed_login_attempts");
 2517
 2518                    b.Property<bool>("IsDeleted")
 2519                        .ValueGeneratedOnAdd()
 2520                        .HasColumnType("boolean")
 2521                        .HasDefaultValue(false)
 2522                        .HasColumnName("is_deleted");
 2523
 2524                    b.Property<int>("LegalBasis")
 2525                        .ValueGeneratedOnAdd()
 2526                        .HasColumnType("integer")
 2527                        .HasDefaultValue(0)
 2528                        .HasColumnName("legal_basis");
 2529
 2530                    b.Property<DateTime?>("LockedOutUntil")
 2531                        .HasColumnType("timestamp with time zone")
 2532                        .HasColumnName("locked_out_until");
 2533
 2534                    b.Property<string>("Name")
 2535                        .IsRequired()
 2536                        .HasMaxLength(200)
 2537                        .HasColumnType("character varying(200)")
 2538                        .HasColumnName("name");
 2539
 2540                    b.Property<byte[]>("PasswordHash")
 2541                        .IsRequired()
 2542                        .HasColumnType("bytea")
 2543                        .HasColumnName("password_hash");
 2544
 2545                    b.Property<string>("PrivacyNoticeVersion")
 2546                        .HasMaxLength(50)
 2547                        .HasColumnType("character varying(50)")
 2548                        .HasColumnName("privacy_notice_version");
 2549
 2550                    b.Property<DateTime?>("ProcessingRestrictedAt")
 2551                        .HasColumnType("timestamp with time zone")
 2552                        .HasColumnName("processing_restricted_at");
 2553
 2554                    b.Property<Guid>("PublicId")
 2555                        .HasColumnType("uuid")
 2556                        .HasColumnName("public_id");
 2557
 2558                    b.Property<int?>("RestrictionGround")
 2559                        .HasColumnType("integer")
 2560                        .HasColumnName("restriction_ground");
 2561
 2562                    b.Property<DateTime?>("RestrictionLiftNotifiedAt")
 2563                        .HasColumnType("timestamp with time zone")
 2564                        .HasColumnName("restriction_lift_notified_at");
 2565
 2566                    b.Property<long>("RoleId")
 2567                        .HasColumnType("bigint")
 2568                        .HasColumnName("role_id");
 2569
 2570                    b.Property<byte[]>("Salt")
 2571                        .IsRequired()
 2572                        .HasColumnType("bytea")
 2573                        .HasColumnName("salt");
 2574
 2575                    b.Property<long?>("ScopeId")
 2576                        .HasColumnType("bigint")
 2577                        .HasColumnName("scope_id");
 2578
 2579                    b.Property<DateTime>("UpdatedAt")
 2580                        .ValueGeneratedOnAdd()
 2581                        .HasColumnType("timestamp with time zone")
 2582                        .HasColumnName("updated_at")
 2583                        .HasDefaultValueSql("now()");
 2584
 2585                    b.HasKey("Id")
 2586                        .HasName("pk_person");
 2587
 2588                    b.HasIndex("DeletedAt")
 2589                        .HasDatabaseName("ix_person_deleted_at")
 2590                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 2591
 2592                    b.HasIndex("Email")
 2593                        .HasDatabaseName("ix_person_email");
 2594
 2595                    b.HasIndex("ProcessingRestrictedAt")
 2596                        .HasDatabaseName("ix_person_processing_restricted_at")
 2597                        .HasFilter("processing_restricted_at IS NOT NULL");
 2598
 2599                    b.HasIndex("PublicId")
 2600                        .IsUnique()
 2601                        .HasDatabaseName("ix_person_public_id");
 2602
 2603                    b.HasIndex("RoleId")
 2604                        .HasDatabaseName("ix_person_role_id");
 2605
 2606                    b.ToTable("person", "heimdall");
 4607                });
 608
 2609            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 2610                {
 2611                    b.Property<long>("Id")
 2612                        .HasColumnType("bigint")
 2613                        .HasColumnName("id")
 2614                        .HasColumnOrder(1);
 2615
 2616                    b.Property<string>("Description")
 2617                        .HasMaxLength(500)
 2618                        .HasColumnType("character varying(500)")
 2619                        .HasColumnName("description");
 2620
 2621                    b.Property<string>("Name")
 2622                        .IsRequired()
 2623                        .HasMaxLength(200)
 2624                        .HasColumnType("character varying(200)")
 2625                        .HasColumnName("name");
 2626
 2627                    b.Property<Guid>("PublicId")
 2628                        .HasColumnType("uuid")
 2629                        .HasColumnName("public_id");
 2630
 2631                    b.HasKey("Id")
 2632                        .HasName("pk_role");
 2633
 2634                    b.HasIndex("Name")
 2635                        .IsUnique()
 2636                        .HasDatabaseName("ix_role_name");
 2637
 2638                    b.HasIndex("PublicId")
 2639                        .IsUnique()
 2640                        .HasDatabaseName("ix_role_public_id");
 2641
 2642                    b.ToTable("role", "heimdall");
 4643                });
 644
 2645            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 2646                {
 2647                    b.Property<long>("Id")
 2648                        .ValueGeneratedOnAdd()
 2649                        .HasColumnType("bigint")
 2650                        .HasColumnName("id")
 2651                        .HasColumnOrder(1);
 2652
 2653                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2654
 2655                    b.Property<DateTime>("CreatedAt")
 2656                        .ValueGeneratedOnAdd()
 2657                        .HasColumnType("timestamp with time zone")
 2658                        .HasColumnName("created_at")
 2659                        .HasDefaultValueSql("now()");
 2660
 2661                    b.Property<int?>("DefaultLegalBasis")
 2662                        .HasColumnType("integer")
 2663                        .HasColumnName("default_legal_basis");
 2664
 2665                    b.Property<string>("Description")
 2666                        .HasMaxLength(500)
 2667                        .HasColumnType("character varying(500)")
 2668                        .HasColumnName("description");
 2669
 2670                    b.Property<string>("EmailVerificationUrl")
 2671                        .HasMaxLength(2048)
 2672                        .HasColumnType("character varying(2048)")
 2673                        .HasColumnName("email_verification_url");
 2674
 2675                    b.Property<bool>("GoogleSignInEnabled")
 2676                        .ValueGeneratedOnAdd()
 2677                        .HasColumnType("boolean")
 2678                        .HasDefaultValue(false)
 2679                        .HasColumnName("google_sign_in_enabled");
 2680
 2681                    b.Property<bool>("IsDeleted")
 2682                        .ValueGeneratedOnAdd()
 2683                        .HasColumnType("boolean")
 2684                        .HasDefaultValue(false)
 2685                        .HasColumnName("is_deleted");
 2686
 2687                    b.Property<string>("Name")
 2688                        .IsRequired()
 2689                        .HasMaxLength(200)
 2690                        .HasColumnType("character varying(200)")
 2691                        .HasColumnName("name");
 2692
 2693                    b.Property<string>("PasswordResetUrl")
 2694                        .HasMaxLength(2048)
 2695                        .HasColumnType("character varying(2048)")
 2696                        .HasColumnName("password_reset_url");
 2697
 2698                    b.Property<string>("PrivacyNoticeUri")
 2699                        .HasMaxLength(2048)
 2700                        .HasColumnType("character varying(2048)")
 2701                        .HasColumnName("privacy_notice_uri");
 2702
 2703                    b.Property<Guid>("PublicId")
 2704                        .HasColumnType("uuid")
 2705                        .HasColumnName("public_id");
 2706
 2707                    b.Property<bool>("SelfRegistrationEnabled")
 2708                        .ValueGeneratedOnAdd()
 2709                        .HasColumnType("boolean")
 2710                        .HasDefaultValue(false)
 2711                        .HasColumnName("self_registration_enabled");
 2712
 2713                    b.Property<DateTime>("UpdatedAt")
 2714                        .ValueGeneratedOnAdd()
 2715                        .HasColumnType("timestamp with time zone")
 2716                        .HasColumnName("updated_at")
 2717                        .HasDefaultValueSql("now()");
 2718
 2719                    b.HasKey("Id")
 2720                        .HasName("pk_scope");
 2721
 2722                    b.HasIndex("Name")
 2723                        .IsUnique()
 2724                        .HasDatabaseName("ix_scope_name");
 2725
 2726                    b.HasIndex("PublicId")
 2727                        .IsUnique()
 2728                        .HasDatabaseName("ix_scope_public_id");
 2729
 2730                    b.ToTable("scope", "heimdall");
 4731                });
 732
 2733            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 2734                {
 2735                    b.Property<long>("ScopeId")
 2736                        .HasColumnType("bigint")
 2737                        .HasColumnName("scope_id");
 2738
 2739                    b.Property<long>("PersonId")
 2740                        .HasColumnType("bigint")
 2741                        .HasColumnName("person_id");
 2742
 2743                    b.HasKey("ScopeId", "PersonId")
 2744                        .HasName("pk_scope_owner");
 2745
 2746                    b.HasIndex("PersonId")
 2747                        .HasDatabaseName("ix_scope_owner_person_id");
 2748
 2749                    b.ToTable("scope_owner", "heimdall");
 4750                });
 751
 2752            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 2753                {
 2754                    b.Property<long>("Id")
 2755                        .ValueGeneratedOnAdd()
 2756                        .HasColumnType("bigint")
 2757                        .HasColumnName("id")
 2758                        .HasColumnOrder(1);
 2759
 2760                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2761
 2762                    b.Property<DateTime>("CreatedAt")
 2763                        .ValueGeneratedOnAdd()
 2764                        .HasColumnType("timestamp with time zone")
 2765                        .HasColumnName("created_at")
 2766                        .HasDefaultValueSql("now()");
 2767
 2768                    b.Property<string>("Description")
 2769                        .HasMaxLength(500)
 2770                        .HasColumnType("character varying(500)")
 2771                        .HasColumnName("description");
 2772
 2773                    b.Property<bool>("IncludeAsJwtClaim")
 2774                        .ValueGeneratedOnAdd()
 2775                        .HasColumnType("boolean")
 2776                        .HasDefaultValue(false)
 2777                        .HasColumnName("include_as_jwt_claim");
 2778
 2779                    b.Property<bool>("IsDeleted")
 2780                        .ValueGeneratedOnAdd()
 2781                        .HasColumnType("boolean")
 2782                        .HasDefaultValue(false)
 2783                        .HasColumnName("is_deleted");
 2784
 2785                    b.Property<string>("Name")
 2786                        .IsRequired()
 2787                        .HasMaxLength(200)
 2788                        .HasColumnType("character varying(200)")
 2789                        .HasColumnName("name");
 2790
 2791                    b.Property<Guid>("PublicId")
 2792                        .HasColumnType("uuid")
 2793                        .HasColumnName("public_id");
 2794
 2795                    b.Property<long>("ScopeId")
 2796                        .HasColumnType("bigint")
 2797                        .HasColumnName("scope_id");
 2798
 2799                    b.Property<DateTime>("UpdatedAt")
 2800                        .ValueGeneratedOnAdd()
 2801                        .HasColumnType("timestamp with time zone")
 2802                        .HasColumnName("updated_at")
 2803                        .HasDefaultValueSql("now()");
 2804
 2805                    b.HasKey("Id")
 2806                        .HasName("pk_scope_permission");
 2807
 2808                    b.HasIndex("PublicId")
 2809                        .IsUnique()
 2810                        .HasDatabaseName("ix_scope_permission_public_id");
 2811
 2812                    b.HasIndex("ScopeId")
 2813                        .HasDatabaseName("ix_scope_permission_scope_id");
 2814
 2815                    b.ToTable("scope_permission", "heimdall");
 4816                });
 817
 2818            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 2819                {
 2820                    b.Property<long>("ScopeId")
 2821                        .HasColumnType("bigint")
 2822                        .HasColumnName("scope_id");
 2823
 2824                    b.Property<long>("PersonId")
 2825                        .HasColumnType("bigint")
 2826                        .HasColumnName("person_id");
 2827
 2828                    b.HasKey("ScopeId", "PersonId")
 2829                        .HasName("pk_scope_user");
 2830
 2831                    b.HasIndex("PersonId")
 2832                        .IsUnique()
 2833                        .HasDatabaseName("ix_scope_user_person_id");
 2834
 2835                    b.ToTable("scope_user", "heimdall");
 4836                });
 837
 2838            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 2839                {
 2840                    b.Property<long>("Id")
 2841                        .ValueGeneratedOnAdd()
 2842                        .HasColumnType("bigint")
 2843                        .HasColumnName("id")
 2844                        .HasColumnOrder(1);
 2845
 2846                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2847
 2848                    b.Property<bool>("AppEnabled")
 2849                        .ValueGeneratedOnAdd()
 2850                        .HasColumnType("boolean")
 2851                        .HasDefaultValue(false)
 2852                        .HasColumnName("app_enabled");
 2853
 2854                    b.Property<int>("ChallengeAttempts")
 2855                        .ValueGeneratedOnAdd()
 2856                        .HasColumnType("integer")
 2857                        .HasDefaultValue(0)
 2858                        .HasColumnName("challenge_attempts");
 2859
 2860                    b.Property<Guid?>("ChallengeId")
 2861                        .HasColumnType("uuid")
 2862                        .HasColumnName("challenge_id");
 2863
 2864                    b.Property<DateTime>("CreatedAt")
 2865                        .ValueGeneratedOnAdd()
 2866                        .HasColumnType("timestamp with time zone")
 2867                        .HasColumnName("created_at")
 2868                        .HasDefaultValueSql("now()");
 2869
 2870                    b.Property<int>("EmailCodeReissueCount")
 2871                        .ValueGeneratedOnAdd()
 2872                        .HasColumnType("integer")
 2873                        .HasDefaultValue(0)
 2874                        .HasColumnName("email_code_reissue_count");
 2875
 2876                    b.Property<bool>("EmailEnabled")
 2877                        .ValueGeneratedOnAdd()
 2878                        .HasColumnType("boolean")
 2879                        .HasDefaultValue(false)
 2880                        .HasColumnName("email_enabled");
 2881
 2882                    b.Property<bool>("IsActive")
 2883                        .ValueGeneratedOnAdd()
 2884                        .HasColumnType("boolean")
 2885                        .HasDefaultValue(false)
 2886                        .HasColumnName("is_active");
 2887
 2888                    b.Property<long?>("LastTotpTimeStepUsed")
 2889                        .HasColumnType("bigint")
 2890                        .HasColumnName("last_totp_time_step_used");
 2891
 2892                    b.Property<long>("PersonId")
 2893                        .HasColumnType("bigint")
 2894                        .HasColumnName("person_id");
 2895
 2896                    b.Property<byte[]>("TotpSecretEncrypted")
 2897                        .HasColumnType("bytea")
 2898                        .HasColumnName("totp_secret_encrypted");
 2899
 2900                    b.Property<DateTime>("UpdatedAt")
 2901                        .ValueGeneratedOnAdd()
 2902                        .HasColumnType("timestamp with time zone")
 2903                        .HasColumnName("updated_at")
 2904                        .HasDefaultValueSql("now()");
 2905
 2906                    b.HasKey("Id")
 2907                        .HasName("pk_two_factor_auth");
 2908
 2909                    b.HasIndex("PersonId")
 2910                        .IsUnique()
 2911                        .HasDatabaseName("ix_two_factor_auth_person_id");
 2912
 2913                    b.ToTable("two_factor_auth", "heimdall");
 4914                });
 915
 2916            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 2917                {
 2918                    b.Property<long>("Id")
 2919                        .ValueGeneratedOnAdd()
 2920                        .HasColumnType("bigint")
 2921                        .HasColumnName("id")
 2922                        .HasColumnOrder(1);
 2923
 2924                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2925
 2926                    b.Property<byte[]>("CodeHash")
 2927                        .IsRequired()
 2928                        .HasColumnType("bytea")
 2929                        .HasColumnName("code_hash");
 2930
 2931                    b.Property<DateTime>("CreatedAt")
 2932                        .ValueGeneratedOnAdd()
 2933                        .HasColumnType("timestamp with time zone")
 2934                        .HasColumnName("created_at")
 2935                        .HasDefaultValueSql("now()");
 2936
 2937                    b.Property<DateTime>("ExpiresAt")
 2938                        .HasColumnType("timestamp with time zone")
 2939                        .HasColumnName("expires_at");
 2940
 2941                    b.Property<int>("FailedAttempts")
 2942                        .HasColumnType("integer")
 2943                        .HasColumnName("failed_attempts");
 2944
 2945                    b.Property<byte[]>("Salt")
 2946                        .IsRequired()
 2947                        .HasColumnType("bytea")
 2948                        .HasColumnName("salt");
 2949
 2950                    b.Property<long>("TwoFactorAuthId")
 2951                        .HasColumnType("bigint")
 2952                        .HasColumnName("two_factor_auth_id");
 2953
 2954                    b.Property<bool>("Used")
 2955                        .ValueGeneratedOnAdd()
 2956                        .HasColumnType("boolean")
 2957                        .HasDefaultValue(false)
 2958                        .HasColumnName("used");
 2959
 2960                    b.HasKey("Id")
 2961                        .HasName("pk_two_factor_email_code");
 2962
 2963                    b.HasIndex("TwoFactorAuthId")
 2964                        .HasDatabaseName("ix_two_factor_email_code_two_factor_auth_id");
 2965
 2966                    b.ToTable("two_factor_email_code", "heimdall");
 4967                });
 968
 2969            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 2970                {
 2971                    b.Property<long>("Id")
 2972                        .ValueGeneratedOnAdd()
 2973                        .HasColumnType("bigint")
 2974                        .HasColumnName("id")
 2975                        .HasColumnOrder(1);
 2976
 2977                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2978
 2979                    b.Property<byte[]>("CodeHash")
 2980                        .IsRequired()
 2981                        .HasColumnType("bytea")
 2982                        .HasColumnName("code_hash");
 2983
 2984                    b.Property<DateTime>("CreatedAt")
 2985                        .ValueGeneratedOnAdd()
 2986                        .HasColumnType("timestamp with time zone")
 2987                        .HasColumnName("created_at")
 2988                        .HasDefaultValueSql("now()");
 2989
 2990                    b.Property<long>("TwoFactorAuthId")
 2991                        .HasColumnType("bigint")
 2992                        .HasColumnName("two_factor_auth_id");
 2993
 2994                    b.Property<bool>("Used")
 2995                        .ValueGeneratedOnAdd()
 2996                        .HasColumnType("boolean")
 2997                        .HasDefaultValue(false)
 2998                        .HasColumnName("used");
 2999
 21000                    b.Property<DateTime?>("UsedAt")
 21001                        .HasColumnType("timestamp with time zone")
 21002                        .HasColumnName("used_at");
 21003
 21004                    b.HasKey("Id")
 21005                        .HasName("pk_two_factor_recovery_code");
 21006
 21007                    b.HasIndex("TwoFactorAuthId")
 21008                        .HasDatabaseName("ix_two_factor_recovery_code_two_factor_auth_id");
 21009
 21010                    b.ToTable("two_factor_recovery_code", "heimdall");
 41011                });
 1012
 21013            modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
 21014                {
 21015                    b.Property<int>("Id")
 21016                        .ValueGeneratedOnAdd()
 21017                        .HasColumnType("integer")
 21018                        .HasColumnName("id");
 21019
 21020                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 21021
 21022                    b.Property<string>("FriendlyName")
 21023                        .HasColumnType("text")
 21024                        .HasColumnName("friendly_name");
 21025
 21026                    b.Property<string>("Xml")
 21027                        .HasColumnType("text")
 21028                        .HasColumnName("xml");
 21029
 21030                    b.HasKey("Id")
 21031                        .HasName("pk_data_protection_keys");
 21032
 21033                    b.ToTable("data_protection_keys", "heimdall");
 41034                });
 1035
 21036            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 21037                {
 21038                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Owner")
 21039                        .WithMany("OwnedApplications")
 21040                        .HasForeignKey("OwnerId")
 21041                        .OnDelete(DeleteBehavior.Cascade)
 21042                        .IsRequired()
 21043                        .HasConstraintName("fk_application_person_owner_id");
 21044
 21045                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21046                        .WithMany("Applications")
 21047                        .HasForeignKey("ScopeId")
 21048                        .OnDelete(DeleteBehavior.Cascade)
 21049                        .IsRequired()
 21050                        .HasConstraintName("fk_application_scope_scope_id");
 21051
 21052                    b.Navigation("Owner");
 21053
 21054                    b.Navigation("Scope");
 41055                });
 1056
 21057            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 21058                {
 21059                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21060                        .WithMany("EmailVerificationTokens")
 21061                        .HasForeignKey("PersonId")
 21062                        .OnDelete(DeleteBehavior.Cascade)
 21063                        .IsRequired()
 21064                        .HasConstraintName("fk_email_verification_token_person_person_id");
 21065
 21066                    b.Navigation("Person");
 41067                });
 1068
 21069            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 21070                {
 21071                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21072                        .WithMany("GoogleUsers")
 21073                        .HasForeignKey("ScopeId")
 21074                        .OnDelete(DeleteBehavior.Cascade)
 21075                        .IsRequired()
 21076                        .HasConstraintName("fk_google_user_scope_scope_id");
 21077
 21078                    b.Navigation("Scope");
 41079                });
 1080
 21081            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 21082                {
 21083                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21084                        .WithMany("PasswordResetTokens")
 21085                        .HasForeignKey("PersonId")
 21086                        .OnDelete(DeleteBehavior.Cascade)
 21087                        .IsRequired()
 21088                        .HasConstraintName("fk_password_reset_token_person_person_id");
 21089
 21090                    b.Navigation("Person");
 41091                });
 1092
 21093            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PendingRegistration", b =>
 21094                {
 21095                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21096                        .WithMany()
 21097                        .HasForeignKey("ScopeId")
 21098                        .OnDelete(DeleteBehavior.Cascade)
 21099                        .IsRequired()
 21100                        .HasConstraintName("fk_pending_registration_scope_scope_id");
 21101
 21102                    b.Navigation("Scope");
 41103                });
 1104
 21105            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 21106                {
 21107                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Role", "Role")
 21108                        .WithMany("Persons")
 21109                        .HasForeignKey("RoleId")
 21110                        .OnDelete(DeleteBehavior.Restrict)
 21111                        .IsRequired()
 21112                        .HasConstraintName("fk_person_roles_role_id");
 21113
 21114                    b.Navigation("Role");
 41115                });
 1116
 21117            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 21118                {
 21119                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21120                        .WithMany("ScopeOwnerships")
 21121                        .HasForeignKey("PersonId")
 21122                        .OnDelete(DeleteBehavior.Cascade)
 21123                        .IsRequired()
 21124                        .HasConstraintName("fk_scope_owner_person_person_id");
 21125
 21126                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21127                        .WithMany("Owners")
 21128                        .HasForeignKey("ScopeId")
 21129                        .OnDelete(DeleteBehavior.Cascade)
 21130                        .IsRequired()
 21131                        .HasConstraintName("fk_scope_owner_scope_scope_id");
 21132
 21133                    b.Navigation("Person");
 21134
 21135                    b.Navigation("Scope");
 41136                });
 1137
 21138            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 21139                {
 21140                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21141                        .WithMany("ScopePermissions")
 21142                        .HasForeignKey("ScopeId")
 21143                        .OnDelete(DeleteBehavior.Cascade)
 21144                        .IsRequired()
 21145                        .HasConstraintName("fk_scope_permission_scope_scope_id");
 21146
 21147                    b.Navigation("Scope");
 41148                });
 1149
 21150            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 21151                {
 21152                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21153                        .WithOne("ScopeMembership")
 21154                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.ScopeUser", "PersonId")
 21155                        .OnDelete(DeleteBehavior.Cascade)
 21156                        .IsRequired()
 21157                        .HasConstraintName("fk_scope_user_person_person_id");
 21158
 21159                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 21160                        .WithMany("Users")
 21161                        .HasForeignKey("ScopeId")
 21162                        .OnDelete(DeleteBehavior.Cascade)
 21163                        .IsRequired()
 21164                        .HasConstraintName("fk_scope_user_scope_scope_id");
 21165
 21166                    b.Navigation("Person");
 21167
 21168                    b.Navigation("Scope");
 41169                });
 1170
 21171            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 21172                {
 21173                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 21174                        .WithOne("TwoFactorAuth")
 21175                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "PersonId")
 21176                        .OnDelete(DeleteBehavior.Cascade)
 21177                        .IsRequired()
 21178                        .HasConstraintName("fk_two_factor_auth_person_person_id");
 21179
 21180                    b.Navigation("Person");
 41181                });
 1182
 21183            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 21184                {
 21185                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 21186                        .WithMany("EmailCodes")
 21187                        .HasForeignKey("TwoFactorAuthId")
 21188                        .OnDelete(DeleteBehavior.Cascade)
 21189                        .IsRequired()
 21190                        .HasConstraintName("fk_two_factor_email_code_two_factor_auth_two_factor_auth_id");
 21191
 21192                    b.Navigation("TwoFactorAuth");
 41193                });
 1194
 21195            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 21196                {
 21197                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 21198                        .WithMany("RecoveryCodes")
 21199                        .HasForeignKey("TwoFactorAuthId")
 21200                        .OnDelete(DeleteBehavior.Cascade)
 21201                        .IsRequired()
 21202                        .HasConstraintName("fk_two_factor_recovery_code_two_factor_auth_two_factor_auth_id");
 21203
 21204                    b.Navigation("TwoFactorAuth");
 41205                });
 1206
 21207            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 21208                {
 21209                    b.Navigation("EmailVerificationTokens");
 21210
 21211                    b.Navigation("OwnedApplications");
 21212
 21213                    b.Navigation("PasswordResetTokens");
 21214
 21215                    b.Navigation("ScopeMembership");
 21216
 21217                    b.Navigation("ScopeOwnerships");
 21218
 21219                    b.Navigation("TwoFactorAuth");
 41220                });
 1221
 21222            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 21223                {
 21224                    b.Navigation("Persons");
 41225                });
 1226
 21227            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 21228                {
 21229                    b.Navigation("Applications");
 21230
 21231                    b.Navigation("GoogleUsers");
 21232
 21233                    b.Navigation("Owners");
 21234
 21235                    b.Navigation("ScopePermissions");
 21236
 21237                    b.Navigation("Users");
 41238                });
 1239
 21240            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 21241                {
 21242                    b.Navigation("EmailCodes");
 21243
 21244                    b.Navigation("RecoveryCodes");
 41245                });
 1246#pragma warning restore 612, 618
 21247        }
 1248    }
 1249}