From 1339d7b9a269c9068be8873ac10b2afe5dc4c9c9 Mon Sep 17 00:00:00 2001 From: thabart Date: Mon, 3 Jun 2024 12:48:07 +0200 Subject: [PATCH 01/86] WIP --- .../MessageBusErrorMessage.cs | 14 ++++++ .../Provisioning/ExtractUsersFaultConsumer.cs | 21 +++++++++ .../Provisioning/ImportUsersFaultConsumer.cs | 47 +++++++++++++++++++ .../Stores/IMessageBusErrorStore.cs | 11 +++++ 4 files changed, 93 insertions(+) create mode 100644 src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer/Provisioning/ExtractUsersFaultConsumer.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer/Provisioning/ImportUsersFaultConsumer.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer/Stores/IMessageBusErrorStore.cs diff --git a/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs b/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs new file mode 100644 index 000000000..ee59ff612 --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs @@ -0,0 +1,14 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. +namespace SimpleIdServer.IdServer.Domains; + +public class MessageBusErrorMessage +{ + public string Id { get; set; } = null!; + public string? ExternalId { get; set; } = null; + public string Name { get; set; } = null!; + public string FullName { get; set; } = null!; + public string Content { get; set; } = null!; + public List Exceptions { get; set; } = new List(); + public DateTime ReceivedDateTime { get; set; } +} \ No newline at end of file diff --git a/src/IdServer/SimpleIdServer.IdServer/Provisioning/ExtractUsersFaultConsumer.cs b/src/IdServer/SimpleIdServer.IdServer/Provisioning/ExtractUsersFaultConsumer.cs new file mode 100644 index 000000000..8e329e4c6 --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer/Provisioning/ExtractUsersFaultConsumer.cs @@ -0,0 +1,21 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. + +using MassTransit; +using System.Threading.Tasks; + +namespace SimpleIdServer.IdServer.Provisioning +{ + public class ExtractUsersFaultConsumer : IConsumer> + { + public ExtractUsersFaultConsumer() + { + + } + + public Task Consume(ConsumeContext> context) + { + throw new System.NotImplementedException(); + } + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer/Provisioning/ImportUsersFaultConsumer.cs b/src/IdServer/SimpleIdServer.IdServer/Provisioning/ImportUsersFaultConsumer.cs new file mode 100644 index 000000000..ae5dd2a5d --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer/Provisioning/ImportUsersFaultConsumer.cs @@ -0,0 +1,47 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. + +using MassTransit; +using SimpleIdServer.IdServer.Domains; +using SimpleIdServer.IdServer.Stores; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; + +namespace SimpleIdServer.IdServer.Provisioning +{ + public class ImportUsersFaultConsumer : IConsumer> + { + private readonly ITransactionBuilder _transactionBuilder; + private readonly IMessageBusErrorStore _messageBusErrorStore; + + public ImportUsersFaultConsumer(ITransactionBuilder transactionBuilder, IMessageBusErrorStore messageBusErrorStore) + { + _transactionBuilder = transactionBuilder; + _messageBusErrorStore = messageBusErrorStore; + } + + public async Task Consume(ConsumeContext> context) + { + using (var transaction = _transactionBuilder.Build()) + { + var type = typeof(ImportUsersCommand); + var exceptions = context.Message.Exceptions == null ? new List() : context.Message.Exceptions.Select(e => e.Message).ToList(); + var message = new MessageBusErrorMessage + { + Id = Guid.NewGuid().ToString(), + Content = JsonSerializer.Serialize(context.Message.Message), + ExternalId = context.Message.Message.ProcessId, + FullName = type.FullName, + Name = type.Name, + Exceptions = exceptions, + ReceivedDateTime = DateTime.UtcNow + }; + _messageBusErrorStore.Add(message); + await transaction.Commit(context.CancellationToken); + } + } + } +} \ No newline at end of file diff --git a/src/IdServer/SimpleIdServer.IdServer/Stores/IMessageBusErrorStore.cs b/src/IdServer/SimpleIdServer.IdServer/Stores/IMessageBusErrorStore.cs new file mode 100644 index 000000000..0da77a54b --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer/Stores/IMessageBusErrorStore.cs @@ -0,0 +1,11 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. + +using SimpleIdServer.IdServer.Domains; + +namespace SimpleIdServer.IdServer.Stores; + +public interface IMessageBusErrorStore +{ + void Add(MessageBusErrorMessage message); +} From 3b0948026b2555897b3aaa00b18f278289a8b331 Mon Sep 17 00:00:00 2001 From: thabart Date: Mon, 3 Jun 2024 13:19:51 +0200 Subject: [PATCH 02/86] Cannot assign the same email twice --- .../Pages/UserSettings.razor | 5 +++++ .../Stores/UserStore/UserEffects.cs | 20 +++++++++++++++++-- .../Stores/UserStore/UserReducer.cs | 3 +++ .../Api/Users/UsersController.cs | 6 ++++++ .../Resources/Global.Designer.cs | 9 +++++++++ .../Resources/Global.resx | 3 +++ 6 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/IdServer/SimpleIdServer.IdServer.Website/Pages/UserSettings.razor b/src/IdServer/SimpleIdServer.IdServer.Website/Pages/UserSettings.razor index 461c475fa..b0f96d5ca 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Website/Pages/UserSettings.razor +++ b/src/IdServer/SimpleIdServer.IdServer.Website/Pages/UserSettings.razor @@ -90,6 +90,11 @@ notificationService.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = Global.UserDetailsUpdated }); StateHasChanged(); }); + SubscribeToAction((act) => + { + notificationService.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = act.ErrorMessage }); + StateHasChanged(); + }); } } diff --git a/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserEffects.cs b/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserEffects.cs index e0f9b5136..b03a98b8d 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserEffects.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserEffects.cs @@ -9,6 +9,7 @@ using SimpleIdServer.IdServer.DTOs; using SimpleIdServer.IdServer.Stores; using SimpleIdServer.IdServer.Website.Stores.Base; +using SimpleIdServer.IdServer.Website.Stores.ScopeStore; using System.Linq.Dynamic.Core; using System.Text; using System.Text.Json; @@ -113,8 +114,18 @@ public async Task Handle(UpdateUserDetailsAction action, IDispatcher dispatcher) Method = HttpMethod.Put, Content = new StringContent(JsonSerializer.Serialize(req), Encoding.UTF8, "application/json") }; - await httpClient.SendAsync(requestMessage); - dispatcher.Dispatch(new UpdateUserDetailsSuccessAction { Email = action.Email, Firstname = action.Firstname, Lastname = action.Lastname, UserId = action.UserId, NotificationMode = action.NotificationMode }); + var httpResult = await httpClient.SendAsync(requestMessage); + try + { + httpResult.EnsureSuccessStatusCode(); + dispatcher.Dispatch(new UpdateUserDetailsSuccessAction { Email = action.Email, Firstname = action.Firstname, Lastname = action.Lastname, UserId = action.UserId, NotificationMode = action.NotificationMode }); + } + catch + { + var json = await httpResult.Content.ReadAsStringAsync(); + var jObj = JsonObject.Parse(json); + dispatcher.Dispatch(new UpdateUserDetailsFailureAction { ErrorMessage = jObj["error_description"].GetValue() }); + } } [EffectMethod] @@ -486,6 +497,11 @@ public class UpdateUserDetailsSuccessAction public string? NotificationMode { get; set; } = null; } + public class UpdateUserDetailsFailureAction + { + public string ErrorMessage { get; set; } + } + public class RevokeUserConsentAction { public string UserId { get; set; } = null!; diff --git a/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserReducer.cs b/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserReducer.cs index 48edd50b6..d0df5d7ee 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserReducer.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Website/Stores/UserStore/UserReducer.cs @@ -268,6 +268,9 @@ public static UpdateUserState ReduceStartAddUserAction(UpdateUserState state, St [ReducerMethod] public static UpdateUserState ReduceUpdateUserDetailsAction(UpdateUserState state, UpdateUserDetailsSuccessAction act) => new(false); + [ReducerMethod] + public static UpdateUserState ReduceUpdateUserDetailsAction(UpdateUserState state, UpdateUserDetailsFailureAction act) => new(false); + [ReducerMethod] public static UpdateUserState ReduceRevokeUserConsentAction(UpdateUserState state, RevokeUserConsentAction act) => new(true); diff --git a/src/IdServer/SimpleIdServer.IdServer/Api/Users/UsersController.cs b/src/IdServer/SimpleIdServer.IdServer/Api/Users/UsersController.cs index 884858f22..054f59c44 100644 --- a/src/IdServer/SimpleIdServer.IdServer/Api/Users/UsersController.cs +++ b/src/IdServer/SimpleIdServer.IdServer/Api/Users/UsersController.cs @@ -229,6 +229,12 @@ public async Task Update([FromRoute] string prefix, string id, [F if (request == null) throw new OAuthException(HttpStatusCode.BadRequest, ErrorCodes.INVALID_REQUEST, Global.InvalidIncomingRequest); var user = await _userRepository.GetById(id, prefix, cancellationToken); if (user == null) throw new OAuthException(HttpStatusCode.NotFound, ErrorCodes.NOT_FOUND, string.Format(Global.UnknownUser, id)); + if (!string.IsNullOrWhiteSpace(request.Email)) + { + var existingUser = await _userRepository.GetByEmail(request.Email, prefix, cancellationToken); + if (existingUser != null && existingUser.Id != id) throw new OAuthException(HttpStatusCode.BadRequest, ErrorCodes.INVALID_REQUEST, Global.EmailIsTaken); + } + user.UpdateEmail(request.Email); user.UpdateName(request.Name); user.UpdateLastname(request.Lastname); diff --git a/src/IdServer/SimpleIdServer.IdServer/Resources/Global.Designer.cs b/src/IdServer/SimpleIdServer.IdServer/Resources/Global.Designer.cs index bfbd6e861..d08c02f6d 100644 --- a/src/IdServer/SimpleIdServer.IdServer/Resources/Global.Designer.cs +++ b/src/IdServer/SimpleIdServer.IdServer/Resources/Global.Designer.cs @@ -978,6 +978,15 @@ public static string DuplicateScopes { } } + /// + /// Recherche une chaîne localisée semblable à The email is taken. + /// + public static string EmailIsTaken { + get { + return ResourceManager.GetString("EmailIsTaken", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à the authorization request is expired. /// diff --git a/src/IdServer/SimpleIdServer.IdServer/Resources/Global.resx b/src/IdServer/SimpleIdServer.IdServer/Resources/Global.resx index 158606a1a..d580a626f 100644 --- a/src/IdServer/SimpleIdServer.IdServer/Resources/Global.resx +++ b/src/IdServer/SimpleIdServer.IdServer/Resources/Global.resx @@ -423,6 +423,9 @@ duplicate scopes : {0} + + The email is taken + the authorization request is expired From 21f83f2783f3f4b7226765f75efcb1c9b7fd6ca7 Mon Sep 17 00:00:00 2001 From: thabart Date: Mon, 3 Jun 2024 13:31:08 +0200 Subject: [PATCH 03/86] Ticket #751 : Check migration scripts are applied --- .../SimpleIdServer.IdServer.Store.EF/KeyValueRepository.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.EF/KeyValueRepository.cs b/src/IdServer/SimpleIdServer.IdServer.Store.EF/KeyValueRepository.cs index 4af6896b2..48ee083f5 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Store.EF/KeyValueRepository.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Store.EF/KeyValueRepository.cs @@ -27,7 +27,10 @@ public Task Get(string key, CancellationToken c => _dbContext.ConfigurationKeyPairValueRecords.SingleOrDefaultAsync(c => c.Name == key, cancellationToken); public Task> GetAll(CancellationToken cancellationToken) - => _dbContext.ConfigurationKeyPairValueRecords.ToListAsync(cancellationToken); + { + if (_dbContext.Database.GetPendingMigrations().Any()) return Task.FromResult(new List()); + return _dbContext.ConfigurationKeyPairValueRecords.ToListAsync(cancellationToken); + } public Task SaveChanges(CancellationToken cancellationToken) => _dbContext.SaveChangesAsync(cancellationToken); From d960c83dc63a4898e49ea85ef0f1e2c5abf18d0b Mon Sep 17 00:00:00 2001 From: thabart Date: Mon, 3 Jun 2024 22:10:30 +0200 Subject: [PATCH 04/86] Can relaunch message --- .../MessageBusErrorMessage.cs | 1 + ...40603124218_AddMessageBusError.Designer.cs | 3219 ++++++++++++++++ .../20240603124218_AddMessageBusError.cs | 39 + ...40603193149_AddQueueNameColumn.Designer.cs | 3223 +++++++++++++++++ .../20240603193149_AddQueueNameColumn.cs | 29 + .../Migrations/StoreDbContextModelSnapshot.cs | 37 +- .../MessageBusErrorMessageConfiguration.cs | 18 + .../MessageBusErrorStore.cs | 35 + .../ServiceCollectionExtensions.cs | 1 + .../StoreDbContext.cs | 3 + .../MessageBusErrorStore.cs | 44 + .../Models/SugarMessageBusErrorMessage.cs | 52 + .../ServiceCollectionExtensions.cs | 1 + .../Pages/IdentityProvisioningHistories.razor | 35 +- .../Resources/Global.Designer.cs | 27 + .../Resources/Global.resx | 9 + .../IdentityProvisioningErrorsDialog.razor | 26 + .../IdentityProvisioningEffects.cs | 37 + .../IdentityProvisioningReducers.cs | 13 + .../ErrorMessages/ErrorMessagesController.cs | 84 + ...unchAllErrorMessagesByExternalIdRequest.cs | 12 + .../IdentityProvisioningController.cs | 22 +- .../IdentityProvisioningResult.cs | 18 + .../SimpleIdServer.IdServer/Constants.cs | 1 + .../DTOs/IdentityProvisioningNames.cs | 2 + .../IdServerBuilder.cs | 2 + .../Provisioning/ExtractUsersConsumer.cs | 4 +- .../Provisioning/ExtractUsersFaultConsumer.cs | 35 +- .../Provisioning/ImportUsersFaultConsumer.cs | 5 +- .../Resources/Global.Designer.cs | 9 + .../Resources/Global.resx | 3 + .../Stores/IMessageBusErrorStore.cs | 6 + .../WebApplicationExtensions.cs | 7 + 33 files changed, 7048 insertions(+), 11 deletions(-) create mode 100644 src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.Designer.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.Designer.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.Store.EF/Configurations/MessageBusErrorMessageConfiguration.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.Store.EF/MessageBusErrorStore.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/MessageBusErrorStore.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/Models/SugarMessageBusErrorMessage.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer.Website/Shared/IdentityProvisioningErrorsDialog.razor create mode 100644 src/IdServer/SimpleIdServer.IdServer/Api/ErrorMessages/ErrorMessagesController.cs create mode 100644 src/IdServer/SimpleIdServer.IdServer/Api/ErrorMessages/RelaunchAllErrorMessagesByExternalIdRequest.cs diff --git a/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs b/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs index ee59ff612..5e0d123a5 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Domains/MessageBusErrorMessage.cs @@ -11,4 +11,5 @@ public class MessageBusErrorMessage public string Content { get; set; } = null!; public List Exceptions { get; set; } = new List(); public DateTime ReceivedDateTime { get; set; } + public string QueueName { get; set; } = null!; } \ No newline at end of file diff --git a/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.Designer.cs b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.Designer.cs new file mode 100644 index 000000000..bcffecb7e --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.Designer.cs @@ -0,0 +1,3219 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using SimpleIdServer.IdServer.Store.EF; + +#nullable disable + +namespace SimpleIdServer.IdServer.SqlServerMigrations.Migrations +{ + [DbContext(typeof(StoreDbContext))] + [Migration("20240603124218_AddMessageBusError")] + partial class AddMessageBusError + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("ApiResourceRealm", b => + { + b.Property("ApiResourcesId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ApiResourcesId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("ApiResourceRealm"); + }); + + modelBuilder.Entity("ApiResourceScope", b => + { + b.Property("ApiResourcesId") + .HasColumnType("nvarchar(450)"); + + b.Property("ScopesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ApiResourcesId", "ScopesId"); + + b.HasIndex("ScopesId"); + + b.ToTable("ApiResourceScope"); + }); + + modelBuilder.Entity("AuthenticationContextClassReferenceRealm", b => + { + b.Property("AuthenticationContextClassReferencesId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("AuthenticationContextClassReferencesId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("AuthenticationContextClassReferenceRealm"); + }); + + modelBuilder.Entity("AuthenticationSchemeProviderRealm", b => + { + b.Property("AuthenticationSchemeProvidersId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("AuthenticationSchemeProvidersId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("AuthenticationSchemeProviderRealm"); + }); + + modelBuilder.Entity("CertificateAuthorityRealm", b => + { + b.Property("CertificateAuthoritiesId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("CertificateAuthoritiesId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("CertificateAuthorityRealm"); + }); + + modelBuilder.Entity("ClientRealm", b => + { + b.Property("ClientsId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ClientsId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("ClientRealm"); + }); + + modelBuilder.Entity("ClientScope", b => + { + b.Property("ClientsId") + .HasColumnType("nvarchar(450)"); + + b.Property("ScopesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ClientsId", "ScopesId"); + + b.HasIndex("ScopesId"); + + b.ToTable("ClientScope"); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordTranslation", b => + { + b.Property("ConfigurationDefinitionRecordId") + .HasColumnType("nvarchar(450)"); + + b.Property("TranslationsId") + .HasColumnType("int"); + + b.HasKey("ConfigurationDefinitionRecordId", "TranslationsId"); + + b.HasIndex("TranslationsId"); + + b.ToTable("ConfigurationDefinitionRecordTranslation"); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordValueTranslation", b => + { + b.Property("ConfigurationDefinitionRecordValueId") + .HasColumnType("nvarchar(450)"); + + b.Property("TranslationsId") + .HasColumnType("int"); + + b.HasKey("ConfigurationDefinitionRecordValueId", "TranslationsId"); + + b.HasIndex("TranslationsId"); + + b.ToTable("ConfigurationDefinitionRecordValueTranslation"); + }); + + modelBuilder.Entity("GroupScope", b => + { + b.Property("GroupsId") + .HasColumnType("nvarchar(450)"); + + b.Property("RolesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsId", "RolesId"); + + b.HasIndex("RolesId"); + + b.ToTable("GroupScope"); + }); + + modelBuilder.Entity("IdentityProvisioningRealm", b => + { + b.Property("IdentityProvisioningLstId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("IdentityProvisioningLstId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("IdentityProvisioningRealm"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FriendlyName") + .HasColumnType("nvarchar(max)"); + + b.Property("Xml") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("DataProtectionKeys"); + }); + + modelBuilder.Entity("RealmScope", b => + { + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.Property("ScopesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("RealmsName", "ScopesId"); + + b.HasIndex("ScopesId"); + + b.ToTable("RealmScope"); + }); + + modelBuilder.Entity("RealmSerializedFileKey", b => + { + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedFileKeysId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("RealmsName", "SerializedFileKeysId"); + + b.HasIndex("SerializedFileKeysId"); + + b.ToTable("RealmSerializedFileKey"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ApiResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Audience") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "aud"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.ToTable("ApiResources"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuditEvent", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AuthMethod") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "auth_method"); + + b.Property("Claims") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "claims"); + + b.Property("ClientId") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("ErrorMessage") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "error_message"); + + b.Property("EventName") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("IsError") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_error"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "realm"); + + b.Property("RedirectUrl") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "redirect_url"); + + b.Property("RequestJSON") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_json"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scopes"); + + b.Property("UserName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "username"); + + b.HasKey("Id"); + + b.ToTable("AuditEvents"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AuthenticationMethodReferences") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "amrs"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "display_name"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("RegistrationWorkflowId") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "workflow_id"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.HasIndex("RegistrationWorkflowId"); + + b.ToTable("Acrs"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AuthSchemeProviderDefinitionName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("AuthSchemeProviderDefinitionName"); + + b.ToTable("AuthenticationSchemeProviders"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderDefinition", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("HandlerFullQualifiedName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "handler_full_qualifiedname"); + + b.Property("Image") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "img"); + + b.Property("OptionsFullQualifiedName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "options_full_qualifiedname"); + + b.Property("OptionsName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "options_name"); + + b.HasKey("Name"); + + b.ToTable("AuthenticationSchemeProviderDefinitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderMapper", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("IdProviderId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("MapperType") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SourceClaimName") + .HasColumnType("nvarchar(max)"); + + b.Property("TargetUserAttribute") + .HasColumnType("nvarchar(max)"); + + b.Property("TargetUserProperty") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("IdProviderId"); + + b.ToTable("AuthenticationSchemeProviderMapper"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Audience") + .HasColumnType("nvarchar(max)"); + + b.Property("AuthorizedScopeId") + .HasColumnType("int"); + + b.Property("Resource") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizedScopeId"); + + b.ToTable("AuthorizedResource"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedScope", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConsentId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Scope") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scope"); + + b.HasKey("Id"); + + b.HasIndex("ConsentId"); + + b.ToTable("AuthorizedScope"); + + b.HasAnnotation("Relational:JsonPropertyName", "scopes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorize", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .HasColumnType("nvarchar(max)"); + + b.Property("ExpirationDateTime") + .HasColumnType("datetime2"); + + b.Property("Interval") + .HasColumnType("int"); + + b.Property("LastStatus") + .HasColumnType("int"); + + b.Property("NextFetchTime") + .HasColumnType("datetime2"); + + b.Property("NotificationEdp") + .HasColumnType("nvarchar(max)"); + + b.Property("NotificationMode") + .HasColumnType("nvarchar(max)"); + + b.Property("NotificationToken") + .HasColumnType("nvarchar(max)"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RejectionSentDateTime") + .HasColumnType("datetime2"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedAuthorizationDetails") + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("BCAuthorizeLst"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorizeHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BCAuthorizeId") + .HasColumnType("nvarchar(450)"); + + b.Property("EndDateTime") + .HasColumnType("datetime2"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("StartDateTime") + .HasColumnType("datetime2"); + + b.Property("Status") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BCAuthorizeId"); + + b.ToTable("BCAuthorizeHistory"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.CertificateAuthority", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("EndDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "end_datetime"); + + b.Property("FindType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "find_type"); + + b.Property("FindValue") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "find_value"); + + b.Property("PrivateKey") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "private_key"); + + b.Property("PublicKey") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "public_key"); + + b.Property("Source") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "source"); + + b.Property("StartDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "start_datetime"); + + b.Property("StoreLocation") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "store_location"); + + b.Property("StoreName") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "store_name"); + + b.Property("SubjectName") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "subject_name"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.ToTable("CertificateAuthorities"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClaimProvider", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClaimType") + .HasColumnType("int"); + + b.Property("ConnectionString") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProviderType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("ClaimProviders"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Client", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AccessTokenType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "access_token_type"); + + b.Property("ApplicationType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "application_type"); + + b.Property("AuthReqIdExpirationTimeInSeconds") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "auth_reqid_expirationtime"); + + b.Property("AuthenticationContextClassReferenceId") + .HasColumnType("nvarchar(450)"); + + b.Property("AuthorizationDataTypes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_data_types"); + + b.Property("AuthorizationEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_encrypted_response_alg"); + + b.Property("AuthorizationEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_encrypted_response_enc"); + + b.Property("AuthorizationSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_signed_response_alg"); + + b.Property("BCAuthenticationRequestSigningAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_authentication_request_signing_alg"); + + b.Property("BCClientNotificationEndpoint") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_client_notification_endpoint"); + + b.Property("BCIntervalSeconds") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "bc_interval"); + + b.Property("BCTokenDeliveryMode") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_token_delivery_mode"); + + b.Property("BCUserCodeParameter") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_user_code_parameter"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_logout_session_required"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_logout_uri"); + + b.Property("CNonceExpirationTimeInSeconds") + .HasColumnType("float"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_id"); + + b.Property("ClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_secret"); + + b.Property("ClientSecretExpirationTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "client_secret_expires_at"); + + b.Property("ClientType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_type"); + + b.Property("Contacts") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "contacts"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("CredentialOfferEndpoint") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "credential_offer_endpoint"); + + b.Property("DPOPBoundAccessTokens") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "dpop_bound_access_tokens"); + + b.Property("DPOPNonceLifetimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "dpop_lifetime"); + + b.Property("DefaultAcrValues") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "default_acr_values"); + + b.Property("DefaultMaxAge") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "default_max_age"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "frontchannel_logout_session_required"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "frontchannel_logout_uri"); + + b.Property("GrantTypes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "grant_types"); + + b.Property("IdTokenEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id_token_encrypted_response_alg"); + + b.Property("IdTokenEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id_token_encrypted_response_enc"); + + b.Property("IdTokenSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id_token_signed_response_alg"); + + b.Property("InitiateLoginUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "initiate_login_uri"); + + b.Property("IsConsentDisabled") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_consent_disabled"); + + b.Property("IsDPOPNonceRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "dpop_nonce_required"); + + b.Property("IsRedirectUrlCaseSensitive") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_redirect_url_casesensitive"); + + b.Property("IsResourceParameterRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_resource_parameter_required"); + + b.Property("IsTokenExchangeEnabled") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_token_exchange_enabled"); + + b.Property("IsTransactionCodeRequired") + .HasColumnType("bit"); + + b.Property("JwksUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "jwks_uri"); + + b.Property("PairWiseIdentifierSalt") + .HasColumnType("nvarchar(max)"); + + b.Property("PostLogoutRedirectUris") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "post_logout_redirect_uris"); + + b.Property("PreAuthCodeExpirationTimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "pre_auth_code_expiration_time"); + + b.Property("PreferredTokenProfile") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "preferred_token_profile"); + + b.Property("RedirectToRevokeSessionUI") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "redirect_revoke_session_ui"); + + b.Property("RedirectionUrls") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "redirect_uris"); + + b.Property("RefreshTokenExpirationTimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "refresh_token_expiration_time_seconds"); + + b.Property("RegistrationAccessToken") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "registration_access_token"); + + b.Property("RequestObjectEncryptionAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_object_encryption_alg"); + + b.Property("RequestObjectEncryptionEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_object_encryption_enc"); + + b.Property("RequestObjectSigningAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_object_signing_alg"); + + b.Property("RequireAuthTime") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "require_auth_time"); + + b.Property("ResponseTypes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "response_types"); + + b.Property("SectorIdentifierUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "sector_identifier_uri"); + + b.Property("SerializedParameters") + .HasColumnType("nvarchar(max)"); + + b.Property("SoftwareId") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "software_id"); + + b.Property("SoftwareVersion") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "software_version"); + + b.Property("SubjectType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "subject_type"); + + b.Property("TlsClientAuthSanDNS") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_dns"); + + b.Property("TlsClientAuthSanEmail") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_email"); + + b.Property("TlsClientAuthSanIP") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_ip"); + + b.Property("TlsClientAuthSanURI") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_uri"); + + b.Property("TlsClientAuthSubjectDN") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_subject_dn"); + + b.Property("TlsClientCertificateBoundAccessToken") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_certificate_bound_access_token"); + + b.Property("TokenEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_encrypted_response_alg"); + + b.Property("TokenEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_encrypted_response_enc"); + + b.Property("TokenEndPointAuthMethod") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_endpoint_auth_method"); + + b.Property("TokenExchangeType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "token_exchange_type"); + + b.Property("TokenExpirationTimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "token_expiration_time_seconds"); + + b.Property("TokenSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_signed_response_alg"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.Property("UserInfoEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "userinfo_encrypted_response_alg"); + + b.Property("UserInfoEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "userinfo_encrypted_response_enc"); + + b.Property("UserInfoSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "userinfo_signed_response_alg"); + + b.HasKey("Id"); + + b.HasIndex("AuthenticationContextClassReferenceId"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientCertificate", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CertificateAuthorityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("EndDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "end_datetime"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("PrivateKey") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "private_key"); + + b.Property("PublicKey") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "public_key"); + + b.Property("StartDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "start_datetime"); + + b.HasKey("Id"); + + b.HasIndex("CertificateAuthorityId"); + + b.ToTable("ClientCertificate"); + + b.HasAnnotation("Relational:JsonPropertyName", "client_certificates"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientJsonWebKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Alg") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "alg"); + + b.Property("ClientId") + .HasColumnType("nvarchar(450)"); + + b.Property("KeyType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "key_type"); + + b.Property("Kid") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "kid"); + + b.Property("SerializedJsonWebKey") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "serialized_jwk"); + + b.Property("Usage") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "usage"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientJsonWebKey"); + + b.HasAnnotation("Relational:JsonPropertyName", "serialized_jwks"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("FullQualifiedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("Definitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConfigurationDefinitionId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayCondition") + .HasColumnType("nvarchar(max)"); + + b.Property("IsRequired") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("Type") + .HasColumnType("int"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ConfigurationDefinitionId"); + + b.ToTable("ConfigurationDefinitionRecord"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecordValue", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConfigurationDefinitionRecordId") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ConfigurationDefinitionRecordId"); + + b.ToTable("ConfigurationDefinitionRecordValue"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationKeyPairValueRecord", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Name"); + + b.ToTable("ConfigurationKeyPairValueRecords"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Consent", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Claims") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "claims"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ScopeId") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedAuthorizationDetails") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "status"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ScopeId"); + + b.HasIndex("UserId"); + + b.ToTable("Grants"); + + b.HasAnnotation("Relational:JsonPropertyName", "consents"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.DeviceAuthCode", b => + { + b.Property("DeviceCode") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("ExpirationDateTime") + .HasColumnType("datetime2"); + + b.Property("LastAccessTime") + .HasColumnType("datetime2"); + + b.Property("NextAccessDateTime") + .HasColumnType("datetime2"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("UserLogin") + .HasColumnType("nvarchar(max)"); + + b.HasKey("DeviceCode"); + + b.HasIndex("ClientId"); + + b.HasIndex("UserId"); + + b.ToTable("DeviceAuthCodes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ExtractedRepresentation", b => + { + b.Property("ExternalId") + .HasColumnType("nvarchar(450)"); + + b.Property("Version") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ExternalId"); + + b.ToTable("ExtractedRepresentations"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ExtractedRepresentationStaging", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("GroupIds") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IdProvisioningProcessId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RepresentationId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RepresentationVersion") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Type") + .HasColumnType("int"); + + b.Property("Values") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("ExtractedRepresentationsStaging"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GotifySession", b => + { + b.Property("ApplicationToken") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientToken") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ApplicationToken"); + + b.ToTable("GotifySessions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Group", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("FullPath") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "full_path"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("ParentGroupId") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "parent_group_id"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.HasIndex("ParentGroupId"); + + b.ToTable("Groups"); + + b.HasAnnotation("Relational:JsonPropertyName", "group"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupRealm", b => + { + b.Property("GroupsId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("GroupRealm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupUser", b => + { + b.Property("GroupsId") + .HasColumnType("nvarchar(450)"); + + b.Property("UsersId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsId", "UsersId"); + + b.HasIndex("UsersId"); + + b.ToTable("GroupUser"); + + b.HasAnnotation("Relational:JsonPropertyName", "groups"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioning", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("DefinitionName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("DefinitionName"); + + b.ToTable("IdentityProvisioningLst"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("OptionsFullQualifiedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OptionsName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Name"); + + b.ToTable("IdentityProvisioningDefinitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentPage") + .HasColumnType("int"); + + b.Property("ExecutionDateTime") + .HasColumnType("datetime2"); + + b.Property("IdentityProvisioningId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("NbFilteredRepresentations") + .HasColumnType("int"); + + b.Property("NbGroups") + .HasColumnType("int"); + + b.Property("NbUsers") + .HasColumnType("int"); + + b.Property("ProcessId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TotalPages") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdentityProvisioningId"); + + b.ToTable("IdentityProvisioningHistory"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningMappingRule", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("From") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HasMultipleAttribute") + .HasColumnType("bit"); + + b.Property("IdentityProvisioningDefinitionName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("MapperType") + .HasColumnType("int"); + + b.Property("TargetUserAttribute") + .HasColumnType("nvarchar(max)"); + + b.Property("TargetUserProperty") + .HasColumnType("nvarchar(max)"); + + b.Property("Usage") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdentityProvisioningDefinitionName"); + + b.ToTable("IdentityProvisioningMappingRule"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Language", b => + { + b.Property("Code") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "code"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Code"); + + b.ToTable("Languages"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.MessageBusErrorMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Exceptions") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ExternalId") + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceivedDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("MessageBusErrorMessages"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("PublicId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Purpose") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "purpose"); + + b.Property("RealmName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RealmName"); + + b.ToTable("PresentationDefinitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionFormat", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Format") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PresentationDefinitionInputDescriptorId") + .HasColumnType("nvarchar(450)"); + + b.Property("ProofType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("PresentationDefinitionInputDescriptorId"); + + b.ToTable("PresentationDefinitionFormat"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("PresentationDefinitionId") + .HasColumnType("nvarchar(450)"); + + b.Property("PublicId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Purpose") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "purpose"); + + b.HasKey("Id"); + + b.HasIndex("PresentationDefinitionId"); + + b.ToTable("PresentationDefinitionInputDescriptor"); + + b.HasAnnotation("Relational:JsonPropertyName", "input_descriptors"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptorConstraint", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Filter") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Path") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PresentationDefinitionInputDescriptorId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("PresentationDefinitionInputDescriptorId"); + + b.ToTable("PresentationDefinitionInputDescriptorConstraint"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Realm", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Name"); + + b.ToTable("Realms"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RealmUser", b => + { + b.Property("UsersId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UsersId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("RealmUser"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("IsDefault") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("RealmName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Steps") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("RealmName"); + + b.ToTable("RegistrationWorkflows"); + + b.HasAnnotation("Relational:JsonPropertyName", "registration_workflow"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Scope", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("IsExposedInConfigurationEdp") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_exposed"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("Protocol") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "protocol"); + + b.Property("Type") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.ToTable("Scopes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ScopeClaimMapper", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("IncludeInAccessToken") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "include_in_accesstoken"); + + b.Property("IsMultiValued") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_multivalued"); + + b.Property("MapperType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "mapper_type"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("SAMLAttributeName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "saml_attribute_name"); + + b.Property("ScopeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SourceUserAttribute") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "source_user_attribute"); + + b.Property("SourceUserProperty") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "source_user_property"); + + b.Property("TargetClaimPath") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "target_claim_path"); + + b.Property("TokenClaimJsonType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "token_claim_json_type"); + + b.HasKey("Id"); + + b.HasIndex("ScopeId"); + + b.ToTable("ScopeClaimMapper"); + + b.HasAnnotation("Relational:JsonPropertyName", "mappers"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.SerializedFileKey", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Alg") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Enc") + .HasColumnType("nvarchar(max)"); + + b.Property("IsSymmetric") + .HasColumnType("bit"); + + b.Property("Key") + .HasColumnType("varbinary(max)"); + + b.Property("KeyId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PrivateKeyPem") + .HasColumnType("nvarchar(max)"); + + b.Property("PublicKeyPem") + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.Property("Usage") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("SerializedFileKeys"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Token", b => + { + b.Property("PkID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("PkID")); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AuthorizationCode") + .HasColumnType("nvarchar(max)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2"); + + b.Property("GrantId") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("nvarchar(max)"); + + b.Property("Jkt") + .HasColumnType("nvarchar(max)"); + + b.Property("OriginalData") + .HasColumnType("nvarchar(max)"); + + b.Property("SessionId") + .HasColumnType("nvarchar(max)"); + + b.Property("TokenType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("PkID"); + + b.ToTable("Tokens"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Translation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("nvarchar(450)"); + + b.Property("Key") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Language") + .HasColumnType("nvarchar(max)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("Translations"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPendingRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Owner") + .HasColumnType("nvarchar(max)"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Requester") + .HasColumnType("nvarchar(max)"); + + b.Property("ResourceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TicketId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.ToTable("UmaPendingRequest"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicket", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.ToTable("UMAPermissionTicket"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicketRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ResourceId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UMAPermissionTicketId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UMAPermissionTicketId"); + + b.ToTable("UMAPermissionTicketRecord"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "_id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("IconUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "icon_uri"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "resource_scopes"); + + b.Property("Subject") + .HasColumnType("nvarchar(max)"); + + b.Property("Type") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("UmaResources"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermission", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scopes"); + + b.Property("UMAResourceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UMAResourceId"); + + b.ToTable("UMAResourcePermission"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermissionClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "claim_type"); + + b.Property("FriendlyName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "friendly_name"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("UMAResourcePermissionId") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("UMAResourcePermissionId"); + + b.ToTable("UMAResourcePermissionClaim"); + + b.HasAnnotation("Relational:JsonPropertyName", "claims"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "createDateTime"); + + b.Property("DeviceRegistrationToken") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "device_registration_token"); + + b.Property("Email") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "email"); + + b.Property("EmailVerified") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "emailVerified"); + + b.Property("EncodedPicture") + .HasColumnType("nvarchar(max)"); + + b.Property("Firstname") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "firstname"); + + b.Property("IdentityProvisioningId") + .HasColumnType("nvarchar(450)"); + + b.Property("Lastname") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "lastname"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("NotificationMode") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "notification_mode"); + + b.Property("Source") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "source"); + + b.Property("Status") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "status"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "updateDateTime"); + + b.HasKey("Id"); + + b.HasIndex("IdentityProvisioningId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserClaim", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("Type") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims"); + + b.HasAnnotation("Relational:JsonPropertyName", "claims"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserCredential", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CredentialType") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("HOTPWindow") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "hotp_window"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "active"); + + b.Property("OTPAlg") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "otp_alg"); + + b.Property("OTPCounter") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "otp_counter"); + + b.Property("TOTPStep") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "totp_step"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserCredential"); + + b.HasAnnotation("Relational:JsonPropertyName", "credentials"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserDevice", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("DeviceType") + .HasColumnType("nvarchar(max)"); + + b.Property("Manufacturer") + .HasColumnType("nvarchar(max)"); + + b.Property("Model") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("PushToken") + .HasColumnType("nvarchar(max)"); + + b.Property("PushType") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Version") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserDevice"); + + b.HasAnnotation("Relational:JsonPropertyName", "devices"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserExternalAuthProvider", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Scheme") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scheme"); + + b.Property("Subject") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "sub"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserExternalAuthProvider"); + + b.HasAnnotation("Relational:JsonPropertyName", "external_auth_providers"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserSession", b => + { + b.Property("SessionId") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "session_id"); + + b.Property("AuthenticationDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "auth_datetime"); + + b.Property("ExpirationDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "exp_datetime"); + + b.Property("IsClientsNotified") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_clients_notified"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "realm"); + + b.Property("SerializedClientIds") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "state"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("SessionId"); + + b.HasIndex("UserId"); + + b.ToTable("UserSession"); + + b.HasAnnotation("Relational:JsonPropertyName", "sessions"); + }); + + modelBuilder.Entity("TranslationUMAResource", b => + { + b.Property("TranslationsId") + .HasColumnType("int"); + + b.Property("UMAResourceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("TranslationsId", "UMAResourceId"); + + b.HasIndex("UMAResourceId"); + + b.ToTable("TranslationUMAResource"); + }); + + modelBuilder.Entity("ApiResourceRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ApiResource", null) + .WithMany() + .HasForeignKey("ApiResourcesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ApiResourceScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ApiResource", null) + .WithMany() + .HasForeignKey("ApiResourcesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("ScopesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("AuthenticationContextClassReferenceRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", null) + .WithMany() + .HasForeignKey("AuthenticationContextClassReferencesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("AuthenticationSchemeProviderRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", null) + .WithMany() + .HasForeignKey("AuthenticationSchemeProvidersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("CertificateAuthorityRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.CertificateAuthority", null) + .WithMany() + .HasForeignKey("CertificateAuthoritiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ClientRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany() + .HasForeignKey("ClientsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ClientScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany() + .HasForeignKey("ClientsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("ScopesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordTranslation", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", null) + .WithMany() + .HasForeignKey("ConfigurationDefinitionRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Translation", null) + .WithMany() + .HasForeignKey("TranslationsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordValueTranslation", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecordValue", null) + .WithMany() + .HasForeignKey("ConfigurationDefinitionRecordValueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Translation", null) + .WithMany() + .HasForeignKey("TranslationsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("GroupScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", null) + .WithMany() + .HasForeignKey("GroupsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("RolesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("IdentityProvisioningRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioning", null) + .WithMany() + .HasForeignKey("IdentityProvisioningLstId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("RealmScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("ScopesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("RealmSerializedFileKey", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.SerializedFileKey", null) + .WithMany() + .HasForeignKey("SerializedFileKeysId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", "RegistrationWorkflow") + .WithMany("Acrs") + .HasForeignKey("RegistrationWorkflowId"); + + b.Navigation("RegistrationWorkflow"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderDefinition", "AuthSchemeProviderDefinition") + .WithMany("AuthSchemeProviders") + .HasForeignKey("AuthSchemeProviderDefinitionName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AuthSchemeProviderDefinition"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderMapper", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", "IdProvider") + .WithMany("Mappers") + .HasForeignKey("IdProviderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IdProvider"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedResource", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthorizedScope", null) + .WithMany("AuthorizedResources") + .HasForeignKey("AuthorizedScopeId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Consent", "Consent") + .WithMany("Scopes") + .HasForeignKey("ConsentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Consent"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorizeHistory", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.BCAuthorize", null) + .WithMany("Histories") + .HasForeignKey("BCAuthorizeId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Client", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", null) + .WithMany("Clients") + .HasForeignKey("AuthenticationContextClassReferenceId"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientCertificate", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.CertificateAuthority", "CertificateAuthority") + .WithMany("ClientCertificates") + .HasForeignKey("CertificateAuthorityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CertificateAuthority"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientJsonWebKey", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany("SerializedJsonWebKeys") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinition", null) + .WithMany("Records") + .HasForeignKey("ConfigurationDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecordValue", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", null) + .WithMany("Values") + .HasForeignKey("ConfigurationDefinitionRecordId"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Consent", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany("Consents") + .HasForeignKey("ScopeId"); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Consents") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.DeviceAuthCode", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", "Client") + .WithMany("DeviceAuthCodes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany() + .HasForeignKey("UserId"); + + b.Navigation("Client"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Group", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", "ParentGroup") + .WithMany("Children") + .HasForeignKey("ParentGroupId"); + + b.Navigation("ParentGroup"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", "Group") + .WithMany("Realms") + .HasForeignKey("GroupsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("Groups") + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("Realm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupUser", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", "Group") + .WithMany("Users") + .HasForeignKey("GroupsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Groups") + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioning", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", "Definition") + .WithMany("Instances") + .HasForeignKey("DefinitionName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Definition"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningHistory", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioning", "IdentityProvisioning") + .WithMany("Histories") + .HasForeignKey("IdentityProvisioningId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IdentityProvisioning"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningMappingRule", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", "IdentityProvisioningDefinition") + .WithMany("MappingRules") + .HasForeignKey("IdentityProvisioningDefinitionName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IdentityProvisioningDefinition"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("PresentationDefinitions") + .HasForeignKey("RealmName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Realm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionFormat", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", null) + .WithMany("Format") + .HasForeignKey("PresentationDefinitionInputDescriptorId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.PresentationDefinition", null) + .WithMany("InputDescriptors") + .HasForeignKey("PresentationDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptorConstraint", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", null) + .WithMany("Constraints") + .HasForeignKey("PresentationDefinitionInputDescriptorId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RealmUser", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("Users") + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Realms") + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Realm"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("RegistrationWorkflows") + .HasForeignKey("RealmName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Realm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ScopeClaimMapper", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", "Scope") + .WithMany("ClaimMappers") + .HasForeignKey("ScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Scope"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Translation", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany("Translations") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPendingRequest", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResource", "Resource") + .WithMany() + .HasForeignKey("ResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Resource"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicketRecord", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAPermissionTicket", null) + .WithMany("Records") + .HasForeignKey("UMAPermissionTicketId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermission", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResource", null) + .WithMany("Permissions") + .HasForeignKey("UMAResourceId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermissionClaim", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResourcePermission", null) + .WithMany("Claims") + .HasForeignKey("UMAResourcePermissionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.User", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioning", "IdentityProvisioning") + .WithMany("Users") + .HasForeignKey("IdentityProvisioningId"); + + b.Navigation("IdentityProvisioning"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserClaim", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("OAuthUserClaims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserCredential", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Credentials") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserDevice", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Devices") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserExternalAuthProvider", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("ExternalAuthProviders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserSession", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Sessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("TranslationUMAResource", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Translation", null) + .WithMany() + .HasForeignKey("TranslationsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResource", null) + .WithMany() + .HasForeignKey("UMAResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", b => + { + b.Navigation("Clients"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", b => + { + b.Navigation("Mappers"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderDefinition", b => + { + b.Navigation("AuthSchemeProviders"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedScope", b => + { + b.Navigation("AuthorizedResources"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorize", b => + { + b.Navigation("Histories"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.CertificateAuthority", b => + { + b.Navigation("ClientCertificates"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Client", b => + { + b.Navigation("DeviceAuthCodes"); + + b.Navigation("SerializedJsonWebKeys"); + + b.Navigation("Translations"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinition", b => + { + b.Navigation("Records"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", b => + { + b.Navigation("Values"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Consent", b => + { + b.Navigation("Scopes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Group", b => + { + b.Navigation("Children"); + + b.Navigation("Realms"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioning", b => + { + b.Navigation("Histories"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", b => + { + b.Navigation("Instances"); + + b.Navigation("MappingRules"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => + { + b.Navigation("InputDescriptors"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", b => + { + b.Navigation("Constraints"); + + b.Navigation("Format"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Realm", b => + { + b.Navigation("Groups"); + + b.Navigation("PresentationDefinitions"); + + b.Navigation("RegistrationWorkflows"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", b => + { + b.Navigation("Acrs"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Scope", b => + { + b.Navigation("ClaimMappers"); + + b.Navigation("Consents"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicket", b => + { + b.Navigation("Records"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResource", b => + { + b.Navigation("Permissions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermission", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.User", b => + { + b.Navigation("Consents"); + + b.Navigation("Credentials"); + + b.Navigation("Devices"); + + b.Navigation("ExternalAuthProviders"); + + b.Navigation("Groups"); + + b.Navigation("OAuthUserClaims"); + + b.Navigation("Realms"); + + b.Navigation("Sessions"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.cs b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.cs new file mode 100644 index 000000000..101feaf25 --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603124218_AddMessageBusError.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace SimpleIdServer.IdServer.SqlServerMigrations.Migrations +{ + /// + public partial class AddMessageBusError : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "MessageBusErrorMessages", + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + ExternalId = table.Column(type: "nvarchar(max)", nullable: true), + Name = table.Column(type: "nvarchar(max)", nullable: false), + FullName = table.Column(type: "nvarchar(max)", nullable: false), + Content = table.Column(type: "nvarchar(max)", nullable: false), + Exceptions = table.Column(type: "nvarchar(max)", nullable: false), + ReceivedDateTime = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_MessageBusErrorMessages", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "MessageBusErrorMessages"); + } + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.Designer.cs b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.Designer.cs new file mode 100644 index 000000000..f525034da --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.Designer.cs @@ -0,0 +1,3223 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using SimpleIdServer.IdServer.Store.EF; + +#nullable disable + +namespace SimpleIdServer.IdServer.SqlServerMigrations.Migrations +{ + [DbContext(typeof(StoreDbContext))] + [Migration("20240603193149_AddQueueNameColumn")] + partial class AddQueueNameColumn + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("ApiResourceRealm", b => + { + b.Property("ApiResourcesId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ApiResourcesId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("ApiResourceRealm"); + }); + + modelBuilder.Entity("ApiResourceScope", b => + { + b.Property("ApiResourcesId") + .HasColumnType("nvarchar(450)"); + + b.Property("ScopesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ApiResourcesId", "ScopesId"); + + b.HasIndex("ScopesId"); + + b.ToTable("ApiResourceScope"); + }); + + modelBuilder.Entity("AuthenticationContextClassReferenceRealm", b => + { + b.Property("AuthenticationContextClassReferencesId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("AuthenticationContextClassReferencesId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("AuthenticationContextClassReferenceRealm"); + }); + + modelBuilder.Entity("AuthenticationSchemeProviderRealm", b => + { + b.Property("AuthenticationSchemeProvidersId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("AuthenticationSchemeProvidersId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("AuthenticationSchemeProviderRealm"); + }); + + modelBuilder.Entity("CertificateAuthorityRealm", b => + { + b.Property("CertificateAuthoritiesId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("CertificateAuthoritiesId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("CertificateAuthorityRealm"); + }); + + modelBuilder.Entity("ClientRealm", b => + { + b.Property("ClientsId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ClientsId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("ClientRealm"); + }); + + modelBuilder.Entity("ClientScope", b => + { + b.Property("ClientsId") + .HasColumnType("nvarchar(450)"); + + b.Property("ScopesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("ClientsId", "ScopesId"); + + b.HasIndex("ScopesId"); + + b.ToTable("ClientScope"); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordTranslation", b => + { + b.Property("ConfigurationDefinitionRecordId") + .HasColumnType("nvarchar(450)"); + + b.Property("TranslationsId") + .HasColumnType("int"); + + b.HasKey("ConfigurationDefinitionRecordId", "TranslationsId"); + + b.HasIndex("TranslationsId"); + + b.ToTable("ConfigurationDefinitionRecordTranslation"); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordValueTranslation", b => + { + b.Property("ConfigurationDefinitionRecordValueId") + .HasColumnType("nvarchar(450)"); + + b.Property("TranslationsId") + .HasColumnType("int"); + + b.HasKey("ConfigurationDefinitionRecordValueId", "TranslationsId"); + + b.HasIndex("TranslationsId"); + + b.ToTable("ConfigurationDefinitionRecordValueTranslation"); + }); + + modelBuilder.Entity("GroupScope", b => + { + b.Property("GroupsId") + .HasColumnType("nvarchar(450)"); + + b.Property("RolesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsId", "RolesId"); + + b.HasIndex("RolesId"); + + b.ToTable("GroupScope"); + }); + + modelBuilder.Entity("IdentityProvisioningRealm", b => + { + b.Property("IdentityProvisioningLstId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("IdentityProvisioningLstId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("IdentityProvisioningRealm"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FriendlyName") + .HasColumnType("nvarchar(max)"); + + b.Property("Xml") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("DataProtectionKeys"); + }); + + modelBuilder.Entity("RealmScope", b => + { + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.Property("ScopesId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("RealmsName", "ScopesId"); + + b.HasIndex("ScopesId"); + + b.ToTable("RealmScope"); + }); + + modelBuilder.Entity("RealmSerializedFileKey", b => + { + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedFileKeysId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("RealmsName", "SerializedFileKeysId"); + + b.HasIndex("SerializedFileKeysId"); + + b.ToTable("RealmSerializedFileKey"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ApiResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Audience") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "aud"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.ToTable("ApiResources"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuditEvent", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AuthMethod") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "auth_method"); + + b.Property("Claims") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "claims"); + + b.Property("ClientId") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("ErrorMessage") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "error_message"); + + b.Property("EventName") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("IsError") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_error"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "realm"); + + b.Property("RedirectUrl") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "redirect_url"); + + b.Property("RequestJSON") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_json"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scopes"); + + b.Property("UserName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "username"); + + b.HasKey("Id"); + + b.ToTable("AuditEvents"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AuthenticationMethodReferences") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "amrs"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "display_name"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("RegistrationWorkflowId") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "workflow_id"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.HasIndex("RegistrationWorkflowId"); + + b.ToTable("Acrs"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AuthSchemeProviderDefinitionName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("AuthSchemeProviderDefinitionName"); + + b.ToTable("AuthenticationSchemeProviders"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderDefinition", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("HandlerFullQualifiedName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "handler_full_qualifiedname"); + + b.Property("Image") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "img"); + + b.Property("OptionsFullQualifiedName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "options_full_qualifiedname"); + + b.Property("OptionsName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "options_name"); + + b.HasKey("Name"); + + b.ToTable("AuthenticationSchemeProviderDefinitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderMapper", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("IdProviderId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("MapperType") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SourceClaimName") + .HasColumnType("nvarchar(max)"); + + b.Property("TargetUserAttribute") + .HasColumnType("nvarchar(max)"); + + b.Property("TargetUserProperty") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("IdProviderId"); + + b.ToTable("AuthenticationSchemeProviderMapper"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Audience") + .HasColumnType("nvarchar(max)"); + + b.Property("AuthorizedScopeId") + .HasColumnType("int"); + + b.Property("Resource") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizedScopeId"); + + b.ToTable("AuthorizedResource"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedScope", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConsentId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Scope") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scope"); + + b.HasKey("Id"); + + b.HasIndex("ConsentId"); + + b.ToTable("AuthorizedScope"); + + b.HasAnnotation("Relational:JsonPropertyName", "scopes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorize", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .HasColumnType("nvarchar(max)"); + + b.Property("ExpirationDateTime") + .HasColumnType("datetime2"); + + b.Property("Interval") + .HasColumnType("int"); + + b.Property("LastStatus") + .HasColumnType("int"); + + b.Property("NextFetchTime") + .HasColumnType("datetime2"); + + b.Property("NotificationEdp") + .HasColumnType("nvarchar(max)"); + + b.Property("NotificationMode") + .HasColumnType("nvarchar(max)"); + + b.Property("NotificationToken") + .HasColumnType("nvarchar(max)"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RejectionSentDateTime") + .HasColumnType("datetime2"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SerializedAuthorizationDetails") + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("BCAuthorizeLst"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorizeHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BCAuthorizeId") + .HasColumnType("nvarchar(450)"); + + b.Property("EndDateTime") + .HasColumnType("datetime2"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.Property("StartDateTime") + .HasColumnType("datetime2"); + + b.Property("Status") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BCAuthorizeId"); + + b.ToTable("BCAuthorizeHistory"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.CertificateAuthority", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("EndDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "end_datetime"); + + b.Property("FindType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "find_type"); + + b.Property("FindValue") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "find_value"); + + b.Property("PrivateKey") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "private_key"); + + b.Property("PublicKey") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "public_key"); + + b.Property("Source") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "source"); + + b.Property("StartDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "start_datetime"); + + b.Property("StoreLocation") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "store_location"); + + b.Property("StoreName") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "store_name"); + + b.Property("SubjectName") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "subject_name"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.ToTable("CertificateAuthorities"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClaimProvider", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ClaimType") + .HasColumnType("int"); + + b.Property("ConnectionString") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProviderType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("ClaimProviders"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Client", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AccessTokenType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "access_token_type"); + + b.Property("ApplicationType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "application_type"); + + b.Property("AuthReqIdExpirationTimeInSeconds") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "auth_reqid_expirationtime"); + + b.Property("AuthenticationContextClassReferenceId") + .HasColumnType("nvarchar(450)"); + + b.Property("AuthorizationDataTypes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_data_types"); + + b.Property("AuthorizationEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_encrypted_response_alg"); + + b.Property("AuthorizationEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_encrypted_response_enc"); + + b.Property("AuthorizationSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "authorization_signed_response_alg"); + + b.Property("BCAuthenticationRequestSigningAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_authentication_request_signing_alg"); + + b.Property("BCClientNotificationEndpoint") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_client_notification_endpoint"); + + b.Property("BCIntervalSeconds") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "bc_interval"); + + b.Property("BCTokenDeliveryMode") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_token_delivery_mode"); + + b.Property("BCUserCodeParameter") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_user_code_parameter"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_logout_session_required"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "backchannel_logout_uri"); + + b.Property("CNonceExpirationTimeInSeconds") + .HasColumnType("float"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_id"); + + b.Property("ClientSecret") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_secret"); + + b.Property("ClientSecretExpirationTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "client_secret_expires_at"); + + b.Property("ClientType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_type"); + + b.Property("Contacts") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "contacts"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("CredentialOfferEndpoint") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "credential_offer_endpoint"); + + b.Property("DPOPBoundAccessTokens") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "dpop_bound_access_tokens"); + + b.Property("DPOPNonceLifetimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "dpop_lifetime"); + + b.Property("DefaultAcrValues") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "default_acr_values"); + + b.Property("DefaultMaxAge") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "default_max_age"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "frontchannel_logout_session_required"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "frontchannel_logout_uri"); + + b.Property("GrantTypes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "grant_types"); + + b.Property("IdTokenEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id_token_encrypted_response_alg"); + + b.Property("IdTokenEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id_token_encrypted_response_enc"); + + b.Property("IdTokenSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id_token_signed_response_alg"); + + b.Property("InitiateLoginUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "initiate_login_uri"); + + b.Property("IsConsentDisabled") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_consent_disabled"); + + b.Property("IsDPOPNonceRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "dpop_nonce_required"); + + b.Property("IsRedirectUrlCaseSensitive") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_redirect_url_casesensitive"); + + b.Property("IsResourceParameterRequired") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_resource_parameter_required"); + + b.Property("IsTokenExchangeEnabled") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_token_exchange_enabled"); + + b.Property("IsTransactionCodeRequired") + .HasColumnType("bit"); + + b.Property("JwksUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "jwks_uri"); + + b.Property("PairWiseIdentifierSalt") + .HasColumnType("nvarchar(max)"); + + b.Property("PostLogoutRedirectUris") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "post_logout_redirect_uris"); + + b.Property("PreAuthCodeExpirationTimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "pre_auth_code_expiration_time"); + + b.Property("PreferredTokenProfile") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "preferred_token_profile"); + + b.Property("RedirectToRevokeSessionUI") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "redirect_revoke_session_ui"); + + b.Property("RedirectionUrls") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "redirect_uris"); + + b.Property("RefreshTokenExpirationTimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "refresh_token_expiration_time_seconds"); + + b.Property("RegistrationAccessToken") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "registration_access_token"); + + b.Property("RequestObjectEncryptionAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_object_encryption_alg"); + + b.Property("RequestObjectEncryptionEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_object_encryption_enc"); + + b.Property("RequestObjectSigningAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "request_object_signing_alg"); + + b.Property("RequireAuthTime") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "require_auth_time"); + + b.Property("ResponseTypes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "response_types"); + + b.Property("SectorIdentifierUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "sector_identifier_uri"); + + b.Property("SerializedParameters") + .HasColumnType("nvarchar(max)"); + + b.Property("SoftwareId") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "software_id"); + + b.Property("SoftwareVersion") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "software_version"); + + b.Property("SubjectType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "subject_type"); + + b.Property("TlsClientAuthSanDNS") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_dns"); + + b.Property("TlsClientAuthSanEmail") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_email"); + + b.Property("TlsClientAuthSanIP") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_ip"); + + b.Property("TlsClientAuthSanURI") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_san_uri"); + + b.Property("TlsClientAuthSubjectDN") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_auth_subject_dn"); + + b.Property("TlsClientCertificateBoundAccessToken") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "tls_client_certificate_bound_access_token"); + + b.Property("TokenEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_encrypted_response_alg"); + + b.Property("TokenEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_encrypted_response_enc"); + + b.Property("TokenEndPointAuthMethod") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_endpoint_auth_method"); + + b.Property("TokenExchangeType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "token_exchange_type"); + + b.Property("TokenExpirationTimeInSeconds") + .HasColumnType("float") + .HasAnnotation("Relational:JsonPropertyName", "token_expiration_time_seconds"); + + b.Property("TokenSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "token_signed_response_alg"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.Property("UserInfoEncryptedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "userinfo_encrypted_response_alg"); + + b.Property("UserInfoEncryptedResponseEnc") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "userinfo_encrypted_response_enc"); + + b.Property("UserInfoSignedResponseAlg") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "userinfo_signed_response_alg"); + + b.HasKey("Id"); + + b.HasIndex("AuthenticationContextClassReferenceId"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientCertificate", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CertificateAuthorityId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("EndDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "end_datetime"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("PrivateKey") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "private_key"); + + b.Property("PublicKey") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "public_key"); + + b.Property("StartDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "start_datetime"); + + b.HasKey("Id"); + + b.HasIndex("CertificateAuthorityId"); + + b.ToTable("ClientCertificate"); + + b.HasAnnotation("Relational:JsonPropertyName", "client_certificates"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientJsonWebKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Alg") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "alg"); + + b.Property("ClientId") + .HasColumnType("nvarchar(450)"); + + b.Property("KeyType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "key_type"); + + b.Property("Kid") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "kid"); + + b.Property("SerializedJsonWebKey") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "serialized_jwk"); + + b.Property("Usage") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "usage"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientJsonWebKey"); + + b.HasAnnotation("Relational:JsonPropertyName", "serialized_jwks"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("FullQualifiedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("Definitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConfigurationDefinitionId") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayCondition") + .HasColumnType("nvarchar(max)"); + + b.Property("IsRequired") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("Type") + .HasColumnType("int"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ConfigurationDefinitionId"); + + b.ToTable("ConfigurationDefinitionRecord"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecordValue", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConfigurationDefinitionRecordId") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ConfigurationDefinitionRecordId"); + + b.ToTable("ConfigurationDefinitionRecordValue"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationKeyPairValueRecord", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Name"); + + b.ToTable("ConfigurationKeyPairValueRecords"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Consent", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Claims") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "claims"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "client_id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ScopeId") + .HasColumnType("nvarchar(450)"); + + b.Property("SerializedAuthorizationDetails") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "status"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("ScopeId"); + + b.HasIndex("UserId"); + + b.ToTable("Grants"); + + b.HasAnnotation("Relational:JsonPropertyName", "consents"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.DeviceAuthCode", b => + { + b.Property("DeviceCode") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("ExpirationDateTime") + .HasColumnType("datetime2"); + + b.Property("LastAccessTime") + .HasColumnType("datetime2"); + + b.Property("NextAccessDateTime") + .HasColumnType("datetime2"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("UserLogin") + .HasColumnType("nvarchar(max)"); + + b.HasKey("DeviceCode"); + + b.HasIndex("ClientId"); + + b.HasIndex("UserId"); + + b.ToTable("DeviceAuthCodes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ExtractedRepresentation", b => + { + b.Property("ExternalId") + .HasColumnType("nvarchar(450)"); + + b.Property("Version") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ExternalId"); + + b.ToTable("ExtractedRepresentations"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ExtractedRepresentationStaging", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("GroupIds") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IdProvisioningProcessId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RepresentationId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RepresentationVersion") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Type") + .HasColumnType("int"); + + b.Property("Values") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("ExtractedRepresentationsStaging"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GotifySession", b => + { + b.Property("ApplicationToken") + .HasColumnType("nvarchar(450)"); + + b.Property("ClientToken") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ApplicationToken"); + + b.ToTable("GotifySessions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Group", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("FullPath") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "full_path"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("ParentGroupId") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "parent_group_id"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.HasIndex("ParentGroupId"); + + b.ToTable("Groups"); + + b.HasAnnotation("Relational:JsonPropertyName", "group"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupRealm", b => + { + b.Property("GroupsId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("GroupRealm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupUser", b => + { + b.Property("GroupsId") + .HasColumnType("nvarchar(450)"); + + b.Property("UsersId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("GroupsId", "UsersId"); + + b.HasIndex("UsersId"); + + b.ToTable("GroupUser"); + + b.HasAnnotation("Relational:JsonPropertyName", "groups"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioning", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("DefinitionName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("DefinitionName"); + + b.ToTable("IdentityProvisioningLst"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("OptionsFullQualifiedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OptionsName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Name"); + + b.ToTable("IdentityProvisioningDefinitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentPage") + .HasColumnType("int"); + + b.Property("ExecutionDateTime") + .HasColumnType("datetime2"); + + b.Property("IdentityProvisioningId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("NbFilteredRepresentations") + .HasColumnType("int"); + + b.Property("NbGroups") + .HasColumnType("int"); + + b.Property("NbUsers") + .HasColumnType("int"); + + b.Property("ProcessId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TotalPages") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdentityProvisioningId"); + + b.ToTable("IdentityProvisioningHistory"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningMappingRule", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("From") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HasMultipleAttribute") + .HasColumnType("bit"); + + b.Property("IdentityProvisioningDefinitionName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("MapperType") + .HasColumnType("int"); + + b.Property("TargetUserAttribute") + .HasColumnType("nvarchar(max)"); + + b.Property("TargetUserProperty") + .HasColumnType("nvarchar(max)"); + + b.Property("Usage") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdentityProvisioningDefinitionName"); + + b.ToTable("IdentityProvisioningMappingRule"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Language", b => + { + b.Property("Code") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "code"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Code"); + + b.ToTable("Languages"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.MessageBusErrorMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Exceptions") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ExternalId") + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("QueueName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceivedDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("MessageBusErrorMessages"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("PublicId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Purpose") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "purpose"); + + b.Property("RealmName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RealmName"); + + b.ToTable("PresentationDefinitions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionFormat", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Format") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PresentationDefinitionInputDescriptorId") + .HasColumnType("nvarchar(450)"); + + b.Property("ProofType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("PresentationDefinitionInputDescriptorId"); + + b.ToTable("PresentationDefinitionFormat"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("PresentationDefinitionId") + .HasColumnType("nvarchar(450)"); + + b.Property("PublicId") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Purpose") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "purpose"); + + b.HasKey("Id"); + + b.HasIndex("PresentationDefinitionId"); + + b.ToTable("PresentationDefinitionInputDescriptor"); + + b.HasAnnotation("Relational:JsonPropertyName", "input_descriptors"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptorConstraint", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Filter") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Path") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PresentationDefinitionInputDescriptorId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("PresentationDefinitionInputDescriptorId"); + + b.ToTable("PresentationDefinitionInputDescriptorConstraint"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Realm", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Name"); + + b.ToTable("Realms"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RealmUser", b => + { + b.Property("UsersId") + .HasColumnType("nvarchar(450)"); + + b.Property("RealmsName") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UsersId", "RealmsName"); + + b.HasIndex("RealmsName"); + + b.ToTable("RealmUser"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("IsDefault") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("RealmName") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Steps") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("RealmName"); + + b.ToTable("RegistrationWorkflows"); + + b.HasAnnotation("Relational:JsonPropertyName", "registration_workflow"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Scope", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("IsExposedInConfigurationEdp") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_exposed"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("Protocol") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "protocol"); + + b.Property("Type") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "update_datetime"); + + b.HasKey("Id"); + + b.ToTable("Scopes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ScopeClaimMapper", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("IncludeInAccessToken") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "include_in_accesstoken"); + + b.Property("IsMultiValued") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_multivalued"); + + b.Property("MapperType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "mapper_type"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("SAMLAttributeName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "saml_attribute_name"); + + b.Property("ScopeId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("SourceUserAttribute") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "source_user_attribute"); + + b.Property("SourceUserProperty") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "source_user_property"); + + b.Property("TargetClaimPath") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "target_claim_path"); + + b.Property("TokenClaimJsonType") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "token_claim_json_type"); + + b.HasKey("Id"); + + b.HasIndex("ScopeId"); + + b.ToTable("ScopeClaimMapper"); + + b.HasAnnotation("Relational:JsonPropertyName", "mappers"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.SerializedFileKey", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Alg") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Enc") + .HasColumnType("nvarchar(max)"); + + b.Property("IsSymmetric") + .HasColumnType("bit"); + + b.Property("Key") + .HasColumnType("varbinary(max)"); + + b.Property("KeyId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PrivateKeyPem") + .HasColumnType("nvarchar(max)"); + + b.Property("PublicKeyPem") + .HasColumnType("nvarchar(max)"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.Property("Usage") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("SerializedFileKeys"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Token", b => + { + b.Property("PkID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("PkID")); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AuthorizationCode") + .HasColumnType("nvarchar(max)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .HasColumnType("nvarchar(max)"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2"); + + b.Property("GrantId") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("nvarchar(max)"); + + b.Property("Jkt") + .HasColumnType("nvarchar(max)"); + + b.Property("OriginalData") + .HasColumnType("nvarchar(max)"); + + b.Property("SessionId") + .HasColumnType("nvarchar(max)"); + + b.Property("TokenType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("PkID"); + + b.ToTable("Tokens"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Translation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("nvarchar(450)"); + + b.Property("Key") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Language") + .HasColumnType("nvarchar(max)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("Translations"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPendingRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Owner") + .HasColumnType("nvarchar(max)"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Requester") + .HasColumnType("nvarchar(max)"); + + b.Property("ResourceId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TicketId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.ToTable("UmaPendingRequest"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicket", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.ToTable("UMAPermissionTicket"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicketRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ResourceId") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UMAPermissionTicketId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UMAPermissionTicketId"); + + b.ToTable("UMAPermissionTicketRecord"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "_id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("IconUri") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "icon_uri"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "resource_scopes"); + + b.Property("Subject") + .HasColumnType("nvarchar(max)"); + + b.Property("Type") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("UmaResources"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermission", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scopes"); + + b.Property("UMAResourceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UMAResourceId"); + + b.ToTable("UMAResourcePermission"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermissionClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "claim_type"); + + b.Property("FriendlyName") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "friendly_name"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("UMAResourcePermissionId") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("UMAResourcePermissionId"); + + b.ToTable("UMAResourcePermissionClaim"); + + b.HasAnnotation("Relational:JsonPropertyName", "claims"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "createDateTime"); + + b.Property("DeviceRegistrationToken") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "device_registration_token"); + + b.Property("Email") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "email"); + + b.Property("EmailVerified") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "emailVerified"); + + b.Property("EncodedPicture") + .HasColumnType("nvarchar(max)"); + + b.Property("Firstname") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "firstname"); + + b.Property("IdentityProvisioningId") + .HasColumnType("nvarchar(450)"); + + b.Property("Lastname") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "lastname"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("NotificationMode") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "notification_mode"); + + b.Property("Source") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "source"); + + b.Property("Status") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "status"); + + b.Property("UpdateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "updateDateTime"); + + b.HasKey("Id"); + + b.HasIndex("IdentityProvisioningId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserClaim", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("Type") + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims"); + + b.HasAnnotation("Relational:JsonPropertyName", "claims"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserCredential", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CredentialType") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("HOTPWindow") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "hotp_window"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "active"); + + b.Property("OTPAlg") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "otp_alg"); + + b.Property("OTPCounter") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "otp_counter"); + + b.Property("TOTPStep") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "totp_step"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserCredential"); + + b.HasAnnotation("Relational:JsonPropertyName", "credentials"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserDevice", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreateDateTime") + .HasColumnType("datetime2"); + + b.Property("DeviceType") + .HasColumnType("nvarchar(max)"); + + b.Property("Manufacturer") + .HasColumnType("nvarchar(max)"); + + b.Property("Model") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("PushToken") + .HasColumnType("nvarchar(max)"); + + b.Property("PushType") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Version") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserDevice"); + + b.HasAnnotation("Relational:JsonPropertyName", "devices"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserExternalAuthProvider", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreateDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "create_datetime"); + + b.Property("Scheme") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "scheme"); + + b.Property("Subject") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "sub"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserExternalAuthProvider"); + + b.HasAnnotation("Relational:JsonPropertyName", "external_auth_providers"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserSession", b => + { + b.Property("SessionId") + .HasColumnType("nvarchar(450)") + .HasAnnotation("Relational:JsonPropertyName", "session_id"); + + b.Property("AuthenticationDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "auth_datetime"); + + b.Property("ExpirationDateTime") + .HasColumnType("datetime2") + .HasAnnotation("Relational:JsonPropertyName", "exp_datetime"); + + b.Property("IsClientsNotified") + .HasColumnType("bit") + .HasAnnotation("Relational:JsonPropertyName", "is_clients_notified"); + + b.Property("Realm") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasAnnotation("Relational:JsonPropertyName", "realm"); + + b.Property("SerializedClientIds") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("int") + .HasAnnotation("Relational:JsonPropertyName", "state"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("SessionId"); + + b.HasIndex("UserId"); + + b.ToTable("UserSession"); + + b.HasAnnotation("Relational:JsonPropertyName", "sessions"); + }); + + modelBuilder.Entity("TranslationUMAResource", b => + { + b.Property("TranslationsId") + .HasColumnType("int"); + + b.Property("UMAResourceId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("TranslationsId", "UMAResourceId"); + + b.HasIndex("UMAResourceId"); + + b.ToTable("TranslationUMAResource"); + }); + + modelBuilder.Entity("ApiResourceRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ApiResource", null) + .WithMany() + .HasForeignKey("ApiResourcesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ApiResourceScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ApiResource", null) + .WithMany() + .HasForeignKey("ApiResourcesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("ScopesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("AuthenticationContextClassReferenceRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", null) + .WithMany() + .HasForeignKey("AuthenticationContextClassReferencesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("AuthenticationSchemeProviderRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", null) + .WithMany() + .HasForeignKey("AuthenticationSchemeProvidersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("CertificateAuthorityRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.CertificateAuthority", null) + .WithMany() + .HasForeignKey("CertificateAuthoritiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ClientRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany() + .HasForeignKey("ClientsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ClientScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany() + .HasForeignKey("ClientsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("ScopesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordTranslation", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", null) + .WithMany() + .HasForeignKey("ConfigurationDefinitionRecordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Translation", null) + .WithMany() + .HasForeignKey("TranslationsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ConfigurationDefinitionRecordValueTranslation", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecordValue", null) + .WithMany() + .HasForeignKey("ConfigurationDefinitionRecordValueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Translation", null) + .WithMany() + .HasForeignKey("TranslationsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("GroupScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", null) + .WithMany() + .HasForeignKey("GroupsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("RolesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("IdentityProvisioningRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioning", null) + .WithMany() + .HasForeignKey("IdentityProvisioningLstId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("RealmScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany() + .HasForeignKey("ScopesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("RealmSerializedFileKey", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", null) + .WithMany() + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.SerializedFileKey", null) + .WithMany() + .HasForeignKey("SerializedFileKeysId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", "RegistrationWorkflow") + .WithMany("Acrs") + .HasForeignKey("RegistrationWorkflowId"); + + b.Navigation("RegistrationWorkflow"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderDefinition", "AuthSchemeProviderDefinition") + .WithMany("AuthSchemeProviders") + .HasForeignKey("AuthSchemeProviderDefinitionName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AuthSchemeProviderDefinition"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderMapper", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", "IdProvider") + .WithMany("Mappers") + .HasForeignKey("IdProviderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IdProvider"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedResource", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthorizedScope", null) + .WithMany("AuthorizedResources") + .HasForeignKey("AuthorizedScopeId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedScope", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Consent", "Consent") + .WithMany("Scopes") + .HasForeignKey("ConsentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Consent"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorizeHistory", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.BCAuthorize", null) + .WithMany("Histories") + .HasForeignKey("BCAuthorizeId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Client", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", null) + .WithMany("Clients") + .HasForeignKey("AuthenticationContextClassReferenceId"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientCertificate", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.CertificateAuthority", "CertificateAuthority") + .WithMany("ClientCertificates") + .HasForeignKey("CertificateAuthorityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CertificateAuthority"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ClientJsonWebKey", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany("SerializedJsonWebKeys") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinition", null) + .WithMany("Records") + .HasForeignKey("ConfigurationDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecordValue", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", null) + .WithMany("Values") + .HasForeignKey("ConfigurationDefinitionRecordId"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Consent", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", null) + .WithMany("Consents") + .HasForeignKey("ScopeId"); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Consents") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.DeviceAuthCode", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", "Client") + .WithMany("DeviceAuthCodes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany() + .HasForeignKey("UserId"); + + b.Navigation("Client"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Group", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", "ParentGroup") + .WithMany("Children") + .HasForeignKey("ParentGroupId"); + + b.Navigation("ParentGroup"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupRealm", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", "Group") + .WithMany("Realms") + .HasForeignKey("GroupsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("Groups") + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("Realm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.GroupUser", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Group", "Group") + .WithMany("Users") + .HasForeignKey("GroupsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Groups") + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioning", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", "Definition") + .WithMany("Instances") + .HasForeignKey("DefinitionName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Definition"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningHistory", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioning", "IdentityProvisioning") + .WithMany("Histories") + .HasForeignKey("IdentityProvisioningId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IdentityProvisioning"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningMappingRule", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", "IdentityProvisioningDefinition") + .WithMany("MappingRules") + .HasForeignKey("IdentityProvisioningDefinitionName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IdentityProvisioningDefinition"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("PresentationDefinitions") + .HasForeignKey("RealmName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Realm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionFormat", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", null) + .WithMany("Format") + .HasForeignKey("PresentationDefinitionInputDescriptorId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.PresentationDefinition", null) + .WithMany("InputDescriptors") + .HasForeignKey("PresentationDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptorConstraint", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", null) + .WithMany("Constraints") + .HasForeignKey("PresentationDefinitionInputDescriptorId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RealmUser", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("Users") + .HasForeignKey("RealmsName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Realms") + .HasForeignKey("UsersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Realm"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Realm", "Realm") + .WithMany("RegistrationWorkflows") + .HasForeignKey("RealmName") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Realm"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ScopeClaimMapper", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Scope", "Scope") + .WithMany("ClaimMappers") + .HasForeignKey("ScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Scope"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Translation", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Client", null) + .WithMany("Translations") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPendingRequest", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResource", "Resource") + .WithMany() + .HasForeignKey("ResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Resource"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicketRecord", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAPermissionTicket", null) + .WithMany("Records") + .HasForeignKey("UMAPermissionTicketId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermission", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResource", null) + .WithMany("Permissions") + .HasForeignKey("UMAResourceId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermissionClaim", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResourcePermission", null) + .WithMany("Claims") + .HasForeignKey("UMAResourcePermissionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.User", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.IdentityProvisioning", "IdentityProvisioning") + .WithMany("Users") + .HasForeignKey("IdentityProvisioningId"); + + b.Navigation("IdentityProvisioning"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserClaim", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("OAuthUserClaims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserCredential", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Credentials") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserDevice", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Devices") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserExternalAuthProvider", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("ExternalAuthProviders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UserSession", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.User", "User") + .WithMany("Sessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("TranslationUMAResource", b => + { + b.HasOne("SimpleIdServer.IdServer.Domains.Translation", null) + .WithMany() + .HasForeignKey("TranslationsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SimpleIdServer.IdServer.Domains.UMAResource", null) + .WithMany() + .HasForeignKey("UMAResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationContextClassReference", b => + { + b.Navigation("Clients"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProvider", b => + { + b.Navigation("Mappers"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthenticationSchemeProviderDefinition", b => + { + b.Navigation("AuthSchemeProviders"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.AuthorizedScope", b => + { + b.Navigation("AuthorizedResources"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.BCAuthorize", b => + { + b.Navigation("Histories"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.CertificateAuthority", b => + { + b.Navigation("ClientCertificates"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Client", b => + { + b.Navigation("DeviceAuthCodes"); + + b.Navigation("SerializedJsonWebKeys"); + + b.Navigation("Translations"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinition", b => + { + b.Navigation("Records"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.ConfigurationDefinitionRecord", b => + { + b.Navigation("Values"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Consent", b => + { + b.Navigation("Scopes"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Group", b => + { + b.Navigation("Children"); + + b.Navigation("Realms"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioning", b => + { + b.Navigation("Histories"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.IdentityProvisioningDefinition", b => + { + b.Navigation("Instances"); + + b.Navigation("MappingRules"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => + { + b.Navigation("InputDescriptors"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinitionInputDescriptor", b => + { + b.Navigation("Constraints"); + + b.Navigation("Format"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Realm", b => + { + b.Navigation("Groups"); + + b.Navigation("PresentationDefinitions"); + + b.Navigation("RegistrationWorkflows"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.RegistrationWorkflow", b => + { + b.Navigation("Acrs"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.Scope", b => + { + b.Navigation("ClaimMappers"); + + b.Navigation("Consents"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAPermissionTicket", b => + { + b.Navigation("Records"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResource", b => + { + b.Navigation("Permissions"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.UMAResourcePermission", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.User", b => + { + b.Navigation("Consents"); + + b.Navigation("Credentials"); + + b.Navigation("Devices"); + + b.Navigation("ExternalAuthProviders"); + + b.Navigation("Groups"); + + b.Navigation("OAuthUserClaims"); + + b.Navigation("Realms"); + + b.Navigation("Sessions"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.cs b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.cs new file mode 100644 index 000000000..d7af29907 --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/20240603193149_AddQueueNameColumn.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace SimpleIdServer.IdServer.SqlServerMigrations.Migrations +{ + /// + public partial class AddQueueNameColumn : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "QueueName", + table: "MessageBusErrorMessages", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "QueueName", + table: "MessageBusErrorMessages"); + } + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/StoreDbContextModelSnapshot.cs b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/StoreDbContextModelSnapshot.cs index a4d5b442a..1a0a97af5 100644 --- a/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/StoreDbContextModelSnapshot.cs +++ b/src/IdServer/SimpleIdServer.IdServer.SqlServerMigrations/Migrations/StoreDbContextModelSnapshot.cs @@ -4,7 +4,6 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using SimpleIdServer.IdServer.Store; using SimpleIdServer.IdServer.Store.EF; #nullable disable @@ -1573,6 +1572,42 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Languages"); }); + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.MessageBusErrorMessage", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Exceptions") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ExternalId") + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("QueueName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceivedDateTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("MessageBusErrorMessages"); + }); + modelBuilder.Entity("SimpleIdServer.IdServer.Domains.PresentationDefinition", b => { b.Property("Id") diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.EF/Configurations/MessageBusErrorMessageConfiguration.cs b/src/IdServer/SimpleIdServer.IdServer.Store.EF/Configurations/MessageBusErrorMessageConfiguration.cs new file mode 100644 index 000000000..5fa1c37eb --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.Store.EF/Configurations/MessageBusErrorMessageConfiguration.cs @@ -0,0 +1,18 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using SimpleIdServer.IdServer.Domains; + +namespace SimpleIdServer.IdServer.Store.EF.Configurations; + +public class MessageBusErrorMessageConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(m => m.Id); + builder.Property(a => a.Exceptions).HasConversion( + v => string.Join(',', v), + v => v.Split(',', StringSplitOptions.None).ToList()); + } +} \ No newline at end of file diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.EF/MessageBusErrorStore.cs b/src/IdServer/SimpleIdServer.IdServer.Store.EF/MessageBusErrorStore.cs new file mode 100644 index 000000000..b39b2768e --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.Store.EF/MessageBusErrorStore.cs @@ -0,0 +1,35 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. + +using Microsoft.EntityFrameworkCore; +using SimpleIdServer.IdServer.Domains; +using SimpleIdServer.IdServer.Stores; + +namespace SimpleIdServer.IdServer.Store.EF +{ + public class MessageBusErrorStore : IMessageBusErrorStore + { + private readonly StoreDbContext _dbContext; + + public MessageBusErrorStore(StoreDbContext dbContext) + { + _dbContext = dbContext; + } + + public void Add(MessageBusErrorMessage message) + { + _dbContext.MessageBusErrorMessages.Add(message); + } + + public void Delete(MessageBusErrorMessage message) + { + _dbContext.MessageBusErrorMessages.Remove(message); + } + + public Task Get(string id, CancellationToken cancellationToken) + => _dbContext.MessageBusErrorMessages.SingleOrDefaultAsync(m => m.Id == id, cancellationToken); + + public Task> GetAllByExternalId(List externalIds, CancellationToken cancellationToken) => + _dbContext.MessageBusErrorMessages.Where(m => externalIds.Contains(m.ExternalId)).ToListAsync(cancellationToken); + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.EF/ServiceCollectionExtensions.cs b/src/IdServer/SimpleIdServer.IdServer.Store.EF/ServiceCollectionExtensions.cs index 4b12aaace..11cf3f758 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Store.EF/ServiceCollectionExtensions.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Store.EF/ServiceCollectionExtensions.cs @@ -56,6 +56,7 @@ private static void RegisterDepedencies(IServiceCollection services) services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); } } diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.EF/StoreDbContext.cs b/src/IdServer/SimpleIdServer.IdServer.Store.EF/StoreDbContext.cs index cc15daf17..4e7a63358 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Store.EF/StoreDbContext.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Store.EF/StoreDbContext.cs @@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using SimpleIdServer.IdServer.Domains; using SimpleIdServer.IdServer.Store.Configurations; +using SimpleIdServer.IdServer.Store.EF.Configurations; namespace SimpleIdServer.IdServer.Store.EF { @@ -48,6 +49,7 @@ public StoreDbContext(DbContextOptions options) : base(options) public DbSet GroupUser { get; set; } public DbSet GotifySessions { get; set; } public DbSet PresentationDefinitions { get; set; } + public DbSet MessageBusErrorMessages { get; set; } protected override void OnModelCreating(ModelBuilder builder) { @@ -108,6 +110,7 @@ protected override void OnModelCreating(ModelBuilder builder) builder.ApplyConfiguration(new PresentationDefinitionFormatConfiguration()); builder.ApplyConfiguration(new PresentationDefinitionInputDescriptorConfiguration()); builder.ApplyConfiguration(new PresentationDefinitionInputDescriptorConstraintConfiguration()); + builder.ApplyConfiguration(new MessageBusErrorMessageConfiguration()); } } } diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/MessageBusErrorStore.cs b/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/MessageBusErrorStore.cs new file mode 100644 index 000000000..3198f4faa --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/MessageBusErrorStore.cs @@ -0,0 +1,44 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. +using SimpleIdServer.IdServer.Domains; +using SimpleIdServer.IdServer.Store.SqlSugar.Models; +using SimpleIdServer.IdServer.Stores; + +namespace SimpleIdServer.IdServer.Store.SqlSugar; + +public class MessageBusErrorStore : IMessageBusErrorStore +{ + private readonly DbContext _dbContext; + + public MessageBusErrorStore(DbContext dbContext) + { + _dbContext = dbContext; + } + + public void Add(MessageBusErrorMessage message) + { + _dbContext.Client.Insertable(SugarMessageBusErrorMessage.Transform(message)) + .ExecuteCommand(); + } + + public void Delete(MessageBusErrorMessage message) + { + _dbContext.Client.Deleteable(SugarMessageBusErrorMessage.Transform(message)) + .ExecuteCommand(); + } + + public async Task Get(string id, CancellationToken cancellationToken) + { + var result = await _dbContext.Client.Queryable() + .SingleAsync(r => r.Id == id); + return result?.ToDomain(); + } + + public async Task> GetAllByExternalId(List externalIds, CancellationToken cancellationToken) + { + var result = await _dbContext.Client.Queryable() + .Where(r => externalIds.Contains(r.ExternalId)) + .ToListAsync(); + return result.Select(r => r.ToDomain()).ToList(); + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/Models/SugarMessageBusErrorMessage.cs b/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/Models/SugarMessageBusErrorMessage.cs new file mode 100644 index 000000000..852fcf88a --- /dev/null +++ b/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/Models/SugarMessageBusErrorMessage.cs @@ -0,0 +1,52 @@ +// Copyright (c) SimpleIdServer. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. +using SimpleIdServer.IdServer.Domains; +using SimpleIdServer.IdServer.SubjectTypeBuilders; +using SqlSugar; + +namespace SimpleIdServer.IdServer.Store.SqlSugar.Models; + +[SugarTable("MessageBusErrorMessages")] +public class SugarMessageBusErrorMessage +{ + [SugarColumn(IsPrimaryKey = true)] + public string Id { get; set; } = null!; + public string? ExternalId { get; set; } = null; + public string Name { get; set; } = null!; + public string FullName { get; set; } = null!; + public string Content { get; set; } = null!; + public string Exceptions { get; set; } = null!; + public DateTime ReceivedDateTime { get; set; } + public string QueueName { get; set; } = null!; + + public static SugarMessageBusErrorMessage Transform(MessageBusErrorMessage messageBusError) + { + return new SugarMessageBusErrorMessage + { + ReceivedDateTime = messageBusError.ReceivedDateTime, + QueueName = messageBusError.QueueName, + Name = messageBusError.Name, + Id = messageBusError.Id, + FullName = messageBusError.FullName, + Exceptions = messageBusError.Exceptions == null ? string.Empty : string.Join(",", messageBusError.Exceptions), + Content = messageBusError.Content, + ExternalId = messageBusError.ExternalId + }; + } + + + public MessageBusErrorMessage ToDomain() + { + return new MessageBusErrorMessage + { + ExternalId = ExternalId, + Content = Content, + Exceptions = string.IsNullOrWhiteSpace(Exceptions) ? new List() : Exceptions.Split(',').ToList(), + FullName = FullName, + Id = Id, + Name = Name, + QueueName = QueueName, + ReceivedDateTime = ReceivedDateTime + }; + } +} diff --git a/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/ServiceCollectionExtensions.cs b/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/ServiceCollectionExtensions.cs index 1a71694a2..87004092d 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/ServiceCollectionExtensions.cs +++ b/src/IdServer/SimpleIdServer.IdServer.Store.SqlSugar/ServiceCollectionExtensions.cs @@ -41,6 +41,7 @@ public static IServiceCollection AddSqlSugarStore(this IServiceCollection servic services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); return services; } } \ No newline at end of file diff --git a/src/IdServer/SimpleIdServer.IdServer.Website/Pages/IdentityProvisioningHistories.razor b/src/IdServer/SimpleIdServer.IdServer.Website/Pages/IdentityProvisioningHistories.razor index 123e541cd..bf15df125 100644 --- a/src/IdServer/SimpleIdServer.IdServer.Website/Pages/IdentityProvisioningHistories.razor +++ b/src/IdServer/SimpleIdServer.IdServer.Website/Pages/IdentityProvisioningHistories.razor @@ -48,6 +48,18 @@ + + +