< Summary - Heimdall API

Line coverage
100%
Covered lines: 1131
Uncovered lines: 0
Coverable lines: 1131
Total lines: 1235
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
100%
Covered methods: 3
Fully covered methods: 3
Total methods: 3
Method coverage: 100%
Full method coverage: 100%

Metrics

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

File(s)

/home/ci/agent/workspace/heimdall-api-docs_main/app/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20260909193718_RecordLegalBasis.cs

#LineLine coverage
 1using System;
 2using Microsoft.EntityFrameworkCore.Migrations;
 3
 4#nullable disable
 5
 6namespace ArturRios.Heimdall.Data.Migrations
 7{
 8    /// <summary>
 9    ///     Adds the lawful basis and privacy notice version recorded against each identity, and the
 10    ///     tenant-level declaration they are resolved from (NFR-23).
 11    /// </summary>
 12    public partial class RecordLegalBasis : Migration
 13    {
 14        /// <inheritdoc />
 15        protected override void Up(MigrationBuilder migrationBuilder)
 16        {
 1917            migrationBuilder.AddColumn<int>(
 1918                name: "default_legal_basis",
 1919                schema: "heimdall",
 1920                table: "scope",
 1921                type: "integer",
 1922                nullable: true);
 23
 1924            migrationBuilder.AddColumn<string>(
 1925                name: "privacy_notice_uri",
 1926                schema: "heimdall",
 1927                table: "scope",
 1928                type: "character varying(2048)",
 1929                maxLength: 2048,
 1930                nullable: true);
 31
 1932            migrationBuilder.AddColumn<DateTime>(
 1933                name: "basis_recorded_at",
 1934                schema: "heimdall",
 1935                table: "person",
 1936                type: "timestamp with time zone",
 1937                nullable: true);
 38
 1939            migrationBuilder.AddColumn<int>(
 1940                name: "legal_basis",
 1941                schema: "heimdall",
 1942                table: "person",
 1943                type: "integer",
 1944                nullable: false,
 1945                defaultValue: 0);
 46
 1947            migrationBuilder.AddColumn<string>(
 1948                name: "privacy_notice_version",
 1949                schema: "heimdall",
 1950                table: "person",
 1951                type: "character varying(50)",
 1952                maxLength: 50,
 1953                nullable: true);
 54
 1955            migrationBuilder.AddColumn<DateTime>(
 1956                name: "basis_recorded_at",
 1957                schema: "heimdall",
 1958                table: "google_user",
 1959                type: "timestamp with time zone",
 1960                nullable: true);
 61
 1962            migrationBuilder.AddColumn<int>(
 1963                name: "legal_basis",
 1964                schema: "heimdall",
 1965                table: "google_user",
 1966                type: "integer",
 1967                nullable: false,
 1968                defaultValue: 0);
 69
 1970            migrationBuilder.AddColumn<string>(
 1971                name: "privacy_notice_version",
 1972                schema: "heimdall",
 1973                table: "google_user",
 1974                type: "character varying(50)",
 1975                maxLength: 50,
 1976                nullable: true);
 77
 78            // Existing rows keep LegalBasis = 0, which the enum names Unrecorded, and a null notice
 79            // version. That is deliberate and is the whole point of having an Unrecorded member.
 80            //
 81            // Contract performance almost certainly applied to every one of them — it is the basis
 82            // for every identity this system has ever created. Writing it here would nonetheless be
 83            // asserting, in the record the controller shows a regulator, something nobody checked
 84            // for those particular rows. Accountability under GDPR Art. 5(2) is the ability to
 85            // demonstrate the basis, and a backfilled guess demonstrates only that a migration ran.
 86            //
 87            // So they are left visibly unrecorded: honest, and obviously a thing to fix rather than
 88            // silently indistinguishable from a row that was recorded properly.
 89
 1990        }
 91
 92        /// <inheritdoc />
 93        protected override void Down(MigrationBuilder migrationBuilder)
 94        {
 195            migrationBuilder.DropColumn(
 196                name: "default_legal_basis",
 197                schema: "heimdall",
 198                table: "scope");
 99
 1100            migrationBuilder.DropColumn(
 1101                name: "privacy_notice_uri",
 1102                schema: "heimdall",
 1103                table: "scope");
 104
 1105            migrationBuilder.DropColumn(
 1106                name: "basis_recorded_at",
 1107                schema: "heimdall",
 1108                table: "person");
 109
 1110            migrationBuilder.DropColumn(
 1111                name: "legal_basis",
 1112                schema: "heimdall",
 1113                table: "person");
 114
 1115            migrationBuilder.DropColumn(
 1116                name: "privacy_notice_version",
 1117                schema: "heimdall",
 1118                table: "person");
 119
 1120            migrationBuilder.DropColumn(
 1121                name: "basis_recorded_at",
 1122                schema: "heimdall",
 1123                table: "google_user");
 124
 1125            migrationBuilder.DropColumn(
 1126                name: "legal_basis",
 1127                schema: "heimdall",
 1128                table: "google_user");
 129
 1130            migrationBuilder.DropColumn(
 1131                name: "privacy_notice_version",
 1132                schema: "heimdall",
 1133                table: "google_user");
 1134        }
 135    }
 136}

/home/ci/agent/workspace/heimdall-api-docs_main/app/src/Infrastructure/ArturRios.Heimdall.Data/Migrations/20260909193718_RecordLegalBasis.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("20260909193718_RecordLegalBasis")]
 16    partial class RecordLegalBasis
 17    {
 18        /// <inheritdoc />
 19        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 20        {
 21#pragma warning disable 612, 618
 1022            modelBuilder
 1023                .HasDefaultSchema("heimdall")
 1024                .HasAnnotation("ProductVersion", "10.0.11")
 1025                .HasAnnotation("Relational:MaxIdentifierLength", 63);
 26
 1027            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
 28
 1029            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 1030                {
 1031                    b.Property<long>("Id")
 1032                        .ValueGeneratedOnAdd()
 1033                        .HasColumnType("bigint")
 1034                        .HasColumnName("id")
 1035                        .HasColumnOrder(1);
 1036
 1037                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 1038
 1039                    b.Property<DateTime>("CreatedAt")
 1040                        .ValueGeneratedOnAdd()
 1041                        .HasColumnType("timestamp with time zone")
 1042                        .HasColumnName("created_at")
 1043                        .HasDefaultValueSql("now()");
 1044
 1045                    b.Property<bool>("IsDeleted")
 1046                        .ValueGeneratedOnAdd()
 1047                        .HasColumnType("boolean")
 1048                        .HasDefaultValue(false)
 1049                        .HasColumnName("is_deleted");
 1050
 1051                    b.Property<string>("Name")
 1052                        .IsRequired()
 1053                        .HasMaxLength(200)
 1054                        .HasColumnType("character varying(200)")
 1055                        .HasColumnName("name");
 1056
 1057                    b.Property<long>("OwnerId")
 1058                        .HasColumnType("bigint")
 1059                        .HasColumnName("owner_id");
 1060
 1061                    b.Property<Guid>("PublicId")
 1062                        .HasColumnType("uuid")
 1063                        .HasColumnName("public_id");
 1064
 1065                    b.Property<long>("ScopeId")
 1066                        .HasColumnType("bigint")
 1067                        .HasColumnName("scope_id");
 1068
 1069                    b.Property<DateTime>("UpdatedAt")
 1070                        .ValueGeneratedOnAdd()
 1071                        .HasColumnType("timestamp with time zone")
 1072                        .HasColumnName("updated_at")
 1073                        .HasDefaultValueSql("now()");
 1074
 1075                    b.HasKey("Id")
 1076                        .HasName("pk_application");
 1077
 1078                    b.HasIndex("OwnerId")
 1079                        .HasDatabaseName("ix_application_owner_id");
 1080
 1081                    b.HasIndex("PublicId")
 1082                        .IsUnique()
 1083                        .HasDatabaseName("ix_application_public_id");
 1084
 1085                    b.HasIndex("ScopeId")
 1086                        .HasDatabaseName("ix_application_scope_id");
 1087
 1088                    b.ToTable("application", "heimdall");
 2089                });
 90
 1091            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.AuditLog", b =>
 1092                {
 1093                    b.Property<long>("Id")
 1094                        .ValueGeneratedOnAdd()
 1095                        .HasColumnType("bigint")
 1096                        .HasColumnName("id")
 1097                        .HasColumnOrder(1);
 1098
 1099                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10100
 10101                    b.Property<string>("Action")
 10102                        .IsRequired()
 10103                        .HasMaxLength(200)
 10104                        .HasColumnType("character varying(200)")
 10105                        .HasColumnName("action");
 10106
 10107                    b.Property<Guid?>("ActorPersonId")
 10108                        .HasColumnType("uuid")
 10109                        .HasColumnName("actor_person_id");
 10110
 10111                    b.Property<int?>("ActorRole")
 10112                        .HasColumnType("integer")
 10113                        .HasColumnName("actor_role");
 10114
 10115                    b.Property<DateTime>("CreatedAt")
 10116                        .ValueGeneratedOnAdd()
 10117                        .HasColumnType("timestamp with time zone")
 10118                        .HasColumnName("created_at")
 10119                        .HasDefaultValueSql("now()");
 10120
 10121                    b.Property<string>("FailureReason")
 10122                        .HasMaxLength(500)
 10123                        .HasColumnType("character varying(500)")
 10124                        .HasColumnName("failure_reason");
 10125
 10126                    b.Property<Guid>("PublicId")
 10127                        .HasColumnType("uuid")
 10128                        .HasColumnName("public_id");
 10129
 10130                    b.Property<bool>("Succeeded")
 10131                        .HasColumnType("boolean")
 10132                        .HasColumnName("succeeded");
 10133
 10134                    b.Property<Guid?>("TargetId")
 10135                        .HasColumnType("uuid")
 10136                        .HasColumnName("target_id");
 10137
 10138                    b.HasKey("Id")
 10139                        .HasName("pk_audit_log");
 10140
 10141                    b.HasIndex("ActorPersonId")
 10142                        .HasDatabaseName("ix_audit_log_actor_person_id");
 10143
 10144                    b.HasIndex("CreatedAt")
 10145                        .HasDatabaseName("ix_audit_log_created_at");
 10146
 10147                    b.HasIndex("PublicId")
 10148                        .IsUnique()
 10149                        .HasDatabaseName("ix_audit_log_public_id");
 10150
 10151                    b.ToTable("audit_log", "heimdall");
 20152                });
 153
 10154            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 10155                {
 10156                    b.Property<long>("Id")
 10157                        .ValueGeneratedOnAdd()
 10158                        .HasColumnType("bigint")
 10159                        .HasColumnName("id")
 10160                        .HasColumnOrder(1);
 10161
 10162                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10163
 10164                    b.Property<DateTime>("ExpiresAt")
 10165                        .HasColumnType("timestamp with time zone")
 10166                        .HasColumnName("expires_at");
 10167
 10168                    b.Property<long>("PersonId")
 10169                        .HasColumnType("bigint")
 10170                        .HasColumnName("person_id");
 10171
 10172                    b.Property<string>("TokenHash")
 10173                        .IsRequired()
 10174                        .HasMaxLength(64)
 10175                        .HasColumnType("character varying(64)")
 10176                        .HasColumnName("token_hash");
 10177
 10178                    b.Property<bool>("Used")
 10179                        .ValueGeneratedOnAdd()
 10180                        .HasColumnType("boolean")
 10181                        .HasDefaultValue(false)
 10182                        .HasColumnName("used");
 10183
 10184                    b.HasKey("Id")
 10185                        .HasName("pk_email_verification_token");
 10186
 10187                    b.HasIndex("PersonId")
 10188                        .HasDatabaseName("ix_email_verification_token_person_id");
 10189
 10190                    b.HasIndex("TokenHash")
 10191                        .IsUnique()
 10192                        .HasDatabaseName("ix_email_verification_token_token_hash");
 10193
 10194                    b.ToTable("email_verification_token", "heimdall");
 20195                });
 196
 10197            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 10198                {
 10199                    b.Property<long>("Id")
 10200                        .ValueGeneratedOnAdd()
 10201                        .HasColumnType("bigint")
 10202                        .HasColumnName("id")
 10203                        .HasColumnOrder(1);
 10204
 10205                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10206
 10207                    b.Property<DateTime?>("AnonymisedAt")
 10208                        .HasColumnType("timestamp with time zone")
 10209                        .HasColumnName("anonymised_at");
 10210
 10211                    b.Property<DateTime?>("BasisRecordedAt")
 10212                        .HasColumnType("timestamp with time zone")
 10213                        .HasColumnName("basis_recorded_at");
 10214
 10215                    b.Property<DateTime>("CreatedAt")
 10216                        .ValueGeneratedOnAdd()
 10217                        .HasColumnType("timestamp with time zone")
 10218                        .HasColumnName("created_at")
 10219                        .HasDefaultValueSql("now()");
 10220
 10221                    b.Property<DateTime?>("DeletedAt")
 10222                        .HasColumnType("timestamp with time zone")
 10223                        .HasColumnName("deleted_at");
 10224
 10225                    b.Property<int?>("DeletionKind")
 10226                        .HasColumnType("integer")
 10227                        .HasColumnName("deletion_kind");
 10228
 10229                    b.Property<string>("Email")
 10230                        .IsRequired()
 10231                        .HasMaxLength(256)
 10232                        .HasColumnType("character varying(256)")
 10233                        .HasColumnName("email");
 10234
 10235                    b.Property<bool>("EmailVerified")
 10236                        .ValueGeneratedOnAdd()
 10237                        .HasColumnType("boolean")
 10238                        .HasDefaultValue(false)
 10239                        .HasColumnName("email_verified");
 10240
 10241                    b.Property<string>("ErasureBlockedReason")
 10242                        .HasMaxLength(500)
 10243                        .HasColumnType("character varying(500)")
 10244                        .HasColumnName("erasure_blocked_reason");
 10245
 10246                    b.Property<DateTime?>("ErasureDueAt")
 10247                        .HasColumnType("timestamp with time zone")
 10248                        .HasColumnName("erasure_due_at");
 10249
 10250                    b.Property<DateTime?>("ErasureRequestedAt")
 10251                        .HasColumnType("timestamp with time zone")
 10252                        .HasColumnName("erasure_requested_at");
 10253
 10254                    b.Property<string>("GoogleId")
 10255                        .IsRequired()
 10256                        .HasMaxLength(255)
 10257                        .HasColumnType("character varying(255)")
 10258                        .HasColumnName("google_id");
 10259
 10260                    b.Property<bool>("IsDeleted")
 10261                        .ValueGeneratedOnAdd()
 10262                        .HasColumnType("boolean")
 10263                        .HasDefaultValue(false)
 10264                        .HasColumnName("is_deleted");
 10265
 10266                    b.Property<int>("LegalBasis")
 10267                        .ValueGeneratedOnAdd()
 10268                        .HasColumnType("integer")
 10269                        .HasDefaultValue(0)
 10270                        .HasColumnName("legal_basis");
 10271
 10272                    b.Property<string>("Name")
 10273                        .IsRequired()
 10274                        .HasMaxLength(200)
 10275                        .HasColumnType("character varying(200)")
 10276                        .HasColumnName("name");
 10277
 10278                    b.Property<string>("PrivacyNoticeVersion")
 10279                        .HasMaxLength(50)
 10280                        .HasColumnType("character varying(50)")
 10281                        .HasColumnName("privacy_notice_version");
 10282
 10283                    b.Property<string>("ProfilePictureUrl")
 10284                        .HasMaxLength(2048)
 10285                        .HasColumnType("character varying(2048)")
 10286                        .HasColumnName("profile_picture_url");
 10287
 10288                    b.Property<Guid>("PublicId")
 10289                        .HasColumnType("uuid")
 10290                        .HasColumnName("public_id");
 10291
 10292                    b.Property<long>("ScopeId")
 10293                        .HasColumnType("bigint")
 10294                        .HasColumnName("scope_id");
 10295
 10296                    b.Property<DateTime>("UpdatedAt")
 10297                        .ValueGeneratedOnAdd()
 10298                        .HasColumnType("timestamp with time zone")
 10299                        .HasColumnName("updated_at")
 10300                        .HasDefaultValueSql("now()");
 10301
 10302                    b.HasKey("Id")
 10303                        .HasName("pk_google_user");
 10304
 10305                    b.HasIndex("DeletedAt")
 10306                        .HasDatabaseName("ix_google_user_deleted_at")
 10307                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 10308
 10309                    b.HasIndex("PublicId")
 10310                        .IsUnique()
 10311                        .HasDatabaseName("ix_google_user_public_id");
 10312
 10313                    b.HasIndex("ScopeId", "Email")
 10314                        .IsUnique()
 10315                        .HasDatabaseName("ix_google_user_scope_id_email");
 10316
 10317                    b.HasIndex("ScopeId", "GoogleId")
 10318                        .IsUnique()
 10319                        .HasDatabaseName("ix_google_user_scope_id_google_id");
 10320
 10321                    b.ToTable("google_user", "heimdall");
 20322                });
 323
 10324            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 10325                {
 10326                    b.Property<long>("Id")
 10327                        .ValueGeneratedOnAdd()
 10328                        .HasColumnType("bigint")
 10329                        .HasColumnName("id")
 10330                        .HasColumnOrder(1);
 10331
 10332                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10333
 10334                    b.Property<DateTime>("ExpiresAt")
 10335                        .HasColumnType("timestamp with time zone")
 10336                        .HasColumnName("expires_at");
 10337
 10338                    b.Property<long>("PersonId")
 10339                        .HasColumnType("bigint")
 10340                        .HasColumnName("person_id");
 10341
 10342                    b.Property<string>("TokenHash")
 10343                        .IsRequired()
 10344                        .HasMaxLength(64)
 10345                        .HasColumnType("character varying(64)")
 10346                        .HasColumnName("token_hash");
 10347
 10348                    b.Property<bool>("Used")
 10349                        .ValueGeneratedOnAdd()
 10350                        .HasColumnType("boolean")
 10351                        .HasDefaultValue(false)
 10352                        .HasColumnName("used");
 10353
 10354                    b.HasKey("Id")
 10355                        .HasName("pk_password_reset_token");
 10356
 10357                    b.HasIndex("PersonId")
 10358                        .HasDatabaseName("ix_password_reset_token_person_id");
 10359
 10360                    b.HasIndex("TokenHash")
 10361                        .IsUnique()
 10362                        .HasDatabaseName("ix_password_reset_token_token_hash");
 10363
 10364                    b.ToTable("password_reset_token", "heimdall");
 20365                });
 366
 10367            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 10368                {
 10369                    b.Property<long>("Id")
 10370                        .ValueGeneratedOnAdd()
 10371                        .HasColumnType("bigint")
 10372                        .HasColumnName("id")
 10373                        .HasColumnOrder(1);
 10374
 10375                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10376
 10377                    b.Property<DateTime?>("AnonymisedAt")
 10378                        .HasColumnType("timestamp with time zone")
 10379                        .HasColumnName("anonymised_at");
 10380
 10381                    b.Property<DateTime?>("BasisRecordedAt")
 10382                        .HasColumnType("timestamp with time zone")
 10383                        .HasColumnName("basis_recorded_at");
 10384
 10385                    b.Property<DateTime>("CreatedAt")
 10386                        .ValueGeneratedOnAdd()
 10387                        .HasColumnType("timestamp with time zone")
 10388                        .HasColumnName("created_at")
 10389                        .HasDefaultValueSql("now()");
 10390
 10391                    b.Property<DateTime?>("DeletedAt")
 10392                        .HasColumnType("timestamp with time zone")
 10393                        .HasColumnName("deleted_at");
 10394
 10395                    b.Property<int?>("DeletionKind")
 10396                        .HasColumnType("integer")
 10397                        .HasColumnName("deletion_kind");
 10398
 10399                    b.Property<string>("Email")
 10400                        .IsRequired()
 10401                        .HasMaxLength(256)
 10402                        .HasColumnType("character varying(256)")
 10403                        .HasColumnName("email");
 10404
 10405                    b.Property<bool>("EmailVerified")
 10406                        .ValueGeneratedOnAdd()
 10407                        .HasColumnType("boolean")
 10408                        .HasDefaultValue(false)
 10409                        .HasColumnName("email_verified");
 10410
 10411                    b.Property<string>("ErasureBlockedReason")
 10412                        .HasMaxLength(500)
 10413                        .HasColumnType("character varying(500)")
 10414                        .HasColumnName("erasure_blocked_reason");
 10415
 10416                    b.Property<DateTime?>("ErasureDueAt")
 10417                        .HasColumnType("timestamp with time zone")
 10418                        .HasColumnName("erasure_due_at");
 10419
 10420                    b.Property<DateTime?>("ErasureRequestedAt")
 10421                        .HasColumnType("timestamp with time zone")
 10422                        .HasColumnName("erasure_requested_at");
 10423
 10424                    b.Property<int>("FailedLoginAttempts")
 10425                        .HasColumnType("integer")
 10426                        .HasColumnName("failed_login_attempts");
 10427
 10428                    b.Property<bool>("IsDeleted")
 10429                        .ValueGeneratedOnAdd()
 10430                        .HasColumnType("boolean")
 10431                        .HasDefaultValue(false)
 10432                        .HasColumnName("is_deleted");
 10433
 10434                    b.Property<int>("LegalBasis")
 10435                        .ValueGeneratedOnAdd()
 10436                        .HasColumnType("integer")
 10437                        .HasDefaultValue(0)
 10438                        .HasColumnName("legal_basis");
 10439
 10440                    b.Property<DateTime?>("LockedOutUntil")
 10441                        .HasColumnType("timestamp with time zone")
 10442                        .HasColumnName("locked_out_until");
 10443
 10444                    b.Property<string>("Name")
 10445                        .IsRequired()
 10446                        .HasMaxLength(200)
 10447                        .HasColumnType("character varying(200)")
 10448                        .HasColumnName("name");
 10449
 10450                    b.Property<byte[]>("PasswordHash")
 10451                        .IsRequired()
 10452                        .HasColumnType("bytea")
 10453                        .HasColumnName("password_hash");
 10454
 10455                    b.Property<string>("PrivacyNoticeVersion")
 10456                        .HasMaxLength(50)
 10457                        .HasColumnType("character varying(50)")
 10458                        .HasColumnName("privacy_notice_version");
 10459
 10460                    b.Property<Guid>("PublicId")
 10461                        .HasColumnType("uuid")
 10462                        .HasColumnName("public_id");
 10463
 10464                    b.Property<long>("RoleId")
 10465                        .HasColumnType("bigint")
 10466                        .HasColumnName("role_id");
 10467
 10468                    b.Property<byte[]>("Salt")
 10469                        .IsRequired()
 10470                        .HasColumnType("bytea")
 10471                        .HasColumnName("salt");
 10472
 10473                    b.Property<long?>("ScopeId")
 10474                        .HasColumnType("bigint")
 10475                        .HasColumnName("scope_id");
 10476
 10477                    b.Property<DateTime>("UpdatedAt")
 10478                        .ValueGeneratedOnAdd()
 10479                        .HasColumnType("timestamp with time zone")
 10480                        .HasColumnName("updated_at")
 10481                        .HasDefaultValueSql("now()");
 10482
 10483                    b.HasKey("Id")
 10484                        .HasName("pk_person");
 10485
 10486                    b.HasIndex("DeletedAt")
 10487                        .HasDatabaseName("ix_person_deleted_at")
 10488                        .HasFilter("is_deleted = true AND anonymised_at IS NULL");
 10489
 10490                    b.HasIndex("Email")
 10491                        .HasDatabaseName("ix_person_email");
 10492
 10493                    b.HasIndex("PublicId")
 10494                        .IsUnique()
 10495                        .HasDatabaseName("ix_person_public_id");
 10496
 10497                    b.HasIndex("RoleId")
 10498                        .HasDatabaseName("ix_person_role_id");
 10499
 10500                    b.ToTable("person", "heimdall");
 20501                });
 502
 10503            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 10504                {
 10505                    b.Property<long>("Id")
 10506                        .HasColumnType("bigint")
 10507                        .HasColumnName("id")
 10508                        .HasColumnOrder(1);
 10509
 10510                    b.Property<string>("Description")
 10511                        .HasMaxLength(500)
 10512                        .HasColumnType("character varying(500)")
 10513                        .HasColumnName("description");
 10514
 10515                    b.Property<string>("Name")
 10516                        .IsRequired()
 10517                        .HasMaxLength(200)
 10518                        .HasColumnType("character varying(200)")
 10519                        .HasColumnName("name");
 10520
 10521                    b.Property<Guid>("PublicId")
 10522                        .HasColumnType("uuid")
 10523                        .HasColumnName("public_id");
 10524
 10525                    b.HasKey("Id")
 10526                        .HasName("pk_role");
 10527
 10528                    b.HasIndex("Name")
 10529                        .IsUnique()
 10530                        .HasDatabaseName("ix_role_name");
 10531
 10532                    b.HasIndex("PublicId")
 10533                        .IsUnique()
 10534                        .HasDatabaseName("ix_role_public_id");
 10535
 10536                    b.ToTable("role", "heimdall");
 20537                });
 538
 10539            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 10540                {
 10541                    b.Property<long>("Id")
 10542                        .ValueGeneratedOnAdd()
 10543                        .HasColumnType("bigint")
 10544                        .HasColumnName("id")
 10545                        .HasColumnOrder(1);
 10546
 10547                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10548
 10549                    b.Property<DateTime>("CreatedAt")
 10550                        .ValueGeneratedOnAdd()
 10551                        .HasColumnType("timestamp with time zone")
 10552                        .HasColumnName("created_at")
 10553                        .HasDefaultValueSql("now()");
 10554
 10555                    b.Property<int?>("DefaultLegalBasis")
 10556                        .HasColumnType("integer")
 10557                        .HasColumnName("default_legal_basis");
 10558
 10559                    b.Property<string>("Description")
 10560                        .HasMaxLength(500)
 10561                        .HasColumnType("character varying(500)")
 10562                        .HasColumnName("description");
 10563
 10564                    b.Property<bool>("GoogleSignInEnabled")
 10565                        .ValueGeneratedOnAdd()
 10566                        .HasColumnType("boolean")
 10567                        .HasDefaultValue(false)
 10568                        .HasColumnName("google_sign_in_enabled");
 10569
 10570                    b.Property<bool>("IsDeleted")
 10571                        .ValueGeneratedOnAdd()
 10572                        .HasColumnType("boolean")
 10573                        .HasDefaultValue(false)
 10574                        .HasColumnName("is_deleted");
 10575
 10576                    b.Property<string>("Name")
 10577                        .IsRequired()
 10578                        .HasMaxLength(200)
 10579                        .HasColumnType("character varying(200)")
 10580                        .HasColumnName("name");
 10581
 10582                    b.Property<string>("PrivacyNoticeUri")
 10583                        .HasMaxLength(2048)
 10584                        .HasColumnType("character varying(2048)")
 10585                        .HasColumnName("privacy_notice_uri");
 10586
 10587                    b.Property<Guid>("PublicId")
 10588                        .HasColumnType("uuid")
 10589                        .HasColumnName("public_id");
 10590
 10591                    b.Property<DateTime>("UpdatedAt")
 10592                        .ValueGeneratedOnAdd()
 10593                        .HasColumnType("timestamp with time zone")
 10594                        .HasColumnName("updated_at")
 10595                        .HasDefaultValueSql("now()");
 10596
 10597                    b.HasKey("Id")
 10598                        .HasName("pk_scope");
 10599
 10600                    b.HasIndex("Name")
 10601                        .IsUnique()
 10602                        .HasDatabaseName("ix_scope_name");
 10603
 10604                    b.HasIndex("PublicId")
 10605                        .IsUnique()
 10606                        .HasDatabaseName("ix_scope_public_id");
 10607
 10608                    b.ToTable("scope", "heimdall");
 20609                });
 610
 10611            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 10612                {
 10613                    b.Property<long>("ScopeId")
 10614                        .HasColumnType("bigint")
 10615                        .HasColumnName("scope_id");
 10616
 10617                    b.Property<long>("PersonId")
 10618                        .HasColumnType("bigint")
 10619                        .HasColumnName("person_id");
 10620
 10621                    b.HasKey("ScopeId", "PersonId")
 10622                        .HasName("pk_scope_owner");
 10623
 10624                    b.HasIndex("PersonId")
 10625                        .HasDatabaseName("ix_scope_owner_person_id");
 10626
 10627                    b.ToTable("scope_owner", "heimdall");
 20628                });
 629
 10630            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 10631                {
 10632                    b.Property<long>("Id")
 10633                        .ValueGeneratedOnAdd()
 10634                        .HasColumnType("bigint")
 10635                        .HasColumnName("id")
 10636                        .HasColumnOrder(1);
 10637
 10638                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10639
 10640                    b.Property<DateTime>("CreatedAt")
 10641                        .ValueGeneratedOnAdd()
 10642                        .HasColumnType("timestamp with time zone")
 10643                        .HasColumnName("created_at")
 10644                        .HasDefaultValueSql("now()");
 10645
 10646                    b.Property<string>("Description")
 10647                        .HasMaxLength(500)
 10648                        .HasColumnType("character varying(500)")
 10649                        .HasColumnName("description");
 10650
 10651                    b.Property<bool>("IncludeAsJwtClaim")
 10652                        .ValueGeneratedOnAdd()
 10653                        .HasColumnType("boolean")
 10654                        .HasDefaultValue(false)
 10655                        .HasColumnName("include_as_jwt_claim");
 10656
 10657                    b.Property<bool>("IsDeleted")
 10658                        .ValueGeneratedOnAdd()
 10659                        .HasColumnType("boolean")
 10660                        .HasDefaultValue(false)
 10661                        .HasColumnName("is_deleted");
 10662
 10663                    b.Property<string>("Name")
 10664                        .IsRequired()
 10665                        .HasMaxLength(200)
 10666                        .HasColumnType("character varying(200)")
 10667                        .HasColumnName("name");
 10668
 10669                    b.Property<Guid>("PublicId")
 10670                        .HasColumnType("uuid")
 10671                        .HasColumnName("public_id");
 10672
 10673                    b.Property<long>("ScopeId")
 10674                        .HasColumnType("bigint")
 10675                        .HasColumnName("scope_id");
 10676
 10677                    b.Property<DateTime>("UpdatedAt")
 10678                        .ValueGeneratedOnAdd()
 10679                        .HasColumnType("timestamp with time zone")
 10680                        .HasColumnName("updated_at")
 10681                        .HasDefaultValueSql("now()");
 10682
 10683                    b.HasKey("Id")
 10684                        .HasName("pk_scope_permission");
 10685
 10686                    b.HasIndex("PublicId")
 10687                        .IsUnique()
 10688                        .HasDatabaseName("ix_scope_permission_public_id");
 10689
 10690                    b.HasIndex("ScopeId")
 10691                        .HasDatabaseName("ix_scope_permission_scope_id");
 10692
 10693                    b.ToTable("scope_permission", "heimdall");
 20694                });
 695
 10696            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 10697                {
 10698                    b.Property<long>("ScopeId")
 10699                        .HasColumnType("bigint")
 10700                        .HasColumnName("scope_id");
 10701
 10702                    b.Property<long>("PersonId")
 10703                        .HasColumnType("bigint")
 10704                        .HasColumnName("person_id");
 10705
 10706                    b.HasKey("ScopeId", "PersonId")
 10707                        .HasName("pk_scope_user");
 10708
 10709                    b.HasIndex("PersonId")
 10710                        .IsUnique()
 10711                        .HasDatabaseName("ix_scope_user_person_id");
 10712
 10713                    b.ToTable("scope_user", "heimdall");
 20714                });
 715
 10716            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 10717                {
 10718                    b.Property<long>("Id")
 10719                        .ValueGeneratedOnAdd()
 10720                        .HasColumnType("bigint")
 10721                        .HasColumnName("id")
 10722                        .HasColumnOrder(1);
 10723
 10724                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10725
 10726                    b.Property<bool>("AppEnabled")
 10727                        .ValueGeneratedOnAdd()
 10728                        .HasColumnType("boolean")
 10729                        .HasDefaultValue(false)
 10730                        .HasColumnName("app_enabled");
 10731
 10732                    b.Property<DateTime>("CreatedAt")
 10733                        .ValueGeneratedOnAdd()
 10734                        .HasColumnType("timestamp with time zone")
 10735                        .HasColumnName("created_at")
 10736                        .HasDefaultValueSql("now()");
 10737
 10738                    b.Property<bool>("EmailEnabled")
 10739                        .ValueGeneratedOnAdd()
 10740                        .HasColumnType("boolean")
 10741                        .HasDefaultValue(false)
 10742                        .HasColumnName("email_enabled");
 10743
 10744                    b.Property<bool>("IsActive")
 10745                        .ValueGeneratedOnAdd()
 10746                        .HasColumnType("boolean")
 10747                        .HasDefaultValue(false)
 10748                        .HasColumnName("is_active");
 10749
 10750                    b.Property<long?>("LastTotpTimeStepUsed")
 10751                        .HasColumnType("bigint")
 10752                        .HasColumnName("last_totp_time_step_used");
 10753
 10754                    b.Property<long>("PersonId")
 10755                        .HasColumnType("bigint")
 10756                        .HasColumnName("person_id");
 10757
 10758                    b.Property<byte[]>("TotpSecretEncrypted")
 10759                        .HasColumnType("bytea")
 10760                        .HasColumnName("totp_secret_encrypted");
 10761
 10762                    b.Property<DateTime>("UpdatedAt")
 10763                        .ValueGeneratedOnAdd()
 10764                        .HasColumnType("timestamp with time zone")
 10765                        .HasColumnName("updated_at")
 10766                        .HasDefaultValueSql("now()");
 10767
 10768                    b.HasKey("Id")
 10769                        .HasName("pk_two_factor_auth");
 10770
 10771                    b.HasIndex("PersonId")
 10772                        .IsUnique()
 10773                        .HasDatabaseName("ix_two_factor_auth_person_id");
 10774
 10775                    b.ToTable("two_factor_auth", "heimdall");
 20776                });
 777
 10778            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 10779                {
 10780                    b.Property<long>("Id")
 10781                        .ValueGeneratedOnAdd()
 10782                        .HasColumnType("bigint")
 10783                        .HasColumnName("id")
 10784                        .HasColumnOrder(1);
 10785
 10786                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10787
 10788                    b.Property<byte[]>("CodeHash")
 10789                        .IsRequired()
 10790                        .HasColumnType("bytea")
 10791                        .HasColumnName("code_hash");
 10792
 10793                    b.Property<DateTime>("CreatedAt")
 10794                        .ValueGeneratedOnAdd()
 10795                        .HasColumnType("timestamp with time zone")
 10796                        .HasColumnName("created_at")
 10797                        .HasDefaultValueSql("now()");
 10798
 10799                    b.Property<DateTime>("ExpiresAt")
 10800                        .HasColumnType("timestamp with time zone")
 10801                        .HasColumnName("expires_at");
 10802
 10803                    b.Property<int>("FailedAttempts")
 10804                        .HasColumnType("integer")
 10805                        .HasColumnName("failed_attempts");
 10806
 10807                    b.Property<byte[]>("Salt")
 10808                        .IsRequired()
 10809                        .HasColumnType("bytea")
 10810                        .HasColumnName("salt");
 10811
 10812                    b.Property<long>("TwoFactorAuthId")
 10813                        .HasColumnType("bigint")
 10814                        .HasColumnName("two_factor_auth_id");
 10815
 10816                    b.Property<bool>("Used")
 10817                        .ValueGeneratedOnAdd()
 10818                        .HasColumnType("boolean")
 10819                        .HasDefaultValue(false)
 10820                        .HasColumnName("used");
 10821
 10822                    b.HasKey("Id")
 10823                        .HasName("pk_two_factor_email_code");
 10824
 10825                    b.HasIndex("TwoFactorAuthId")
 10826                        .HasDatabaseName("ix_two_factor_email_code_two_factor_auth_id");
 10827
 10828                    b.ToTable("two_factor_email_code", "heimdall");
 20829                });
 830
 10831            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 10832                {
 10833                    b.Property<long>("Id")
 10834                        .ValueGeneratedOnAdd()
 10835                        .HasColumnType("bigint")
 10836                        .HasColumnName("id")
 10837                        .HasColumnOrder(1);
 10838
 10839                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
 10840
 10841                    b.Property<byte[]>("CodeHash")
 10842                        .IsRequired()
 10843                        .HasColumnType("bytea")
 10844                        .HasColumnName("code_hash");
 10845
 10846                    b.Property<DateTime>("CreatedAt")
 10847                        .ValueGeneratedOnAdd()
 10848                        .HasColumnType("timestamp with time zone")
 10849                        .HasColumnName("created_at")
 10850                        .HasDefaultValueSql("now()");
 10851
 10852                    b.Property<long>("TwoFactorAuthId")
 10853                        .HasColumnType("bigint")
 10854                        .HasColumnName("two_factor_auth_id");
 10855
 10856                    b.Property<bool>("Used")
 10857                        .ValueGeneratedOnAdd()
 10858                        .HasColumnType("boolean")
 10859                        .HasDefaultValue(false)
 10860                        .HasColumnName("used");
 10861
 10862                    b.Property<DateTime?>("UsedAt")
 10863                        .HasColumnType("timestamp with time zone")
 10864                        .HasColumnName("used_at");
 10865
 10866                    b.HasKey("Id")
 10867                        .HasName("pk_two_factor_recovery_code");
 10868
 10869                    b.HasIndex("TwoFactorAuthId")
 10870                        .HasDatabaseName("ix_two_factor_recovery_code_two_factor_auth_id");
 10871
 10872                    b.ToTable("two_factor_recovery_code", "heimdall");
 20873                });
 874
 10875            modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
 10876                {
 10877                    b.Property<int>("Id")
 10878                        .ValueGeneratedOnAdd()
 10879                        .HasColumnType("integer")
 10880                        .HasColumnName("id");
 10881
 10882                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 10883
 10884                    b.Property<string>("FriendlyName")
 10885                        .HasColumnType("text")
 10886                        .HasColumnName("friendly_name");
 10887
 10888                    b.Property<string>("Xml")
 10889                        .HasColumnType("text")
 10890                        .HasColumnName("xml");
 10891
 10892                    b.HasKey("Id")
 10893                        .HasName("pk_data_protection_keys");
 10894
 10895                    b.ToTable("data_protection_keys", "heimdall");
 20896                });
 897
 10898            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Application", b =>
 10899                {
 10900                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Owner")
 10901                        .WithMany("OwnedApplications")
 10902                        .HasForeignKey("OwnerId")
 10903                        .OnDelete(DeleteBehavior.Cascade)
 10904                        .IsRequired()
 10905                        .HasConstraintName("fk_application_person_owner_id");
 10906
 10907                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 10908                        .WithMany("Applications")
 10909                        .HasForeignKey("ScopeId")
 10910                        .OnDelete(DeleteBehavior.Cascade)
 10911                        .IsRequired()
 10912                        .HasConstraintName("fk_application_scope_scope_id");
 10913
 10914                    b.Navigation("Owner");
 10915
 10916                    b.Navigation("Scope");
 20917                });
 918
 10919            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.EmailVerificationToken", b =>
 10920                {
 10921                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 10922                        .WithMany("EmailVerificationTokens")
 10923                        .HasForeignKey("PersonId")
 10924                        .OnDelete(DeleteBehavior.Cascade)
 10925                        .IsRequired()
 10926                        .HasConstraintName("fk_email_verification_token_person_person_id");
 10927
 10928                    b.Navigation("Person");
 20929                });
 930
 10931            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.GoogleUser", b =>
 10932                {
 10933                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 10934                        .WithMany("GoogleUsers")
 10935                        .HasForeignKey("ScopeId")
 10936                        .OnDelete(DeleteBehavior.Cascade)
 10937                        .IsRequired()
 10938                        .HasConstraintName("fk_google_user_scope_scope_id");
 10939
 10940                    b.Navigation("Scope");
 20941                });
 942
 10943            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.PasswordResetToken", b =>
 10944                {
 10945                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 10946                        .WithMany("PasswordResetTokens")
 10947                        .HasForeignKey("PersonId")
 10948                        .OnDelete(DeleteBehavior.Cascade)
 10949                        .IsRequired()
 10950                        .HasConstraintName("fk_password_reset_token_person_person_id");
 10951
 10952                    b.Navigation("Person");
 20953                });
 954
 10955            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 10956                {
 10957                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Role", "Role")
 10958                        .WithMany("Persons")
 10959                        .HasForeignKey("RoleId")
 10960                        .OnDelete(DeleteBehavior.Restrict)
 10961                        .IsRequired()
 10962                        .HasConstraintName("fk_person_roles_role_id");
 10963
 10964                    b.Navigation("Role");
 20965                });
 966
 10967            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeOwner", b =>
 10968                {
 10969                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 10970                        .WithMany("ScopeOwnerships")
 10971                        .HasForeignKey("PersonId")
 10972                        .OnDelete(DeleteBehavior.Cascade)
 10973                        .IsRequired()
 10974                        .HasConstraintName("fk_scope_owner_person_person_id");
 10975
 10976                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 10977                        .WithMany("Owners")
 10978                        .HasForeignKey("ScopeId")
 10979                        .OnDelete(DeleteBehavior.Cascade)
 10980                        .IsRequired()
 10981                        .HasConstraintName("fk_scope_owner_scope_scope_id");
 10982
 10983                    b.Navigation("Person");
 10984
 10985                    b.Navigation("Scope");
 20986                });
 987
 10988            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopePermission", b =>
 10989                {
 10990                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 10991                        .WithMany("ScopePermissions")
 10992                        .HasForeignKey("ScopeId")
 10993                        .OnDelete(DeleteBehavior.Cascade)
 10994                        .IsRequired()
 10995                        .HasConstraintName("fk_scope_permission_scope_scope_id");
 10996
 10997                    b.Navigation("Scope");
 20998                });
 999
 101000            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.ScopeUser", b =>
 101001                {
 101002                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101003                        .WithOne("ScopeMembership")
 101004                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.ScopeUser", "PersonId")
 101005                        .OnDelete(DeleteBehavior.Cascade)
 101006                        .IsRequired()
 101007                        .HasConstraintName("fk_scope_user_person_person_id");
 101008
 101009                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Scope", "Scope")
 101010                        .WithMany("Users")
 101011                        .HasForeignKey("ScopeId")
 101012                        .OnDelete(DeleteBehavior.Cascade)
 101013                        .IsRequired()
 101014                        .HasConstraintName("fk_scope_user_scope_scope_id");
 101015
 101016                    b.Navigation("Person");
 101017
 101018                    b.Navigation("Scope");
 201019                });
 1020
 101021            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 101022                {
 101023                    b.HasOne("ArturRios.Heimdall.Domain.Entities.Person", "Person")
 101024                        .WithOne("TwoFactorAuth")
 101025                        .HasForeignKey("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "PersonId")
 101026                        .OnDelete(DeleteBehavior.Cascade)
 101027                        .IsRequired()
 101028                        .HasConstraintName("fk_two_factor_auth_person_person_id");
 101029
 101030                    b.Navigation("Person");
 201031                });
 1032
 101033            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorEmailCode", b =>
 101034                {
 101035                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 101036                        .WithMany("EmailCodes")
 101037                        .HasForeignKey("TwoFactorAuthId")
 101038                        .OnDelete(DeleteBehavior.Cascade)
 101039                        .IsRequired()
 101040                        .HasConstraintName("fk_two_factor_email_code_two_factor_auth_two_factor_auth_id");
 101041
 101042                    b.Navigation("TwoFactorAuth");
 201043                });
 1044
 101045            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorRecoveryCode", b =>
 101046                {
 101047                    b.HasOne("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", "TwoFactorAuth")
 101048                        .WithMany("RecoveryCodes")
 101049                        .HasForeignKey("TwoFactorAuthId")
 101050                        .OnDelete(DeleteBehavior.Cascade)
 101051                        .IsRequired()
 101052                        .HasConstraintName("fk_two_factor_recovery_code_two_factor_auth_two_factor_auth_id");
 101053
 101054                    b.Navigation("TwoFactorAuth");
 201055                });
 1056
 101057            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Person", b =>
 101058                {
 101059                    b.Navigation("EmailVerificationTokens");
 101060
 101061                    b.Navigation("OwnedApplications");
 101062
 101063                    b.Navigation("PasswordResetTokens");
 101064
 101065                    b.Navigation("ScopeMembership");
 101066
 101067                    b.Navigation("ScopeOwnerships");
 101068
 101069                    b.Navigation("TwoFactorAuth");
 201070                });
 1071
 101072            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Role", b =>
 101073                {
 101074                    b.Navigation("Persons");
 201075                });
 1076
 101077            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.Scope", b =>
 101078                {
 101079                    b.Navigation("Applications");
 101080
 101081                    b.Navigation("GoogleUsers");
 101082
 101083                    b.Navigation("Owners");
 101084
 101085                    b.Navigation("ScopePermissions");
 101086
 101087                    b.Navigation("Users");
 201088                });
 1089
 101090            modelBuilder.Entity("ArturRios.Heimdall.Domain.Entities.TwoFactorAuth", b =>
 101091                {
 101092                    b.Navigation("EmailCodes");
 101093
 101094                    b.Navigation("RecoveryCodes");
 201095                });
 1096#pragma warning restore 612, 618
 101097        }
 1098    }
 1099}