< Summary - Heimdall API

Line coverage
99%
Covered lines: 1315
Uncovered lines: 4
Coverable lines: 1319
Total lines: 1410
Line coverage: 99.6%
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/20261014105559_AddApplicationCredential.cs

#LineLine coverage
 1using System;
 2using Microsoft.EntityFrameworkCore.Migrations;
 3using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 4
 5#nullable disable
 6
 7namespace ArturRios.Heimdall.Data.Migrations
 8{
 9    /// <summary>
 10    ///     Creates APPLICATION_CREDENTIAL (UC-53…UC-57, FR-AP-10): the hashed secrets an application
 11    ///     exchanges for an application token.
 12    /// </summary>
 13    /// <remarks>
 14    ///     A new table with no existing rows, so nothing is backfilled. It holds no personal data —
 15    ///     an application reference, a SHA-256 and four instants — which the Data Protection
 16    ///     Document records; the Data Retention Schedule's token row covers its purge.
 17    /// </remarks>
 18    public partial class AddApplicationCredential : Migration
 19    {
 20        /// <inheritdoc />
 21        protected override void Up(MigrationBuilder migrationBuilder)
 22        {
 423            migrationBuilder.CreateTable(
 424                name: "application_credential",
 425                schema: "heimdall",
 426                columns: table => new
 427                {
 428                    id = table.Column<long>(type: "bigint", nullable: false)
 429                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultCol
 430                    public_id = table.Column<Guid>(type: "uuid", nullable: false),
 431                    application_id = table.Column<long>(type: "bigint", nullable: false),
 432                    secret_hash = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
 433                    created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
 434                    expires_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
 435                    revoked_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
 436                    last_used_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true)
 437                },
 438                constraints: table =>
 439                {
 440                    table.PrimaryKey("pk_application_credential", x => x.id);
 441                    table.ForeignKey(
 442                        name: "fk_application_credential_application_application_id",
 443                        column: x => x.application_id,
 444                        principalSchema: "heimdall",
 445                        principalTable: "application",
 446                        principalColumn: "id",
 447                        onDelete: ReferentialAction.Cascade);
 848                });
 49
 450            migrationBuilder.CreateIndex(
 451                name: "ix_application_credential_application_id",
 452                schema: "heimdall",
 453                table: "application_credential",
 454                column: "application_id");
 55
 456            migrationBuilder.CreateIndex(
 457                name: "ix_application_credential_public_id",
 458                schema: "heimdall",
 459                table: "application_credential",
 460                column: "public_id",
 461                unique: true);
 62
 463            migrationBuilder.CreateIndex(
 464                name: "ix_application_credential_secret_hash",
 465                schema: "heimdall",
 466                table: "application_credential",
 467                column: "secret_hash",
 468                unique: true);
 469        }
 70
 71        /// <inheritdoc />
 72        protected override void Down(MigrationBuilder migrationBuilder)
 73        {
 074            migrationBuilder.DropTable(
 075                name: "application_credential",
 076                schema: "heimdall");
 077        }
 78    }
 79}

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