< Summary - Heimdall API

Line coverage
99%
Covered lines: 1213
Uncovered lines: 9
Coverable lines: 1222
Total lines: 1314
Line coverage: 99.2%
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/20261014052753_AddPendingRegistrationPublicId.cs

#LineLine coverage
 1using System;
 2using Microsoft.EntityFrameworkCore.Migrations;
 3
 4#nullable disable
 5
 6namespace ArturRios.Heimdall.Data.Migrations
 7{
 8    /// <summary>
 9    ///     Adds PENDING_REGISTRATION.public_id — the administrative reference by which a scope's owners
 10    ///     list and discard a self-registration that is waiting for confirmation (UC-49, UC-50) — and
 11    ///     the unique index that keeps it an identifier.
 12    /// </summary>
 13    /// <remarks>
 14    ///     Existing rows are backfilled with gen_random_uuid(): a constant default, which is what
 15    ///     scaffolding produces for a non-nullable column, would give every existing row the same id
 16    ///     and fail the unique index. The default exists only for that backfill and is dropped again,
 17    ///     so the column matches the model, where the entity supplies the id.
 18    ///
 19    ///     The id is random and carries no personal data; its purpose is recorded in §5.1 of the Data
 20    ///     Protection Document. The row's lifetime is unchanged, so the Data Retention Schedule is too.
 21    /// </remarks>
 22    public partial class AddPendingRegistrationPublicId : Migration
 23    {
 24        /// <inheritdoc />
 25        protected override void Up(MigrationBuilder migrationBuilder)
 26        {
 427            migrationBuilder.AddColumn<Guid>(
 428                name: "public_id",
 429                schema: "heimdall",
 430                table: "pending_registration",
 431                type: "uuid",
 432                nullable: false,
 433                defaultValueSql: "gen_random_uuid()");
 34
 435            migrationBuilder.Sql(
 436                "ALTER TABLE heimdall.pending_registration ALTER COLUMN public_id DROP DEFAULT;");
 37
 438            migrationBuilder.CreateIndex(
 439                name: "ix_pending_registration_public_id",
 440                schema: "heimdall",
 441                table: "pending_registration",
 442                column: "public_id",
 443                unique: true);
 444        }
 45
 46        /// <inheritdoc />
 47        protected override void Down(MigrationBuilder migrationBuilder)
 48        {
 049            migrationBuilder.DropIndex(
 050                name: "ix_pending_registration_public_id",
 051                schema: "heimdall",
 052                table: "pending_registration");
 53
 054            migrationBuilder.DropColumn(
 055                name: "public_id",
 056                schema: "heimdall",
 057                table: "pending_registration");
 058        }
 59    }
 60}

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