< Summary - Heimdall API

Line coverage
99%
Covered lines: 914
Uncovered lines: 4
Coverable lines: 918
Total lines: 993
Line coverage: 99.5%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
66%
Covered methods: 2
Fully covered methods: 2
Total methods: 3
Method coverage: 66.6%
Full method coverage: 66.6%

Metrics

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

File(s)

/home/runner/work/heimdall-api/heimdall-api/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20260811203209_AddAuditLog.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    /// <inheritdoc />
 10    public partial class AddAuditLog : Migration
 11    {
 12        /// <inheritdoc />
 13        protected override void Up(MigrationBuilder migrationBuilder)
 14        {
 415            migrationBuilder.CreateTable(
 416                name: "audit_log",
 417                schema: "heimdall",
 418                columns: table => new
 419                {
 420                    id = table.Column<long>(type: "bigint", nullable: false)
 421                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultCol
 422                    public_id = table.Column<Guid>(type: "uuid", nullable: false),
 423                    actor_person_id = table.Column<Guid>(type: "uuid", nullable: true),
 424                    actor_role = table.Column<int>(type: "integer", nullable: true),
 425                    action = table.Column<string>(type: "text", nullable: false),
 426                    target_id = table.Column<Guid>(type: "uuid", nullable: true),
 427                    created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueS
 428                },
 429                constraints: table =>
 430                {
 431                    table.PrimaryKey("pk_audit_log", x => x.id);
 832                });
 33
 434            migrationBuilder.CreateIndex(
 435                name: "ix_audit_log_public_id",
 436                schema: "heimdall",
 437                table: "audit_log",
 438                column: "public_id",
 439                unique: true);
 440        }
 41
 42        /// <inheritdoc />
 43        protected override void Down(MigrationBuilder migrationBuilder)
 44        {
 045            migrationBuilder.DropTable(
 046                name: "audit_log",
 047                schema: "heimdall");
 048        }
 49    }
 50}

/home/runner/work/heimdall-api/heimdall-api/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20260811203209_AddAuditLog.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("20260811203209_AddAuditLog")]
 16    partial class AddAuditLog
 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.10")
 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                        .HasColumnType("text")
 2104                        .HasColumnName("action");
 2105
 2106                    b.Property<Guid?>("ActorPersonId")
 2107                        .HasColumnType("uuid")
 2108                        .HasColumnName("actor_person_id");
 2109
 2110                    b.Property<int?>("ActorRole")
 2111                        .HasColumnType("integer")
 2112                        .HasColumnName("actor_role");
 2113
 2114                    b.Property<DateTime>("CreatedAt")
 2115                        .ValueGeneratedOnAdd()
 2116                        .HasColumnType("timestamp with time zone")
 2117                        .HasColumnName("created_at")
 2118                        .HasDefaultValueSql("now()");
 2119
 2120                    b.Property<Guid>("PublicId")
 2121                        .HasColumnType("uuid")
 2122                        .HasColumnName("public_id");
 2123
 2124                    b.Property<Guid?>("TargetId")
 2125                        .HasColumnType("uuid")
 2126                        .HasColumnName("target_id");
 2127
 2128                    b.HasKey("Id")
 2129                        .HasName("pk_audit_log");
 2130
 2131                    b.HasIndex("PublicId")
 2132                        .IsUnique()
 2133                        .HasDatabaseName("ix_audit_log_public_id");
 2134
 2135                    b.ToTable("audit_log", "heimdall");
 4136                });
 137
 2138            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 2139                {
 2140                    b.Property<long>("Id")
 2141                        .ValueGeneratedOnAdd()
 2142                        .HasColumnType("bigint")
 2143                        .HasColumnName("id")
 2144                        .HasColumnOrder(1);
 2145
 2146                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2147
 2148                    b.Property<DateTime>("ExpiresAt")
 2149                        .HasColumnType("timestamp with time zone")
 2150                        .HasColumnName("expires_at");
 2151
 2152                    b.Property<long>("PersonId")
 2153                        .HasColumnType("bigint")
 2154                        .HasColumnName("person_id");
 2155
 2156                    b.Property<string>("Token")
 2157                        .IsRequired()
 2158                        .HasMaxLength(256)
 2159                        .HasColumnType("character varying(256)")
 2160                        .HasColumnName("token");
 2161
 2162                    b.Property<bool>("Used")
 2163                        .ValueGeneratedOnAdd()
 2164                        .HasColumnType("boolean")
 2165                        .HasDefaultValue(false)
 2166                        .HasColumnName("used");
 2167
 2168                    b.HasKey("Id")
 2169                        .HasName("pk_email_verification_token");
 2170
 2171                    b.HasIndex("PersonId")
 2172                        .HasDatabaseName("ix_email_verification_token_person_id");
 2173
 2174                    b.HasIndex("Token")
 2175                        .IsUnique()
 2176                        .HasDatabaseName("ix_email_verification_token_token");
 2177
 2178                    b.ToTable("email_verification_token", "heimdall");
 4179                });
 180
 2181            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 2182                {
 2183                    b.Property<long>("Id")
 2184                        .ValueGeneratedOnAdd()
 2185                        .HasColumnType("bigint")
 2186                        .HasColumnName("id")
 2187                        .HasColumnOrder(1);
 2188
 2189                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2190
 2191                    b.Property<DateTime>("CreatedAt")
 2192                        .ValueGeneratedOnAdd()
 2193                        .HasColumnType("timestamp with time zone")
 2194                        .HasColumnName("created_at")
 2195                        .HasDefaultValueSql("now()");
 2196
 2197                    b.Property<string>("Email")
 2198                        .IsRequired()
 2199                        .HasMaxLength(256)
 2200                        .HasColumnType("character varying(256)")
 2201                        .HasColumnName("email");
 2202
 2203                    b.Property<bool>("EmailVerified")
 2204                        .ValueGeneratedOnAdd()
 2205                        .HasColumnType("boolean")
 2206                        .HasDefaultValue(false)
 2207                        .HasColumnName("email_verified");
 2208
 2209                    b.Property<string>("GoogleId")
 2210                        .IsRequired()
 2211                        .HasMaxLength(255)
 2212                        .HasColumnType("character varying(255)")
 2213                        .HasColumnName("google_id");
 2214
 2215                    b.Property<bool>("IsDeleted")
 2216                        .ValueGeneratedOnAdd()
 2217                        .HasColumnType("boolean")
 2218                        .HasDefaultValue(false)
 2219                        .HasColumnName("is_deleted");
 2220
 2221                    b.Property<string>("Name")
 2222                        .IsRequired()
 2223                        .HasMaxLength(200)
 2224                        .HasColumnType("character varying(200)")
 2225                        .HasColumnName("name");
 2226
 2227                    b.Property<string>("ProfilePictureUrl")
 2228                        .HasMaxLength(2048)
 2229                        .HasColumnType("character varying(2048)")
 2230                        .HasColumnName("profile_picture_url");
 2231
 2232                    b.Property<Guid>("PublicId")
 2233                        .HasColumnType("uuid")
 2234                        .HasColumnName("public_id");
 2235
 2236                    b.Property<long>("ScopeId")
 2237                        .HasColumnType("bigint")
 2238                        .HasColumnName("scope_id");
 2239
 2240                    b.Property<DateTime>("UpdatedAt")
 2241                        .ValueGeneratedOnAdd()
 2242                        .HasColumnType("timestamp with time zone")
 2243                        .HasColumnName("updated_at")
 2244                        .HasDefaultValueSql("now()");
 2245
 2246                    b.HasKey("Id")
 2247                        .HasName("pk_google_user");
 2248
 2249                    b.HasIndex("PublicId")
 2250                        .IsUnique()
 2251                        .HasDatabaseName("ix_google_user_public_id");
 2252
 2253                    b.HasIndex("ScopeId", "Email")
 2254                        .IsUnique()
 2255                        .HasDatabaseName("ix_google_user_scope_id_email");
 2256
 2257                    b.HasIndex("ScopeId", "GoogleId")
 2258                        .IsUnique()
 2259                        .HasDatabaseName("ix_google_user_scope_id_google_id");
 2260
 2261                    b.ToTable("google_user", "heimdall");
 4262                });
 263
 2264            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 2265                {
 2266                    b.Property<long>("Id")
 2267                        .ValueGeneratedOnAdd()
 2268                        .HasColumnType("bigint")
 2269                        .HasColumnName("id")
 2270                        .HasColumnOrder(1);
 2271
 2272                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2273
 2274                    b.Property<DateTime>("ExpiresAt")
 2275                        .HasColumnType("timestamp with time zone")
 2276                        .HasColumnName("expires_at");
 2277
 2278                    b.Property<long>("PersonId")
 2279                        .HasColumnType("bigint")
 2280                        .HasColumnName("person_id");
 2281
 2282                    b.Property<string>("Token")
 2283                        .IsRequired()
 2284                        .HasMaxLength(256)
 2285                        .HasColumnType("character varying(256)")
 2286                        .HasColumnName("token");
 2287
 2288                    b.Property<bool>("Used")
 2289                        .ValueGeneratedOnAdd()
 2290                        .HasColumnType("boolean")
 2291                        .HasDefaultValue(false)
 2292                        .HasColumnName("used");
 2293
 2294                    b.HasKey("Id")
 2295                        .HasName("pk_password_reset_token");
 2296
 2297                    b.HasIndex("PersonId")
 2298                        .HasDatabaseName("ix_password_reset_token_person_id");
 2299
 2300                    b.HasIndex("Token")
 2301                        .IsUnique()
 2302                        .HasDatabaseName("ix_password_reset_token_token");
 2303
 2304                    b.ToTable("password_reset_token", "heimdall");
 4305                });
 306
 2307            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 2308                {
 2309                    b.Property<long>("Id")
 2310                        .ValueGeneratedOnAdd()
 2311                        .HasColumnType("bigint")
 2312                        .HasColumnName("id")
 2313                        .HasColumnOrder(1);
 2314
 2315                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2316
 2317                    b.Property<DateTime>("CreatedAt")
 2318                        .ValueGeneratedOnAdd()
 2319                        .HasColumnType("timestamp with time zone")
 2320                        .HasColumnName("created_at")
 2321                        .HasDefaultValueSql("now()");
 2322
 2323                    b.Property<string>("Email")
 2324                        .IsRequired()
 2325                        .HasMaxLength(256)
 2326                        .HasColumnType("character varying(256)")
 2327                        .HasColumnName("email");
 2328
 2329                    b.Property<bool>("EmailVerified")
 2330                        .ValueGeneratedOnAdd()
 2331                        .HasColumnType("boolean")
 2332                        .HasDefaultValue(false)
 2333                        .HasColumnName("email_verified");
 2334
 2335                    b.Property<bool>("IsDeleted")
 2336                        .ValueGeneratedOnAdd()
 2337                        .HasColumnType("boolean")
 2338                        .HasDefaultValue(false)
 2339                        .HasColumnName("is_deleted");
 2340
 2341                    b.Property<string>("Name")
 2342                        .IsRequired()
 2343                        .HasMaxLength(200)
 2344                        .HasColumnType("character varying(200)")
 2345                        .HasColumnName("name");
 2346
 2347                    b.Property<byte[]>("PasswordHash")
 2348                        .IsRequired()
 2349                        .HasColumnType("bytea")
 2350                        .HasColumnName("password_hash");
 2351
 2352                    b.Property<Guid>("PublicId")
 2353                        .HasColumnType("uuid")
 2354                        .HasColumnName("public_id");
 2355
 2356                    b.Property<long>("RoleId")
 2357                        .HasColumnType("bigint")
 2358                        .HasColumnName("role_id");
 2359
 2360                    b.Property<byte[]>("Salt")
 2361                        .IsRequired()
 2362                        .HasColumnType("bytea")
 2363                        .HasColumnName("salt");
 2364
 2365                    b.Property<DateTime>("UpdatedAt")
 2366                        .ValueGeneratedOnAdd()
 2367                        .HasColumnType("timestamp with time zone")
 2368                        .HasColumnName("updated_at")
 2369                        .HasDefaultValueSql("now()");
 2370
 2371                    b.HasKey("Id")
 2372                        .HasName("pk_person");
 2373
 2374                    b.HasIndex("Email")
 2375                        .HasDatabaseName("ix_person_email");
 2376
 2377                    b.HasIndex("PublicId")
 2378                        .IsUnique()
 2379                        .HasDatabaseName("ix_person_public_id");
 2380
 2381                    b.HasIndex("RoleId")
 2382                        .HasDatabaseName("ix_person_role_id");
 2383
 2384                    b.ToTable("person", "heimdall");
 4385                });
 386
 2387            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 2388                {
 2389                    b.Property<long>("Id")
 2390                        .HasColumnType("bigint")
 2391                        .HasColumnName("id")
 2392                        .HasColumnOrder(1);
 2393
 2394                    b.Property<string>("Description")
 2395                        .HasMaxLength(500)
 2396                        .HasColumnType("character varying(500)")
 2397                        .HasColumnName("description");
 2398
 2399                    b.Property<string>("Name")
 2400                        .IsRequired()
 2401                        .HasMaxLength(200)
 2402                        .HasColumnType("character varying(200)")
 2403                        .HasColumnName("name");
 2404
 2405                    b.Property<Guid>("PublicId")
 2406                        .HasColumnType("uuid")
 2407                        .HasColumnName("public_id");
 2408
 2409                    b.HasKey("Id")
 2410                        .HasName("pk_role");
 2411
 2412                    b.HasIndex("Name")
 2413                        .IsUnique()
 2414                        .HasDatabaseName("ix_role_name");
 2415
 2416                    b.HasIndex("PublicId")
 2417                        .IsUnique()
 2418                        .HasDatabaseName("ix_role_public_id");
 2419
 2420                    b.ToTable("role", "heimdall");
 4421                });
 422
 2423            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 2424                {
 2425                    b.Property<long>("Id")
 2426                        .ValueGeneratedOnAdd()
 2427                        .HasColumnType("bigint")
 2428                        .HasColumnName("id")
 2429                        .HasColumnOrder(1);
 2430
 2431                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2432
 2433                    b.Property<DateTime>("CreatedAt")
 2434                        .ValueGeneratedOnAdd()
 2435                        .HasColumnType("timestamp with time zone")
 2436                        .HasColumnName("created_at")
 2437                        .HasDefaultValueSql("now()");
 2438
 2439                    b.Property<string>("Description")
 2440                        .HasMaxLength(500)
 2441                        .HasColumnType("character varying(500)")
 2442                        .HasColumnName("description");
 2443
 2444                    b.Property<bool>("GoogleSignInEnabled")
 2445                        .ValueGeneratedOnAdd()
 2446                        .HasColumnType("boolean")
 2447                        .HasDefaultValue(false)
 2448                        .HasColumnName("google_sign_in_enabled");
 2449
 2450                    b.Property<bool>("IsDeleted")
 2451                        .ValueGeneratedOnAdd()
 2452                        .HasColumnType("boolean")
 2453                        .HasDefaultValue(false)
 2454                        .HasColumnName("is_deleted");
 2455
 2456                    b.Property<string>("Name")
 2457                        .IsRequired()
 2458                        .HasMaxLength(200)
 2459                        .HasColumnType("character varying(200)")
 2460                        .HasColumnName("name");
 2461
 2462                    b.Property<Guid>("PublicId")
 2463                        .HasColumnType("uuid")
 2464                        .HasColumnName("public_id");
 2465
 2466                    b.Property<DateTime>("UpdatedAt")
 2467                        .ValueGeneratedOnAdd()
 2468                        .HasColumnType("timestamp with time zone")
 2469                        .HasColumnName("updated_at")
 2470                        .HasDefaultValueSql("now()");
 2471
 2472                    b.HasKey("Id")
 2473                        .HasName("pk_scope");
 2474
 2475                    b.HasIndex("Name")
 2476                        .IsUnique()
 2477                        .HasDatabaseName("ix_scope_name");
 2478
 2479                    b.HasIndex("PublicId")
 2480                        .IsUnique()
 2481                        .HasDatabaseName("ix_scope_public_id");
 2482
 2483                    b.ToTable("scope", "heimdall");
 4484                });
 485
 2486            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 2487                {
 2488                    b.Property<long>("ScopeId")
 2489                        .HasColumnType("bigint")
 2490                        .HasColumnName("scope_id");
 2491
 2492                    b.Property<long>("PersonId")
 2493                        .HasColumnType("bigint")
 2494                        .HasColumnName("person_id");
 2495
 2496                    b.HasKey("ScopeId", "PersonId")
 2497                        .HasName("pk_scope_owner");
 2498
 2499                    b.HasIndex("PersonId")
 2500                        .HasDatabaseName("ix_scope_owner_person_id");
 2501
 2502                    b.ToTable("scope_owner", "heimdall");
 4503                });
 504
 2505            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 2506                {
 2507                    b.Property<long>("Id")
 2508                        .ValueGeneratedOnAdd()
 2509                        .HasColumnType("bigint")
 2510                        .HasColumnName("id")
 2511                        .HasColumnOrder(1);
 2512
 2513                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2514
 2515                    b.Property<DateTime>("CreatedAt")
 2516                        .ValueGeneratedOnAdd()
 2517                        .HasColumnType("timestamp with time zone")
 2518                        .HasColumnName("created_at")
 2519                        .HasDefaultValueSql("now()");
 2520
 2521                    b.Property<string>("Description")
 2522                        .HasMaxLength(500)
 2523                        .HasColumnType("character varying(500)")
 2524                        .HasColumnName("description");
 2525
 2526                    b.Property<bool>("IncludeAsJwtClaim")
 2527                        .ValueGeneratedOnAdd()
 2528                        .HasColumnType("boolean")
 2529                        .HasDefaultValue(false)
 2530                        .HasColumnName("include_as_jwt_claim");
 2531
 2532                    b.Property<bool>("IsDeleted")
 2533                        .ValueGeneratedOnAdd()
 2534                        .HasColumnType("boolean")
 2535                        .HasDefaultValue(false)
 2536                        .HasColumnName("is_deleted");
 2537
 2538                    b.Property<string>("Name")
 2539                        .IsRequired()
 2540                        .HasMaxLength(200)
 2541                        .HasColumnType("character varying(200)")
 2542                        .HasColumnName("name");
 2543
 2544                    b.Property<Guid>("PublicId")
 2545                        .HasColumnType("uuid")
 2546                        .HasColumnName("public_id");
 2547
 2548                    b.Property<long>("ScopeId")
 2549                        .HasColumnType("bigint")
 2550                        .HasColumnName("scope_id");
 2551
 2552                    b.Property<DateTime>("UpdatedAt")
 2553                        .ValueGeneratedOnAdd()
 2554                        .HasColumnType("timestamp with time zone")
 2555                        .HasColumnName("updated_at")
 2556                        .HasDefaultValueSql("now()");
 2557
 2558                    b.HasKey("Id")
 2559                        .HasName("pk_scope_permission");
 2560
 2561                    b.HasIndex("PublicId")
 2562                        .IsUnique()
 2563                        .HasDatabaseName("ix_scope_permission_public_id");
 2564
 2565                    b.HasIndex("ScopeId")
 2566                        .HasDatabaseName("ix_scope_permission_scope_id");
 2567
 2568                    b.ToTable("scope_permission", "heimdall");
 4569                });
 570
 2571            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 2572                {
 2573                    b.Property<long>("ScopeId")
 2574                        .HasColumnType("bigint")
 2575                        .HasColumnName("scope_id");
 2576
 2577                    b.Property<long>("PersonId")
 2578                        .HasColumnType("bigint")
 2579                        .HasColumnName("person_id");
 2580
 2581                    b.HasKey("ScopeId", "PersonId")
 2582                        .HasName("pk_scope_user");
 2583
 2584                    b.HasIndex("PersonId")
 2585                        .IsUnique()
 2586                        .HasDatabaseName("ix_scope_user_person_id");
 2587
 2588                    b.ToTable("scope_user", "heimdall");
 4589                });
 590
 2591            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 2592                {
 2593                    b.Property<long>("Id")
 2594                        .ValueGeneratedOnAdd()
 2595                        .HasColumnType("bigint")
 2596                        .HasColumnName("id")
 2597                        .HasColumnOrder(1);
 2598
 2599                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2600
 2601                    b.Property<bool>("AppEnabled")
 2602                        .ValueGeneratedOnAdd()
 2603                        .HasColumnType("boolean")
 2604                        .HasDefaultValue(false)
 2605                        .HasColumnName("app_enabled");
 2606
 2607                    b.Property<DateTime>("CreatedAt")
 2608                        .ValueGeneratedOnAdd()
 2609                        .HasColumnType("timestamp with time zone")
 2610                        .HasColumnName("created_at")
 2611                        .HasDefaultValueSql("now()");
 2612
 2613                    b.Property<bool>("EmailEnabled")
 2614                        .ValueGeneratedOnAdd()
 2615                        .HasColumnType("boolean")
 2616                        .HasDefaultValue(false)
 2617                        .HasColumnName("email_enabled");
 2618
 2619                    b.Property<bool>("IsActive")
 2620                        .ValueGeneratedOnAdd()
 2621                        .HasColumnType("boolean")
 2622                        .HasDefaultValue(false)
 2623                        .HasColumnName("is_active");
 2624
 2625                    b.Property<long>("PersonId")
 2626                        .HasColumnType("bigint")
 2627                        .HasColumnName("person_id");
 2628
 2629                    b.Property<byte[]>("TotpSecretEncrypted")
 2630                        .HasColumnType("bytea")
 2631                        .HasColumnName("totp_secret_encrypted");
 2632
 2633                    b.Property<DateTime>("UpdatedAt")
 2634                        .ValueGeneratedOnAdd()
 2635                        .HasColumnType("timestamp with time zone")
 2636                        .HasColumnName("updated_at")
 2637                        .HasDefaultValueSql("now()");
 2638
 2639                    b.HasKey("Id")
 2640                        .HasName("pk_two_factor_auth");
 2641
 2642                    b.HasIndex("PersonId")
 2643                        .IsUnique()
 2644                        .HasDatabaseName("ix_two_factor_auth_person_id");
 2645
 2646                    b.ToTable("two_factor_auth", "heimdall");
 4647                });
 648
 2649            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 2650                {
 2651                    b.Property<long>("Id")
 2652                        .ValueGeneratedOnAdd()
 2653                        .HasColumnType("bigint")
 2654                        .HasColumnName("id")
 2655                        .HasColumnOrder(1);
 2656
 2657                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2658
 2659                    b.Property<byte[]>("CodeHash")
 2660                        .IsRequired()
 2661                        .HasColumnType("bytea")
 2662                        .HasColumnName("code_hash");
 2663
 2664                    b.Property<DateTime>("CreatedAt")
 2665                        .ValueGeneratedOnAdd()
 2666                        .HasColumnType("timestamp with time zone")
 2667                        .HasColumnName("created_at")
 2668                        .HasDefaultValueSql("now()");
 2669
 2670                    b.Property<DateTime>("ExpiresAt")
 2671                        .HasColumnType("timestamp with time zone")
 2672                        .HasColumnName("expires_at");
 2673
 2674                    b.Property<byte[]>("Salt")
 2675                        .IsRequired()
 2676                        .HasColumnType("bytea")
 2677                        .HasColumnName("salt");
 2678
 2679                    b.Property<long>("TwoFactorAuthId")
 2680                        .HasColumnType("bigint")
 2681                        .HasColumnName("two_factor_auth_id");
 2682
 2683                    b.Property<bool>("Used")
 2684                        .ValueGeneratedOnAdd()
 2685                        .HasColumnType("boolean")
 2686                        .HasDefaultValue(false)
 2687                        .HasColumnName("used");
 2688
 2689                    b.HasKey("Id")
 2690                        .HasName("pk_two_factor_email_code");
 2691
 2692                    b.HasIndex("TwoFactorAuthId")
 2693                        .HasDatabaseName("ix_two_factor_email_code_two_factor_auth_id");
 2694
 2695                    b.ToTable("two_factor_email_code", "heimdall");
 4696                });
 697
 2698            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 2699                {
 2700                    b.Property<long>("Id")
 2701                        .ValueGeneratedOnAdd()
 2702                        .HasColumnType("bigint")
 2703                        .HasColumnName("id")
 2704                        .HasColumnOrder(1);
 2705
 2706                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 2707
 2708                    b.Property<byte[]>("CodeHash")
 2709                        .IsRequired()
 2710                        .HasColumnType("bytea")
 2711                        .HasColumnName("code_hash");
 2712
 2713                    b.Property<DateTime>("CreatedAt")
 2714                        .ValueGeneratedOnAdd()
 2715                        .HasColumnType("timestamp with time zone")
 2716                        .HasColumnName("created_at")
 2717                        .HasDefaultValueSql("now()");
 2718
 2719                    b.Property<long>("TwoFactorAuthId")
 2720                        .HasColumnType("bigint")
 2721                        .HasColumnName("two_factor_auth_id");
 2722
 2723                    b.Property<bool>("Used")
 2724                        .ValueGeneratedOnAdd()
 2725                        .HasColumnType("boolean")
 2726                        .HasDefaultValue(false)
 2727                        .HasColumnName("used");
 2728
 2729                    b.Property<DateTime?>("UsedAt")
 2730                        .HasColumnType("timestamp with time zone")
 2731                        .HasColumnName("used_at");
 2732
 2733                    b.HasKey("Id")
 2734                        .HasName("pk_two_factor_recovery_code");
 2735
 2736                    b.HasIndex("TwoFactorAuthId")
 2737                        .HasDatabaseName("ix_two_factor_recovery_code_two_factor_auth_id");
 2738
 2739                    b.ToTable("two_factor_recovery_code", "heimdall");
 4740                });
 741
 2742            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 2743                {
 2744                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Owner")
 2745                        .WithMany("OwnedApplications")
 2746                        .HasForeignKey("OwnerId")
 2747                        .OnDelete(DeleteBehavior.Cascade)
 2748                        .IsRequired()
 2749                        .HasConstraintName("fk_application_person_owner_id");
 2750
 2751                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 2752                        .WithMany("Applications")
 2753                        .HasForeignKey("ScopeId")
 2754                        .OnDelete(DeleteBehavior.Cascade)
 2755                        .IsRequired()
 2756                        .HasConstraintName("fk_application_scope_scope_id");
 2757
 2758                    b.Navigation("Owner");
 2759
 2760                    b.Navigation("Scope");
 4761                });
 762
 2763            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 2764                {
 2765                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 2766                        .WithMany("EmailVerificationTokens")
 2767                        .HasForeignKey("PersonId")
 2768                        .OnDelete(DeleteBehavior.Cascade)
 2769                        .IsRequired()
 2770                        .HasConstraintName("fk_email_verification_token_person_person_id");
 2771
 2772                    b.Navigation("Person");
 4773                });
 774
 2775            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 2776                {
 2777                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 2778                        .WithMany("GoogleUsers")
 2779                        .HasForeignKey("ScopeId")
 2780                        .OnDelete(DeleteBehavior.Cascade)
 2781                        .IsRequired()
 2782                        .HasConstraintName("fk_google_user_scope_scope_id");
 2783
 2784                    b.Navigation("Scope");
 4785                });
 786
 2787            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 2788                {
 2789                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 2790                        .WithMany("PasswordResetTokens")
 2791                        .HasForeignKey("PersonId")
 2792                        .OnDelete(DeleteBehavior.Cascade)
 2793                        .IsRequired()
 2794                        .HasConstraintName("fk_password_reset_token_person_person_id");
 2795
 2796                    b.Navigation("Person");
 4797                });
 798
 2799            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 2800                {
 2801                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Role", "Role")
 2802                        .WithMany("Persons")
 2803                        .HasForeignKey("RoleId")
 2804                        .OnDelete(DeleteBehavior.Restrict)
 2805                        .IsRequired()
 2806                        .HasConstraintName("fk_person_roles_role_id");
 2807
 2808                    b.Navigation("Role");
 4809                });
 810
 2811            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 2812                {
 2813                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 2814                        .WithMany("ScopeOwnerships")
 2815                        .HasForeignKey("PersonId")
 2816                        .OnDelete(DeleteBehavior.Cascade)
 2817                        .IsRequired()
 2818                        .HasConstraintName("fk_scope_owner_person_person_id");
 2819
 2820                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 2821                        .WithMany("Owners")
 2822                        .HasForeignKey("ScopeId")
 2823                        .OnDelete(DeleteBehavior.Cascade)
 2824                        .IsRequired()
 2825                        .HasConstraintName("fk_scope_owner_scope_scope_id");
 2826
 2827                    b.Navigation("Person");
 2828
 2829                    b.Navigation("Scope");
 4830                });
 831
 2832            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 2833                {
 2834                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 2835                        .WithMany("ScopePermissions")
 2836                        .HasForeignKey("ScopeId")
 2837                        .OnDelete(DeleteBehavior.Cascade)
 2838                        .IsRequired()
 2839                        .HasConstraintName("fk_scope_permission_scope_scope_id");
 2840
 2841                    b.Navigation("Scope");
 4842                });
 843
 2844            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 2845                {
 2846                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 2847                        .WithOne("ScopeMembership")
 2848                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.ScopeUser", "PersonId")
 2849                        .OnDelete(DeleteBehavior.Cascade)
 2850                        .IsRequired()
 2851                        .HasConstraintName("fk_scope_user_person_person_id");
 2852
 2853                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 2854                        .WithMany("Users")
 2855                        .HasForeignKey("ScopeId")
 2856                        .OnDelete(DeleteBehavior.Cascade)
 2857                        .IsRequired()
 2858                        .HasConstraintName("fk_scope_user_scope_scope_id");
 2859
 2860                    b.Navigation("Person");
 2861
 2862                    b.Navigation("Scope");
 4863                });
 864
 2865            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 2866                {
 2867                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 2868                        .WithOne("TwoFactorAuth")
 2869                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "PersonId")
 2870                        .OnDelete(DeleteBehavior.Cascade)
 2871                        .IsRequired()
 2872                        .HasConstraintName("fk_two_factor_auth_person_person_id");
 2873
 2874                    b.Navigation("Person");
 4875                });
 876
 2877            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 2878                {
 2879                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 2880                        .WithMany("EmailCodes")
 2881                        .HasForeignKey("TwoFactorAuthId")
 2882                        .OnDelete(DeleteBehavior.Cascade)
 2883                        .IsRequired()
 2884                        .HasConstraintName("fk_two_factor_email_code_two_factor_auth_two_factor_auth_id");
 2885
 2886                    b.Navigation("TwoFactorAuth");
 4887                });
 888
 2889            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 2890                {
 2891                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 2892                        .WithMany("RecoveryCodes")
 2893                        .HasForeignKey("TwoFactorAuthId")
 2894                        .OnDelete(DeleteBehavior.Cascade)
 2895                        .IsRequired()
 2896                        .HasConstraintName("fk_two_factor_recovery_code_two_factor_auth_two_factor_auth_id");
 2897
 2898                    b.Navigation("TwoFactorAuth");
 4899                });
 900
 2901            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 2902                {
 2903                    b.Navigation("EmailVerificationTokens");
 2904
 2905                    b.Navigation("OwnedApplications");
 2906
 2907                    b.Navigation("PasswordResetTokens");
 2908
 2909                    b.Navigation("ScopeMembership");
 2910
 2911                    b.Navigation("ScopeOwnerships");
 2912
 2913                    b.Navigation("TwoFactorAuth");
 4914                });
 915
 2916            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 2917                {
 2918                    b.Navigation("Persons");
 4919                });
 920
 2921            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 2922                {
 2923                    b.Navigation("Applications");
 2924
 2925                    b.Navigation("GoogleUsers");
 2926
 2927                    b.Navigation("Owners");
 2928
 2929                    b.Navigation("ScopePermissions");
 2930
 2931                    b.Navigation("Users");
 4932                });
 933
 2934            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 2935                {
 2936                    b.Navigation("EmailCodes");
 2937
 2938                    b.Navigation("RecoveryCodes");
 4939                });
 940#pragma warning restore 612, 618
 2941        }
 942    }
 943}