diff --git a/Valghalla.Application/Configuration/InternalAuthConfiguration.cs b/Valghalla.Application/Configuration/InternalAuthConfiguration.cs index 0369c2c..f3b269a 100644 --- a/Valghalla.Application/Configuration/InternalAuthConfiguration.cs +++ b/Valghalla.Application/Configuration/InternalAuthConfiguration.cs @@ -7,5 +7,6 @@ public class InternalAuthConfiguration : IConfiguration public string Authority { get; init; } = null!; public string Issuer { get; init; } = null!; public string SigningCertificatePassword { get; init; } = null!; + public string JobRoleDescription { get; init; } = null!; } } diff --git a/Valghalla.Application/Saml/ISaml2AuthService.cs b/Valghalla.Application/Saml/ISaml2AuthService.cs index 1fe264a..5dd6a04 100644 --- a/Valghalla.Application/Saml/ISaml2AuthService.cs +++ b/Valghalla.Application/Saml/ISaml2AuthService.cs @@ -10,7 +10,7 @@ public interface ISaml2AuthService void SaveClientSession(); Task GetLoginRedirectUrlAsync(CancellationToken cancellationToken); Task LogoutAsync(bool profileDeleted, CancellationToken cancellationToken); - Task SetupAssertionConsumerServiceAsync(Func transform, CancellationToken cancellationToken); + Task SetupAssertionConsumerServiceAsync(Func transform, bool isInternal, CancellationToken cancellationToken); Task SetupLogoutResponseAsync(string logoutPath, CancellationToken cancellationToken); } } diff --git a/Valghalla.Database/Migrations/20240209084438_AddMoreConfiguration.Designer.cs b/Valghalla.Database/Migrations/20240209084438_AddMoreConfiguration.Designer.cs new file mode 100644 index 0000000..b9f231d --- /dev/null +++ b/Valghalla.Database/Migrations/20240209084438_AddMoreConfiguration.Designer.cs @@ -0,0 +1,5124 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Valghalla.Database; + +#nullable disable + +namespace Valghalla.Database.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20240209084438_AddMoreConfiguration")] + partial class AddMoreConfiguration + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("RelatedList", b => + { + b.Property("PrimaryListTypeId") + .HasColumnType("integer"); + + b.Property("RelatedListTypeId") + .HasColumnType("integer"); + + b.HasKey("PrimaryListTypeId", "RelatedListTypeId"); + + b.HasIndex(new[] { "PrimaryListTypeId" }, "IX_FK_RelatedList_ListTypePrimary"); + + b.HasIndex(new[] { "RelatedListTypeId" }, "IX_FK_RelatedList_ListTypeRelated"); + + b.ToTable("RelatedList", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ColumnEntity", b => + { + b.Property("ColumnId") + .HasColumnType("integer"); + + b.Property("ColumnName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("DatatypeId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("((1))"); + + b.Property("IsFilterable") + .IsRequired() + .HasColumnType("boolean"); + + b.Property("IsSortable") + .IsRequired() + .HasColumnType("boolean"); + + b.Property("IsViewable") + .IsRequired() + .HasColumnType("boolean"); + + b.Property("ListPickerTypeId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("((1))"); + + b.Property("ListTypeId") + .HasColumnType("integer"); + + b.Property("LookupColumnId") + .HasColumnType("integer"); + + b.Property("LookupFunction") + .HasMaxLength(500) + .HasColumnType("character varying(500)") + .UseCollation("da-DK-x-icu"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Ordinal") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("((1))"); + + b.Property("RelatedListId") + .HasColumnType("integer"); + + b.HasKey("ColumnId") + .HasName("PK__Column__1AA1420EE98F6ED2"); + + b.HasIndex("DatatypeId"); + + b.HasIndex("ListPickerTypeId"); + + b.HasIndex("ListTypeId"); + + b.ToTable("Column", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ColumnOperatorEntity", b => + { + b.Property("ColumnOperatorId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ColumnOperatorId")); + + b.Property("ColumnId") + .HasColumnType("integer"); + + b.Property("OperatorId") + .HasColumnType("integer"); + + b.HasKey("ColumnOperatorId") + .HasName("PK__ColumnOp__FAE0D17E395F8D83"); + + b.HasIndex("OperatorId"); + + b.HasIndex(new[] { "ColumnId" }, "ColumnOperator_cl"); + + b.ToTable("ColumnOperator", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.DatatypeEntity", b => + { + b.Property("DatatypeId") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .IsUnicode(false) + .HasColumnType("character varying(200)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("DatatypeId") + .HasName("PK__Datatype__2B1CF62988885FAB"); + + b.ToTable("Datatype", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterColumnEntity", b => + { + b.Property("FilterColumnId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("FilterColumnId")); + + b.Property("ColumnId") + .HasColumnType("integer"); + + b.Property("ColumnOperatorId") + .HasColumnType("integer"); + + b.Property("FilterId") + .HasColumnType("integer"); + + b.HasKey("FilterColumnId") + .HasName("PK__FilterCo__045F2EEA787BE718"); + + b.HasIndex("ColumnId"); + + b.HasIndex("ColumnOperatorId"); + + b.HasIndex(new[] { "FilterId", "ColumnId" }, "FilterColumn_cl"); + + b.ToTable("FilterColumn", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterColumnValueEntity", b => + { + b.Property("FilterColumnValueId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("FilterColumnValueId")); + + b.Property("FilterColumnId") + .HasColumnType("integer"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ValueKey") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("FilterColumnValueId") + .HasName("PK__FilterCo__E13F66683C673460"); + + b.HasIndex(new[] { "FilterColumnId" }, "FilterColumnValue_cl"); + + b.ToTable("FilterColumnValue", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterEntity", b => + { + b.Property("FilterId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("FilterId")); + + b.Property("Ordinal") + .HasColumnType("integer"); + + b.Property("QueryId") + .HasColumnType("integer"); + + b.HasKey("FilterId") + .HasName("PK__Filter__3159DF6FCEECCF18"); + + b.HasIndex(new[] { "QueryId", "Ordinal" }, "Filter_cl") + .IsUnique(); + + b.ToTable("Filter", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ListPickerTypeEntity", b => + { + b.Property("ListPickerTypeId") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("ListPickerTypeId") + .HasName("PK__ListPickerTypeId"); + + b.ToTable("ListPickerType", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ListTypeColumnEntity", b => + { + b.Property("ColumnId") + .HasColumnType("integer"); + + b.Property("ListTypeId") + .HasColumnType("integer"); + + b.Property("Ordinal") + .HasColumnType("integer"); + + b.Property("RelatedListTypeId") + .HasColumnType("integer"); + + b.HasKey("ColumnId", "ListTypeId"); + + b.HasIndex("ListTypeId"); + + b.ToTable("ListTypeColumn", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ListTypeEntity", b => + { + b.Property("ListTypeId") + .HasColumnType("integer"); + + b.Property("IsPrimary") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Table") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("View") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("ListTypeId") + .HasName("PK__ListType__5268C8CA6FE7C67D"); + + b.ToTable("ListType", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.OperatorEntity", b => + { + b.Property("OperatorId") + .HasColumnType("integer"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Symbol") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("OperatorId") + .HasName("PK__Operator__7BB12FAEDC1BDEAE"); + + b.ToTable("Operator", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.QueryEntity", b => + { + b.Property("QueryId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("QueryId")); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("IsGlobal") + .HasColumnType("boolean"); + + b.Property("IsTemplate") + .HasColumnType("boolean"); + + b.Property("ListTypeId") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("SystemName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("QueryId") + .HasName("PK__Query__5967F7DAAA5A5FF1"); + + b.ToTable("Query", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ResultColumnEntity", b => + { + b.Property("ResultColumnId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ResultColumnId")); + + b.Property("ColumnId") + .HasColumnType("integer"); + + b.Property("Ordinal") + .HasColumnType("integer"); + + b.Property("QueryId") + .HasColumnType("integer"); + + b.HasKey("ResultColumnId") + .HasName("PK__ResultCo__AE924C90960785A6"); + + b.HasIndex("ColumnId"); + + b.HasIndex("QueryId"); + + b.ToTable("ResultColumn", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.SortColumnEntity", b => + { + b.Property("SortColumnId") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SortColumnId")); + + b.Property("ColumnId") + .HasColumnType("integer"); + + b.Property("IsDecending") + .HasColumnType("boolean"); + + b.Property("Ordinal") + .HasColumnType("integer"); + + b.Property("QueryId") + .HasColumnType("integer"); + + b.HasKey("SortColumnId") + .HasName("PK__SortColu__68B46505E7F3C892"); + + b.HasIndex("ColumnId"); + + b.HasIndex("QueryId"); + + b.ToTable("SortColumn", "Analyze"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.AreaEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("Area", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.AuditLogEntity", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Col2name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Col2value") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Col3name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Col3value") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("DoneBy") + .HasColumnType("uuid"); + + b.Property("EventDate") + .HasColumnType("timestamp with time zone"); + + b.Property("EventDescription") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("EventTable") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("EventType") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Pk2name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Pk2value") + .HasColumnType("uuid"); + + b.HasKey("Id") + .HasName("PK__AuditLog__3214EC07EF5A33E9"); + + b.HasIndex("DoneBy"); + + b.HasIndex(new[] { "Pk2value" }, "IX_AuditLog_Clustered"); + + b.ToTable("AuditLog", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationLogEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Error") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("MessageType") + .HasColumnType("integer"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("SendType") + .HasColumnType("integer"); + + b.Property("ShortMessage") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Status") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ParticipantId"); + + b.ToTable("CommunicationLog", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("Content") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("IsDefaultTemplate") + .HasColumnType("boolean"); + + b.Property("Subject") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("TemplateType") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("CommunicationTemplate", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationTemplateFileEntity", b => + { + b.Property("CommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("FileReferenceId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("CommunicationTemplateId", "FileReferenceId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("FileReferenceId"); + + b.ToTable("CommunicationTemplateFile", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ConfigurationEntity", b => + { + b.Property("Key") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Value") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Key"); + + b.ToTable("Configuration", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionCommitteeContactInformationEntity", b => + { + b.Property("PageName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("Address") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("City") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DigitalPost") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionResponsibleApartment") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Email") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("LogoFileReferenceId") + .HasColumnType("uuid"); + + b.Property("MunicipalityName") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PostalCode") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("TelephoneNumber") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("PageName"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("LogoFileReferenceId"); + + b.ToTable("ElectionCommitteeContactInformation", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Active") + .HasColumnType("boolean"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("ConfirmationOfCancellationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("ConfirmationOfRegistrationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("ElectionDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ElectionEndDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ElectionStartDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ElectionTypeId") + .HasColumnType("uuid"); + + b.Property("InvitationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("InvitationReminderCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("LockPeriod") + .HasColumnType("integer"); + + b.Property("RetractedInvitationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("TaskReminderCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("ConfirmationOfCancellationCommunicationTemplateId"); + + b.HasIndex("ConfirmationOfRegistrationCommunicationTemplateId"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ElectionTypeId"); + + b.HasIndex("InvitationCommunicationTemplateId"); + + b.HasIndex("InvitationReminderCommunicationTemplateId"); + + b.HasIndex("RetractedInvitationCommunicationTemplateId"); + + b.HasIndex("TaskReminderCommunicationTemplateId"); + + b.ToTable("Election", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTaskTypeCommunicationTemplateEntity", b => + { + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("TaskTypeId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("ConfirmationOfCancellationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("ConfirmationOfRegistrationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("InvitationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("InvitationReminderCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("RetractedInvitationCommunicationTemplateId") + .HasColumnType("uuid"); + + b.Property("TaskReminderCommunicationTemplateId") + .HasColumnType("uuid"); + + b.HasKey("ElectionId", "TaskTypeId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("ConfirmationOfCancellationCommunicationTemplateId"); + + b.HasIndex("ConfirmationOfRegistrationCommunicationTemplateId"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("InvitationCommunicationTemplateId"); + + b.HasIndex("InvitationReminderCommunicationTemplateId"); + + b.HasIndex("RetractedInvitationCommunicationTemplateId"); + + b.HasIndex("TaskReminderCommunicationTemplateId"); + + b.HasIndex("TaskTypeId"); + + b.ToTable("ElectionTaskTypeCommunicationTemplates", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTypeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("ElectionType", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTypeValidationRuleEntity", b => + { + b.Property("ElectionTypeId") + .HasColumnType("uuid"); + + b.Property("ValidationRuleId") + .HasColumnType("uuid"); + + b.HasKey("ElectionTypeId", "ValidationRuleId"); + + b.HasIndex("ValidationRuleId"); + + b.ToTable("ElectionTypeValidationRule", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionValidationRuleEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.ToTable("ElectionValidationRule", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionWorkLocationEntity", b => + { + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("WorkLocationId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("ElectionId", "WorkLocationId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("WorkLocationId"); + + b.ToTable("ElectionWorkLocation", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.FileEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("Content") + .IsRequired() + .HasColumnType("bytea"); + + b.Property("ContentHash") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("File", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.FileReferenceEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("FileId") + .HasColumnType("uuid"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("FileId") + .IsUnique(); + + b.ToTable("FileReference", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.JobEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("JobId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.ToTable("Job", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ParticipantEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Age") + .HasColumnType("integer"); + + b.Property("Birthdate") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("City") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("CoAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("CountryCode") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .UseCollation("da-DK-x-icu"); + + b.Property("CountryName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Cpr") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Deceased") + .HasColumnType("boolean"); + + b.Property("Disenfranchised") + .HasColumnType("boolean"); + + b.Property("Email") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ExemptDigitalPost") + .HasColumnType("boolean"); + + b.Property("FirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("LastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("LastValidationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("MobileNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("MunicipalityCode") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .UseCollation("da-DK-x-icu"); + + b.Property("MunicipalityName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("StreetAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("Participant", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ParticipantEventLogEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("Text") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ParticipantId"); + + b.ToTable("ParticipantEventLog", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.PrintTemplateMappingEntity", b => + { + b.Property("Entity_EntityName") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Entity_EntityPropertyName") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Template_FieldName") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Template_TableName") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Entity_EntityName", "Entity_EntityPropertyName"); + + b.ToTable("PrintTemplateMappings"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.RejectedTaskAssignmentEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("TaskDate") + .HasColumnType("timestamp with time zone"); + + b.Property("TaskTypeId") + .HasColumnType("uuid"); + + b.Property("TeamId") + .HasColumnType("uuid"); + + b.Property("WorkLocationId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ElectionId"); + + b.HasIndex("ParticipantId"); + + b.HasIndex("TaskTypeId"); + + b.HasIndex("TeamId"); + + b.HasIndex("WorkLocationId"); + + b.ToTable("RejectedTaskAssignment", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.SpecialDietEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Title") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("SpecialDiet", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.SpecialDietParticipantEntity", b => + { + b.Property("SpecialDietId") + .HasColumnType("uuid"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("SpecialDietId", "ParticipantId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ParticipantId"); + + b.ToTable("SpecialDietParticipant", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskAssignmentEntity", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("Accepted") + .HasColumnType("boolean"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("HashValue") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("InvitationCode") + .HasColumnType("uuid"); + + b.Property("InvitationSent") + .HasColumnType("boolean"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("RegistrationSent") + .HasColumnType("boolean"); + + b.Property("Responsed") + .HasColumnType("boolean"); + + b.Property("TaskDate") + .HasColumnType("timestamp with time zone"); + + b.Property("TaskTypeId") + .HasColumnType("uuid"); + + b.Property("TeamId") + .HasColumnType("uuid"); + + b.Property("WorkLocationId") + .HasColumnType("uuid"); + + b.HasKey("Id", "ElectionId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ElectionId"); + + b.HasIndex("HashValue"); + + b.HasIndex("ParticipantId"); + + b.HasIndex("TaskTypeId"); + + b.HasIndex("TeamId"); + + b.HasIndex("WorkLocationId", "TaskTypeId"); + + b.HasIndex("WorkLocationId", "TeamId"); + + b.ToTable("TaskAssignment", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskLinkEntity", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("HashValue") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Value") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id", "ElectionId"); + + b.HasIndex("ElectionId"); + + b.HasIndex("HashValue"); + + b.ToTable("TaskLink", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskTypeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("EndTime") + .HasColumnType("interval"); + + b.Property("Payment") + .HasColumnType("integer"); + + b.Property("SendingReminderEnabled") + .HasColumnType("boolean"); + + b.Property("ShortName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("StartTime") + .HasColumnType("interval"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Trusted") + .HasColumnType("boolean"); + + b.Property("ValidationNotRequired") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("TaskType", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskTypeFileEntity", b => + { + b.Property("TaskTypeId") + .HasColumnType("uuid"); + + b.Property("FileReferenceId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("TaskTypeId", "FileReferenceId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("FileReferenceId"); + + b.ToTable("TaskTypeFile", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TasksFilteredLinkEntity", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("HashValue") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Value") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id", "ElectionId"); + + b.HasIndex("ElectionId"); + + b.HasIndex("HashValue"); + + b.ToTable("TasksFilteredLink", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("Team", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamLinkEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("HashValue") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Value") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("HashValue"); + + b.ToTable("TeamLink", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamMemberEntity", b => + { + b.Property("TeamId") + .HasColumnType("uuid"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("TeamId", "ParticipantId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ParticipantId"); + + b.ToTable("TeamMember", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamResponsibleEntity", b => + { + b.Property("TeamId") + .HasColumnType("uuid"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("TeamId", "ParticipantId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ParticipantId"); + + b.ToTable("TeamResponsible", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.UserEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Cpr") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Cvr") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("Serial") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.ToTable("User", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WebPageEntity", b => + { + b.Property("PageName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("PageInfo") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.HasKey("PageName"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("WebPages", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Address") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("AreaId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("City") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("PostalCode") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.HasKey("Id"); + + b.HasIndex("AreaId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.ToTable("WorkLocation", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationResponsibleEntity", b => + { + b.Property("WorkLocationId") + .HasColumnType("uuid"); + + b.Property("ParticipantId") + .HasColumnType("uuid"); + + b.Property("ChangedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ChangedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.HasKey("WorkLocationId", "ParticipantId"); + + b.HasIndex("ChangedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ParticipantId"); + + b.ToTable("WorkLocationResponsible", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationTaskTypeEntity", b => + { + b.Property("WorkLocationId") + .HasColumnType("uuid"); + + b.Property("TaskTypeId") + .HasColumnType("uuid"); + + b.HasKey("WorkLocationId", "TaskTypeId"); + + b.HasIndex("TaskTypeId"); + + b.ToTable("WorkLocationTaskTypes", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationTeamEntity", b => + { + b.Property("WorkLocationId") + .HasColumnType("uuid"); + + b.Property("TeamId") + .HasColumnType("uuid"); + + b.HasKey("WorkLocationId", "TeamId"); + + b.HasIndex("TeamId"); + + b.ToTable("WorkLocationTeams", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.ApplicationView", b => + { + b.Property("ApplicationOfInterestCreated") + .HasColumnType("datetime"); + + b.Property("Bid") + .HasMaxLength(4) + .HasColumnType("character varying(4)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("FieldDataData") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("FieldDataId") + .HasColumnType("uuid"); + + b.Property("FieldDataIndex") + .HasColumnType("integer"); + + b.Property("FieldName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("FieldType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("FormFieldId") + .HasColumnType("uuid"); + + b.Property("FormId") + .HasColumnType("uuid"); + + b.Property("FormName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("FormPostCreated") + .HasColumnType("datetime"); + + b.Property("FormPostId") + .HasColumnType("uuid"); + + b.Property("FormPostMotivation") + .IsUnicode(false) + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("FormPostStatus") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("FormType") + .HasColumnType("integer"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAge") + .HasColumnType("integer"); + + b.Property("PersonCar") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonId") + .HasColumnType("uuid"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTag") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTypeId") + .HasColumnType("uuid"); + + b.Property("RowIndex") + .HasColumnType("integer"); + + b.ToTable((string)null); + + b.ToView("ApplicationView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.AssignmentView", b => + { + b.Property("Accepted") + .IsRequired() + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignementFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignementPublicFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("Expense") + .HasColumnType("double precision"); + + b.Property("Fee") + .HasColumnType("integer"); + + b.Property("FeeType") + .IsRequired() + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupId") + .HasColumnType("uuid"); + + b.Property("GroupName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("MileCompensation") + .HasColumnType("double precision"); + + b.Property("ParishName") + .HasMaxLength(103) + .HasColumnType("character varying(103)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonId") + .HasColumnType("uuid"); + + b.ToTable((string)null); + + b.ToView("AssignmentView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.BuildingView", b => + { + b.Property("Accepted") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("ApplicationOfInterestCreated") + .HasColumnType("datetime"); + + b.Property("AssignmentFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignmentPublicFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingCanExpand") + .IsRequired() + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingComment") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrict") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrictId") + .HasColumnType("uuid"); + + b.Property("BuildingEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingId") + .HasColumnType("uuid"); + + b.Property("BuildingInfoToContactPerson") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingInformerNeeded") + .IsRequired() + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingTypeId") + .HasColumnType("uuid"); + + b.Property("BuildingVisitingAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingWebpage") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectoralDistrictNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Expense") + .HasColumnType("double precision"); + + b.Property("Expr1") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("Expr2") + .HasMaxLength(103) + .HasColumnType("character varying(103)") + .UseCollation("da-DK-x-icu"); + + b.Property("Fee") + .HasColumnType("integer"); + + b.Property("FeeType") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("MileCompensation") + .HasColumnType("double precision"); + + b.Property("ParishName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ParishNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAge") + .HasColumnType("integer"); + + b.Property("PersonCar") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGenderId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonId") + .HasColumnType("uuid"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTag") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTypeId") + .HasColumnType("uuid"); + + b.Property("RoomName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("BuildingView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.CourseOccassionView", b => + { + b.Property("Accepted") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("ApplicationOfInterestCreated") + .HasColumnType("datetime"); + + b.Property("AssignmentFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignmentPublicFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionAddress") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionCourseDescription") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionCourseInfo") + .HasMaxLength(250) + .HasColumnType("character varying(250)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionCourseResponsibleId") + .HasColumnType("uuid"); + + b.Property("CourseOccassionDate") + .HasColumnType("datetime"); + + b.Property("CourseOccassionEndTime") + .HasPrecision(0) + .HasColumnType("interval(0)"); + + b.Property("CourseOccassionHall") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionId") + .HasColumnType("uuid"); + + b.Property("CourseOccassionRoom") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionStartTime") + .HasPrecision(0) + .HasColumnType("interval(0)"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("Expense") + .HasColumnType("double precision"); + + b.Property("Expr1") + .HasColumnType("uuid"); + + b.Property("Fee") + .HasColumnType("integer"); + + b.Property("FeeType") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("MileCompensation") + .HasColumnType("double precision"); + + b.Property("ParishName") + .HasMaxLength(103) + .HasColumnType("character varying(103)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAge") + .HasColumnType("integer"); + + b.Property("PersonCar") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonId") + .HasColumnType("uuid"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTag") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherAge") + .HasColumnType("integer"); + + b.Property("TeacherEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherGenderId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("TeacherTypeId") + .HasColumnType("uuid"); + + b.ToTable((string)null); + + b.ToView("CourseOccassionView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.ElectionView", b => + { + b.Property("BuildingDistrict") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrictId") + .HasColumnType("uuid"); + + b.Property("BuildingName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingTypeId") + .HasColumnType("uuid"); + + b.Property("BuildingVisitingAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionDate") + .HasColumnType("datetime"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectionName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectoralDistrictId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("GruppNamn") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("ParishName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ParishNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTyp") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("RoomName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("ElectionView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.ElectoralDistrictView", b => + { + b.Property("Accepted") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("ApplicationOfInterestCreated") + .HasColumnType("datetime"); + + b.Property("AssignmentFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignmentPublicFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingCanExpand") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingComment") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrict") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrictId") + .HasColumnType("uuid"); + + b.Property("BuildingEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingInfoToContactPerson") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingInformerNeeded") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingTypeId") + .HasColumnType("uuid"); + + b.Property("BuildingVisitingAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingWebpage") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectoralDistrictNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("Expense") + .HasColumnType("double precision"); + + b.Property("Fee") + .HasColumnType("integer"); + + b.Property("FeeType") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("MileCompensation") + .HasColumnType("double precision"); + + b.Property("ParishName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ParishNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAge") + .HasColumnType("integer"); + + b.Property("PersonCar") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTag") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("RoomName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("ElectoralDistrictView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.GroupView", b => + { + b.Property("Accepted") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("ApplicationOfInterestCreated") + .HasColumnType("datetime"); + + b.Property("AssignmentFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignmentPublicFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingCanExpand") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingComment") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryAddress") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalCode") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalPlace") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrict") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingEmail") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingInfoToContactPerson") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingInformerNeeded") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingName") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingPhoneNumber") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatus") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatusId") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingType") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingTypeId") + .HasColumnType("uuid"); + + b.Property("BuildingVisitingAddress") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalCode") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalPlace") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingWebpage") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyNumber") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectoralDistrictNumber") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("Expense") + .HasColumnType("double precision"); + + b.Property("Expr1") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("Fee") + .HasColumnType("integer"); + + b.Property("FeeType") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupCategory") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupDescription") + .IsRequired() + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("MileCompensation") + .HasColumnType("double precision"); + + b.Property("ParishName") + .HasMaxLength(103) + .HasColumnType("character varying(103)") + .UseCollation("da-DK-x-icu"); + + b.Property("ParishNumber") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAge") + .HasColumnType("integer"); + + b.Property("PersonCar") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTag") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("RoomElectoralDistrictId") + .HasColumnType("uuid"); + + b.Property("RoomName") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("GroupView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.PersonView", b => + { + b.Property("Accepted") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("ApplicationOfInterestCreated") + .HasColumnType("datetime"); + + b.Property("AssignmentFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("AssignmentPublicFunction") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionAddress") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionCourseDescription") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionCourseInfo") + .HasMaxLength(250) + .HasColumnType("character varying(250)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionCourseResponsibleId") + .HasColumnType("uuid"); + + b.Property("CourseOccassionDate") + .HasColumnType("datetime"); + + b.Property("CourseOccassionEndTime") + .HasPrecision(0) + .HasColumnType("interval(0)"); + + b.Property("CourseOccassionHall") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionRoom") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("CourseOccassionStartTime") + .HasPrecision(0) + .HasColumnType("interval(0)"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictName") + .HasMaxLength(101) + .HasColumnType("character varying(101)") + .UseCollation("da-DK-x-icu"); + + b.Property("Expense") + .HasColumnType("double precision"); + + b.Property("Fee") + .HasColumnType("integer"); + + b.Property("FeeType") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .UseCollation("da-DK-x-icu"); + + b.Property("Length") + .HasColumnType("integer"); + + b.Property("MileCompensation") + .HasColumnType("double precision"); + + b.Property("ParishName") + .HasMaxLength(103) + .HasColumnType("character varying(103)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonAge") + .HasColumnType("integer"); + + b.Property("PersonCar") + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGender") + .HasMaxLength(6) + .IsUnicode(false) + .HasColumnType("character varying(6)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonGenderId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonId") + .HasColumnType("uuid"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTag") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonTypeId") + .HasColumnType("uuid"); + + b.Property("Temp") + .HasMaxLength(1) + .HasColumnType("character varying(1)") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("PersonView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.RoomView", b => + { + b.Property("BuildingCanExpand") + .IsRequired() + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingComment") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDeliveryPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrict") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingDistrictId") + .HasColumnType("uuid"); + + b.Property("BuildingEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingId") + .HasColumnType("uuid"); + + b.Property("BuildingInfoToContactPerson") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingInformerNeeded") + .IsRequired() + .HasMaxLength(3) + .IsUnicode(false) + .HasColumnType("character varying(3)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingTypeId") + .HasColumnType("uuid"); + + b.Property("BuildingVisitingAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingVisitingPostalPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("BuildingWebpage") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ConstituencyNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("GroupId") + .HasColumnType("uuid"); + + b.Property("ParishName") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ParishNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("RoomElectoralDistrictId") + .HasColumnType("uuid"); + + b.Property("RoomId") + .HasColumnType("uuid"); + + b.Property("RoomName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("RoomView", (string)null); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Views.StaffingView", b => + { + b.Property("Accepted") + .HasColumnType("boolean"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("ElectionId") + .HasColumnType("uuid"); + + b.Property("ElectoralDistrictId") + .HasColumnType("uuid"); + + b.Property("GroupId") + .HasColumnType("uuid"); + + b.Property("PersonAddress") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonCo") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonEmail") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFirstName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonFreeText") + .HasColumnType("text") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonId") + .HasColumnType("uuid"); + + b.Property("PersonLastName") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonMobilePhone") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPhoneNumber") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostPlace") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonPostalCode") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonSocialSecurityNumber") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatus") + .HasMaxLength(7) + .IsUnicode(false) + .HasColumnType("character varying(7)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonStatusId") + .HasMaxLength(36) + .IsUnicode(false) + .HasColumnType("character varying(36)") + .UseCollation("da-DK-x-icu"); + + b.Property("PersonType") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.Property("PublicDescription") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .UseCollation("da-DK-x-icu"); + + b.ToTable((string)null); + + b.ToView("StaffingView", (string)null); + }); + + modelBuilder.Entity("RelatedList", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.ListTypeEntity", null) + .WithMany() + .HasForeignKey("PrimaryListTypeId") + .IsRequired() + .HasConstraintName("FK_RelatedList_ListTypePrimary"); + + b.HasOne("Valghalla.Database.Entities.Analyze.ListTypeEntity", null) + .WithMany() + .HasForeignKey("RelatedListTypeId") + .IsRequired() + .HasConstraintName("FK_RelatedList_ListTypeRelated"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ColumnEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.DatatypeEntity", "Datatype") + .WithMany("Columns") + .HasForeignKey("DatatypeId") + .IsRequired() + .HasConstraintName("FK_Column_Datatype"); + + b.HasOne("Valghalla.Database.Entities.Analyze.ListPickerTypeEntity", "ListPickerType") + .WithMany("Columns") + .HasForeignKey("ListPickerTypeId") + .HasConstraintName("FK_Column_ListPickerType"); + + b.HasOne("Valghalla.Database.Entities.Analyze.ListTypeEntity", "ListType") + .WithMany("Columns") + .HasForeignKey("ListTypeId") + .IsRequired() + .HasConstraintName("FK_Column_ListType"); + + b.Navigation("Datatype"); + + b.Navigation("ListPickerType"); + + b.Navigation("ListType"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ColumnOperatorEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.ColumnEntity", "Column") + .WithMany("ColumnOperators") + .HasForeignKey("ColumnId") + .IsRequired() + .HasConstraintName("FK_ColumnOperator_Column"); + + b.HasOne("Valghalla.Database.Entities.Analyze.OperatorEntity", "Operator") + .WithMany("ColumnOperators") + .HasForeignKey("OperatorId") + .IsRequired() + .HasConstraintName("FK__ColumnOpe__Opera__37703C52"); + + b.Navigation("Column"); + + b.Navigation("Operator"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterColumnEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.ColumnEntity", "Column") + .WithMany("FilterColumns") + .HasForeignKey("ColumnId") + .IsRequired() + .HasConstraintName("FK_FilterColumn_Column"); + + b.HasOne("Valghalla.Database.Entities.Analyze.ColumnOperatorEntity", "ColumnOperator") + .WithMany("FilterColumns") + .HasForeignKey("ColumnOperatorId") + .IsRequired() + .HasConstraintName("FK__FilterCol__Colum__3A4CA8FD"); + + b.HasOne("Valghalla.Database.Entities.Analyze.FilterEntity", "Filter") + .WithMany("FilterColumns") + .HasForeignKey("FilterId") + .IsRequired() + .HasConstraintName("FK__FilterCol__Filte__3B40CD36"); + + b.Navigation("Column"); + + b.Navigation("ColumnOperator"); + + b.Navigation("Filter"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterColumnValueEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.FilterColumnEntity", "FilterColumn") + .WithMany("FilterColumnValues") + .HasForeignKey("FilterColumnId") + .IsRequired() + .HasConstraintName("FK__FilterCol__Filte__3D2915A8"); + + b.Navigation("FilterColumn"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.QueryEntity", "Query") + .WithMany("Filters") + .HasForeignKey("QueryId") + .IsRequired() + .HasConstraintName("FK__Filter__QueryId__395884C4"); + + b.Navigation("Query"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ListTypeColumnEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.ColumnEntity", "Column") + .WithMany("ListTypeColumns") + .HasForeignKey("ColumnId") + .IsRequired() + .HasConstraintName("FK_ListTypeColumn_Column"); + + b.HasOne("Valghalla.Database.Entities.Analyze.ListTypeEntity", "ListType") + .WithMany("ListTypeColumns") + .HasForeignKey("ListTypeId") + .IsRequired() + .HasConstraintName("FK_ListTypeColumn_ListType"); + + b.Navigation("Column"); + + b.Navigation("ListType"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ResultColumnEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.ColumnEntity", "Column") + .WithMany("ResultColumns") + .HasForeignKey("ColumnId") + .IsRequired() + .HasConstraintName("FK_ResultColumn_Column"); + + b.HasOne("Valghalla.Database.Entities.Analyze.QueryEntity", "Query") + .WithMany("ResultColumns") + .HasForeignKey("QueryId") + .IsRequired() + .HasConstraintName("FK__ResultCol__Query__41EDCAC5"); + + b.Navigation("Column"); + + b.Navigation("Query"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.SortColumnEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Analyze.ColumnEntity", "Column") + .WithMany("SortColumns") + .HasForeignKey("ColumnId") + .IsRequired() + .HasConstraintName("FK_SortColumn_Column"); + + b.HasOne("Valghalla.Database.Entities.Analyze.QueryEntity", "Query") + .WithMany("SortColumns") + .HasForeignKey("QueryId") + .IsRequired() + .HasConstraintName("FK__SortColum__Query__43D61337"); + + b.Navigation("Column"); + + b.Navigation("Query"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.AreaEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.AuditLogEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "DoneByUser") + .WithMany() + .HasForeignKey("DoneBy") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("DoneByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationLogEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("CommunicationLogs") + .HasForeignKey("ParticipantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Participant"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationTemplateFileEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "CommunicationTemplate") + .WithMany("CommunicationTemplateFiles") + .HasForeignKey("CommunicationTemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.FileReferenceEntity", "FileReference") + .WithMany("CommunicationTemplateFiles") + .HasForeignKey("FileReferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CommunicationTemplate"); + + b.Navigation("CreatedByUser"); + + b.Navigation("FileReference"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionCommitteeContactInformationEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.FileReferenceEntity", "LogoFileReference") + .WithMany("ElectionCommitteeContactInformation") + .HasForeignKey("LogoFileReferenceId"); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("LogoFileReference"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "ConfirmationOfCancellationCommunicationTemplate") + .WithMany() + .HasForeignKey("ConfirmationOfCancellationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "ConfirmationOfRegistrationCommunicationTemplate") + .WithMany() + .HasForeignKey("ConfirmationOfRegistrationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ElectionTypeEntity", "ElectionType") + .WithMany("Elections") + .HasForeignKey("ElectionTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "InvitationCommunicationTemplate") + .WithMany() + .HasForeignKey("InvitationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "InvitationReminderCommunicationTemplate") + .WithMany() + .HasForeignKey("InvitationReminderCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "RetractedInvitationCommunicationTemplate") + .WithMany() + .HasForeignKey("RetractedInvitationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "TaskReminderCommunicationTemplate") + .WithMany() + .HasForeignKey("TaskReminderCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("ChangedByUser"); + + b.Navigation("ConfirmationOfCancellationCommunicationTemplate"); + + b.Navigation("ConfirmationOfRegistrationCommunicationTemplate"); + + b.Navigation("CreatedByUser"); + + b.Navigation("ElectionType"); + + b.Navigation("InvitationCommunicationTemplate"); + + b.Navigation("InvitationReminderCommunicationTemplate"); + + b.Navigation("RetractedInvitationCommunicationTemplate"); + + b.Navigation("TaskReminderCommunicationTemplate"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTaskTypeCommunicationTemplateEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "ConfirmationOfCancellationCommunicationTemplate") + .WithMany() + .HasForeignKey("ConfirmationOfCancellationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "ConfirmationOfRegistrationCommunicationTemplate") + .WithMany() + .HasForeignKey("ConfirmationOfRegistrationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_ElectionTaskTypeCommunicationTemplates_CommunicationTempla~1"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ElectionEntity", "Election") + .WithMany("ElectionTaskTypeCommunicationTemplates") + .HasForeignKey("ElectionId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "InvitationCommunicationTemplate") + .WithMany() + .HasForeignKey("InvitationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_ElectionTaskTypeCommunicationTemplates_CommunicationTempla~2"); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "InvitationReminderCommunicationTemplate") + .WithMany() + .HasForeignKey("InvitationReminderCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_ElectionTaskTypeCommunicationTemplates_CommunicationTempla~3"); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "RetractedInvitationCommunicationTemplate") + .WithMany() + .HasForeignKey("RetractedInvitationCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_ElectionTaskTypeCommunicationTemplates_CommunicationTempla~4"); + + b.HasOne("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", "TaskReminderCommunicationTemplate") + .WithMany() + .HasForeignKey("TaskReminderCommunicationTemplateId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_ElectionTaskTypeCommunicationTemplates_CommunicationTempla~5"); + + b.HasOne("Valghalla.Database.Entities.Tables.TaskTypeEntity", "TaskType") + .WithMany("ElectionTaskTypeCommunicationTemplates") + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("ConfirmationOfCancellationCommunicationTemplate"); + + b.Navigation("ConfirmationOfRegistrationCommunicationTemplate"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Election"); + + b.Navigation("InvitationCommunicationTemplate"); + + b.Navigation("InvitationReminderCommunicationTemplate"); + + b.Navigation("RetractedInvitationCommunicationTemplate"); + + b.Navigation("TaskReminderCommunicationTemplate"); + + b.Navigation("TaskType"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTypeEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTypeValidationRuleEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.ElectionTypeEntity", "ElectionType") + .WithMany("ValidationRules") + .HasForeignKey("ElectionTypeId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ElectionValidationRuleEntity", "ValidationRule") + .WithMany("ValidationRules") + .HasForeignKey("ValidationRuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ElectionType"); + + b.Navigation("ValidationRule"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionWorkLocationEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ElectionEntity", "Election") + .WithMany("ElectionWorkLocations") + .HasForeignKey("ElectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationEntity", "WorkLocation") + .WithMany("ElectionWorkLocations") + .HasForeignKey("WorkLocationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Election"); + + b.Navigation("WorkLocation"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.FileEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.FileReferenceEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.FileEntity", null) + .WithOne("FileReference") + .HasForeignKey("Valghalla.Database.Entities.Tables.FileReferenceEntity", "FileId"); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ParticipantEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "User") + .WithOne("Participant") + .HasForeignKey("Valghalla.Database.Entities.Tables.ParticipantEntity", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ParticipantEventLogEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("ParticipantEventLogs") + .HasForeignKey("ParticipantId") + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Participant"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.RejectedTaskAssignmentEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ElectionEntity", "Election") + .WithMany() + .HasForeignKey("ElectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany() + .HasForeignKey("ParticipantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.TaskTypeEntity", "TaskType") + .WithMany() + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.TeamEntity", "Team") + .WithMany() + .HasForeignKey("TeamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationEntity", "WorkLocation") + .WithMany() + .HasForeignKey("WorkLocationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Election"); + + b.Navigation("Participant"); + + b.Navigation("TaskType"); + + b.Navigation("Team"); + + b.Navigation("WorkLocation"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.SpecialDietEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.SpecialDietParticipantEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("SpecialDietParticipants") + .HasForeignKey("ParticipantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.SpecialDietEntity", "SpecialDiet") + .WithMany("SpecialDietParticipants") + .HasForeignKey("SpecialDietId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Participant"); + + b.Navigation("SpecialDiet"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskAssignmentEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ElectionEntity", "Election") + .WithMany() + .HasForeignKey("ElectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("TaskAssignments") + .HasForeignKey("ParticipantId"); + + b.HasOne("Valghalla.Database.Entities.Tables.TaskTypeEntity", "TaskType") + .WithMany("TaskAssignments") + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.TeamEntity", "Team") + .WithMany() + .HasForeignKey("TeamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationEntity", "WorkLocation") + .WithMany() + .HasForeignKey("WorkLocationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationTaskTypeEntity", "WorkLocationTaskType") + .WithMany("TaskAssignments") + .HasForeignKey("WorkLocationId", "TaskTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationTeamEntity", "WorkLocationTeam") + .WithMany("TaskAssignments") + .HasForeignKey("WorkLocationId", "TeamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Election"); + + b.Navigation("Participant"); + + b.Navigation("TaskType"); + + b.Navigation("Team"); + + b.Navigation("WorkLocation"); + + b.Navigation("WorkLocationTaskType"); + + b.Navigation("WorkLocationTeam"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskLinkEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.ElectionEntity", "Election") + .WithMany() + .HasForeignKey("ElectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Election"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskTypeEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskTypeFileEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.FileReferenceEntity", "FileReference") + .WithMany("TaskTypeFiles") + .HasForeignKey("FileReferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.TaskTypeEntity", "TaskType") + .WithMany("TaskTypeFiles") + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("FileReference"); + + b.Navigation("TaskType"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TasksFilteredLinkEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.ElectionEntity", "Election") + .WithMany() + .HasForeignKey("ElectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Election"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamMemberEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("TeamMembers") + .HasForeignKey("ParticipantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.TeamEntity", "Team") + .WithMany("TeamMembers") + .HasForeignKey("TeamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Participant"); + + b.Navigation("Team"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamResponsibleEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("TeamResponsibles") + .HasForeignKey("ParticipantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.TeamEntity", "Team") + .WithMany("TeamResponsibles") + .HasForeignKey("TeamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Participant"); + + b.Navigation("Team"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WebPageEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.AreaEntity", "Area") + .WithMany("WorkLocations") + .HasForeignKey("AreaId") + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Area"); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationResponsibleEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "ChangedByUser") + .WithMany() + .HasForeignKey("ChangedBy"); + + b.HasOne("Valghalla.Database.Entities.Tables.UserEntity", "CreatedByUser") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.ParticipantEntity", "Participant") + .WithMany("WorkLocationResponsibles") + .HasForeignKey("ParticipantId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationEntity", "WorkLocation") + .WithMany("WorkLocationResponsibles") + .HasForeignKey("WorkLocationId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.Navigation("ChangedByUser"); + + b.Navigation("CreatedByUser"); + + b.Navigation("Participant"); + + b.Navigation("WorkLocation"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationTaskTypeEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.TaskTypeEntity", "TaskType") + .WithMany("WorkLocationTaskTypes") + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationEntity", "WorkLocation") + .WithMany("WorkLocationTaskTypes") + .HasForeignKey("WorkLocationId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.Navigation("TaskType"); + + b.Navigation("WorkLocation"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationTeamEntity", b => + { + b.HasOne("Valghalla.Database.Entities.Tables.TeamEntity", "Team") + .WithMany("WorkLocationTeams") + .HasForeignKey("TeamId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Valghalla.Database.Entities.Tables.WorkLocationEntity", "WorkLocation") + .WithMany("WorkLocationTeams") + .HasForeignKey("WorkLocationId") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.Navigation("Team"); + + b.Navigation("WorkLocation"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ColumnEntity", b => + { + b.Navigation("ColumnOperators"); + + b.Navigation("FilterColumns"); + + b.Navigation("ListTypeColumns"); + + b.Navigation("ResultColumns"); + + b.Navigation("SortColumns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ColumnOperatorEntity", b => + { + b.Navigation("FilterColumns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.DatatypeEntity", b => + { + b.Navigation("Columns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterColumnEntity", b => + { + b.Navigation("FilterColumnValues"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.FilterEntity", b => + { + b.Navigation("FilterColumns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ListPickerTypeEntity", b => + { + b.Navigation("Columns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.ListTypeEntity", b => + { + b.Navigation("Columns"); + + b.Navigation("ListTypeColumns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.OperatorEntity", b => + { + b.Navigation("ColumnOperators"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Analyze.QueryEntity", b => + { + b.Navigation("Filters"); + + b.Navigation("ResultColumns"); + + b.Navigation("SortColumns"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.AreaEntity", b => + { + b.Navigation("WorkLocations"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.CommunicationTemplateEntity", b => + { + b.Navigation("CommunicationTemplateFiles"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionEntity", b => + { + b.Navigation("ElectionTaskTypeCommunicationTemplates"); + + b.Navigation("ElectionWorkLocations"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionTypeEntity", b => + { + b.Navigation("Elections"); + + b.Navigation("ValidationRules"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ElectionValidationRuleEntity", b => + { + b.Navigation("ValidationRules"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.FileEntity", b => + { + b.Navigation("FileReference") + .IsRequired(); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.FileReferenceEntity", b => + { + b.Navigation("CommunicationTemplateFiles"); + + b.Navigation("ElectionCommitteeContactInformation"); + + b.Navigation("TaskTypeFiles"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.ParticipantEntity", b => + { + b.Navigation("CommunicationLogs"); + + b.Navigation("ParticipantEventLogs"); + + b.Navigation("SpecialDietParticipants"); + + b.Navigation("TaskAssignments"); + + b.Navigation("TeamMembers"); + + b.Navigation("TeamResponsibles"); + + b.Navigation("WorkLocationResponsibles"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.SpecialDietEntity", b => + { + b.Navigation("SpecialDietParticipants"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TaskTypeEntity", b => + { + b.Navigation("ElectionTaskTypeCommunicationTemplates"); + + b.Navigation("TaskAssignments"); + + b.Navigation("TaskTypeFiles"); + + b.Navigation("WorkLocationTaskTypes"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.TeamEntity", b => + { + b.Navigation("TeamMembers"); + + b.Navigation("TeamResponsibles"); + + b.Navigation("WorkLocationTeams"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.UserEntity", b => + { + b.Navigation("Participant"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationEntity", b => + { + b.Navigation("ElectionWorkLocations"); + + b.Navigation("WorkLocationResponsibles"); + + b.Navigation("WorkLocationTaskTypes"); + + b.Navigation("WorkLocationTeams"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationTaskTypeEntity", b => + { + b.Navigation("TaskAssignments"); + }); + + modelBuilder.Entity("Valghalla.Database.Entities.Tables.WorkLocationTeamEntity", b => + { + b.Navigation("TaskAssignments"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Valghalla.Database/Migrations/20240209084438_AddMoreConfiguration.cs b/Valghalla.Database/Migrations/20240209084438_AddMoreConfiguration.cs new file mode 100644 index 0000000..5651123 --- /dev/null +++ b/Valghalla.Database/Migrations/20240209084438_AddMoreConfiguration.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Valghalla.Database.Schema.Data; + +#nullable disable + +namespace Valghalla.Database.Migrations +{ + /// + public partial class AddMoreConfiguration : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql(ConfigurationData.AddJobRoleDescriptionConfiguraitonData()); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Valghalla.Database/Schema/Data/ConfigurationData.cs b/Valghalla.Database/Schema/Data/ConfigurationData.cs index 8659902..945d4f6 100644 --- a/Valghalla.Database/Schema/Data/ConfigurationData.cs +++ b/Valghalla.Database/Schema/Data/ConfigurationData.cs @@ -57,5 +57,11 @@ internal static string InitAuthConfigrationData() insert into ""Configuration"" values('{nameof(ExternalAuthConfiguration)}.{nameof(ExternalAuthConfiguration.SigningCertificatePassword)}', '') on conflict do nothing; "; + + internal static string AddJobRoleDescriptionConfiguraitonData() + => $@" + insert into ""Configuration"" values('{nameof(InternalAuthConfiguration)}.{nameof(InternalAuthConfiguration.JobRoleDescription)}', '') + on conflict do nothing; + "; } } diff --git a/Valghalla.External.API/Controllers/AuthController.cs b/Valghalla.External.API/Controllers/AuthController.cs index b9ce9a1..1137b08 100644 --- a/Valghalla.External.API/Controllers/AuthController.cs +++ b/Valghalla.External.API/Controllers/AuthController.cs @@ -54,7 +54,7 @@ public async Task LoginAsync(CancellationToken cancellationToken) [HttpPost("AssertionConsumerService")] public async Task SetupAssertionConsumerServiceAsync(CancellationToken cancellationToken) { - var redirectUrl = await saml2AuthService.SetupAssertionConsumerServiceAsync(TransformClaims, cancellationToken); + var redirectUrl = await saml2AuthService.SetupAssertionConsumerServiceAsync(TransformClaims, false, cancellationToken); saml2AuthService.SaveClientSession(); return Redirect(redirectUrl); diff --git a/Valghalla.Integration/Auth/AuthObjects.cs b/Valghalla.Integration/Auth/AuthObjects.cs new file mode 100644 index 0000000..7457e32 --- /dev/null +++ b/Valghalla.Integration/Auth/AuthObjects.cs @@ -0,0 +1,71 @@ +namespace Valghalla.Integration.Auth +{ + public static class AuthObjects + { + // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. + /// + [System.SerializableAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://itst.dk/oiosaml/basic_privilege_profile")] + [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://itst.dk/oiosaml/basic_privilege_profile", IsNullable = false)] + public class PrivilegeList + { + + private PrivilegeGroup privilegeGroupField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Namespace = "")] + public PrivilegeGroup PrivilegeGroup + { + get + { + return this.privilegeGroupField; + } + set + { + this.privilegeGroupField = value; + } + } + } + + /// + [System.SerializableAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] + [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] + public class PrivilegeGroup + { + + private string privilegeField; + + private string scopeField; + + /// + public string Privilege + { + get + { + return this.privilegeField; + } + set + { + this.privilegeField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string Scope + { + get + { + return this.scopeField; + } + set + { + this.scopeField = value; + } + } + } + } +} diff --git a/Valghalla.Integration/DependencyInjectionExtension.cs b/Valghalla.Integration/DependencyInjectionExtension.cs index 9f6513d..85a2949 100644 --- a/Valghalla.Integration/DependencyInjectionExtension.cs +++ b/Valghalla.Integration/DependencyInjectionExtension.cs @@ -42,6 +42,7 @@ public static IServiceCollection AddSaml2Auth(this IServiceCollection services) options.LoginPath = new PathString("/api/auth/login"); options.SlidingExpiration = true; options.Cookie.SameSite = SameSiteMode.None; + options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Events.OnRedirectToLogin = async (c) => { diff --git a/Valghalla.Integration/Saml/Saml2AuthService.cs b/Valghalla.Integration/Saml/Saml2AuthService.cs index 24fb086..8020988 100644 --- a/Valghalla.Integration/Saml/Saml2AuthService.cs +++ b/Valghalla.Integration/Saml/Saml2AuthService.cs @@ -10,10 +10,13 @@ using System.Security.Authentication; using System.Security.Claims; using System.Security.Cryptography.X509Certificates; +using System.Xml.Serialization; using Valghalla.Application.Authentication; using Valghalla.Application.Cache; +using Valghalla.Application.Configuration; using Valghalla.Application.Saml; using Valghalla.Application.Tenant; +using Valghalla.Integration.Auth; namespace Valghalla.Integration.Saml { @@ -29,6 +32,7 @@ internal class Saml2AuthService : ISaml2AuthService private readonly IAppMemoryCache appMemoryCache; private readonly ITenantContextProvider tenantContextProvider; private readonly ISaml2AuthContextProvider saml2AuthContextProvider; + private readonly InternalAuthConfiguration configuration; private HttpContext HttpContext { @@ -52,7 +56,8 @@ public Saml2AuthService( IWebHostEnvironment environment, IAppMemoryCache appMemoryCache, ITenantContextProvider tenantContextProvider, - ISaml2AuthContextProvider saml2AuthContextProvider) + ISaml2AuthContextProvider saml2AuthContextProvider, + InternalAuthConfiguration configuration) { this.authConfigOptions = authConfigOptions; this.httpContextAccessor = httpContextAccessor; @@ -60,6 +65,7 @@ public Saml2AuthService( this.appMemoryCache = appMemoryCache; this.tenantContextProvider = tenantContextProvider; this.saml2AuthContextProvider = saml2AuthContextProvider; + this.configuration = configuration; } public bool IsAuthenticated() @@ -116,7 +122,7 @@ public async Task LogoutAsync(bool profileDeleted, CancellationToken can return binding.RedirectLocation.OriginalString; } - public async Task SetupAssertionConsumerServiceAsync(Func transform, CancellationToken cancellationToken) + public async Task SetupAssertionConsumerServiceAsync(Func transform, bool isInternal, CancellationToken cancellationToken) { var saml2Config = await GetSaml2ConfigurationAsync(cancellationToken); var binding = new Saml2PostBinding(); @@ -132,7 +138,7 @@ public async Task SetupAssertionConsumerServiceAsync(Func SetupLogoutResponseAsync(string logoutPath, Cancellati } } - private async Task CreateSession(Saml2AuthnResponse saml2AuthnResponse, Func transform) + private async Task CreateSession(Saml2AuthnResponse saml2AuthnResponse, Func transform, bool isInternal) { if (HttpContext.Request.Cookies.Any()) { @@ -212,6 +218,9 @@ private async Task CreateSession(Saml2AuthnResponse saml2AuthnResponse, Func { + if(isInternal) + CheckJobRoleDefinition(claimsPrincipal); + CheckAssurance(claimsPrincipal); return transform(claimsPrincipal); }); @@ -230,6 +239,27 @@ private static ClaimsPrincipal CheckAssurance(ClaimsPrincipal claimsPrincipal) return claimsPrincipal; } + private void CheckJobRoleDefinition(ClaimsPrincipal claimsPrincipal) + { + if (string.IsNullOrEmpty(configuration.JobRoleDescription)) + throw new UnauthorizedAccessException("Missing authentication configuration"); + + var privilegeClaim = claimsPrincipal.Claims.FirstOrDefault(x => x.Type == "dk:gov:saml:attribute:Privileges_intermediate" && !string.IsNullOrEmpty(x.Value)); + + if (privilegeClaim is null) + throw new UnauthorizedAccessException("You are not authorized to the system"); + + byte[] data = Convert.FromBase64String(privilegeClaim.Value); + string decodedString = System.Text.Encoding.UTF8.GetString(data); + + var serializer = new XmlSerializer(typeof(AuthObjects.PrivilegeList)); + + var serializedObject = (AuthObjects.PrivilegeList)serializer.Deserialize(new StringReader(decodedString)); + + if (configuration.JobRoleDescription != serializedObject.PrivilegeGroup.Privilege) + throw new UnauthorizedAccessException("You are not authorized to the system"); + } + private async Task GetSaml2ConfigurationAsync(CancellationToken cancellationToken) { var key = nameof(Saml2Configuration); diff --git a/Valghalla.Internal.API/Controllers/AuthController.cs b/Valghalla.Internal.API/Controllers/AuthController.cs index 5a91a7a..84ecb6b 100644 --- a/Valghalla.Internal.API/Controllers/AuthController.cs +++ b/Valghalla.Internal.API/Controllers/AuthController.cs @@ -58,7 +58,7 @@ public async Task LoginAsync(CancellationToken cancellationToken) [HttpPost("AssertionConsumerService")] public async Task SetupAssertionConsumerServiceAsync(CancellationToken cancellationToken) { - var redirectUrl = await saml2AuthService.SetupAssertionConsumerServiceAsync(TransformClaims, cancellationToken); + var redirectUrl = await saml2AuthService.SetupAssertionConsumerServiceAsync(TransformClaims, true, cancellationToken); return Redirect(redirectUrl); }