From 8f345e068937d6059766497b71393cce16856e2d Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Tue, 6 Jan 2026 13:52:34 +1000 Subject: [PATCH] First pass at reverting semaphore approach --- .../DuplicateDefaultCollectionException.cs | 5 - .../Collections/CollectionUtils.cs | 16 +- ...rganizationDataOwnershipPolicyValidator.cs | 11 +- .../Entities/DefaultCollectionSemaphore.cs | 7 - .../Repositories/ICollectionRepository.cs | 20 +- .../Repositories/CollectionRepository.cs | 99 +- ...lectionSemaphoreEntityTypeConfiguration.cs | 23 - .../Models/DefaultCollectionSemaphore.cs | 19 - .../Repositories/CollectionRepository.cs | 47 +- .../Repositories/DatabaseContext.cs | 1 - .../Collection_CreateDefaultCollections.sql | 42 +- .../Tables/DefaultCollectionSemaphore.sql | 11 - ...ionSemaphore_ReadByOrganizationUserIds.sql | 13 - ...zationDataOwnershipPolicyValidatorTests.cs | 57 +- .../CreateDefaultCollectionsBulkTests.cs | 57 +- .../CreateDefaultCollectionsTests.cs | 22 +- .../DefaultCollectionSemaphoreTests.cs | 72 - ...25-12-30_00_DefaultCollectionSemaphore.sql | 31 - ...01_Collection_CreateDefaultCollections.sql | 42 +- ..._02_PopulateDefaultCollectionSemaphore.sql | 26 - ...256_DefaultCollectionSemaphore.Designer.cs | 3467 ---------------- ...251231233256_DefaultCollectionSemaphore.cs | 39 - .../DatabaseContextModelSnapshot.cs | 24 - ...251_DefaultCollectionSemaphore.Designer.cs | 3473 ----------------- ...251231233251_DefaultCollectionSemaphore.cs | 38 - .../DatabaseContextModelSnapshot.cs | 24 - ...301_DefaultCollectionSemaphore.Designer.cs | 3456 ---------------- ...251231233301_DefaultCollectionSemaphore.cs | 38 - .../DatabaseContextModelSnapshot.cs | 24 - 29 files changed, 113 insertions(+), 11091 deletions(-) delete mode 100644 src/Core/AdminConsole/Collections/DuplicateDefaultCollectionException.cs delete mode 100644 src/Core/Entities/DefaultCollectionSemaphore.cs delete mode 100644 src/Infrastructure.EntityFramework/AdminConsole/Configurations/DefaultCollectionSemaphoreEntityTypeConfiguration.cs delete mode 100644 src/Infrastructure.EntityFramework/AdminConsole/Models/DefaultCollectionSemaphore.cs delete mode 100644 src/Sql/dbo/AdminConsole/Tables/DefaultCollectionSemaphore.sql delete mode 100644 src/Sql/dbo/Stored Procedures/DefaultCollectionSemaphore_ReadByOrganizationUserIds.sql delete mode 100644 test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/DefaultCollectionSemaphoreTests.cs delete mode 100644 util/Migrator/DbScripts/2025-12-30_00_DefaultCollectionSemaphore.sql delete mode 100644 util/Migrator/DbScripts/2025-12-30_02_PopulateDefaultCollectionSemaphore.sql delete mode 100644 util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.Designer.cs delete mode 100644 util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.cs delete mode 100644 util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.Designer.cs delete mode 100644 util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.cs delete mode 100644 util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.Designer.cs delete mode 100644 util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.cs diff --git a/src/Core/AdminConsole/Collections/DuplicateDefaultCollectionException.cs b/src/Core/AdminConsole/Collections/DuplicateDefaultCollectionException.cs deleted file mode 100644 index abe1cdedb0..0000000000 --- a/src/Core/AdminConsole/Collections/DuplicateDefaultCollectionException.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Bit.Core.AdminConsole.Collections; - -public class DuplicateDefaultCollectionException() - : Exception("A My Items collection already exists for one or more of the specified organization members."); - diff --git a/src/Core/AdminConsole/OrganizationFeatures/Collections/CollectionUtils.cs b/src/Core/AdminConsole/OrganizationFeatures/Collections/CollectionUtils.cs index fddfd37d8e..6b2da70d3e 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Collections/CollectionUtils.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Collections/CollectionUtils.cs @@ -7,21 +7,19 @@ namespace Bit.Core.AdminConsole.OrganizationFeatures.Collections; public static class CollectionUtils { /// - /// Arranges semaphore, Collection and CollectionUser objects to create default user collections. + /// Arranges Collection and CollectionUser objects to create default user collections. /// /// The organization ID. /// The IDs for organization users who need default collections. /// The encrypted string to use as the default collection name. - /// A tuple containing the semaphores, collections, and collection users. - public static (IEnumerable semaphores, - IEnumerable collections, + /// A tuple containing the collections and collection users. + public static (IEnumerable collections, IEnumerable collectionUsers) BuildDefaultUserCollections(Guid organizationId, IEnumerable organizationUserIds, string defaultCollectionName) { var now = DateTime.UtcNow; - var semaphores = new List(); var collectionUsers = new List(); var collections = new List(); @@ -29,12 +27,6 @@ public static class CollectionUtils { var collectionId = CoreHelpers.GenerateComb(); - semaphores.Add(new DefaultCollectionSemaphore - { - OrganizationUserId = orgUserId, - CreationDate = now - }); - collections.Add(new Collection { Id = collectionId, @@ -57,6 +49,6 @@ public static class CollectionUtils }); } - return (semaphores, collections, collectionUsers); + return (collections, collectionUsers); } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidator.cs b/src/Core/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidator.cs index 22d9fd20dd..6f763b18be 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidator.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidator.cs @@ -72,18 +72,9 @@ public class OrganizationDataOwnershipPolicyValidator( return; } - // Filter out users who already have default collections - var existingSemaphores = await collectionRepository.GetDefaultCollectionSemaphoresAsync(userOrgIds); - var usersNeedingDefaultCollections = userOrgIds.Except(existingSemaphores).ToList(); - - if (!usersNeedingDefaultCollections.Any()) - { - return; - } - await collectionRepository.CreateDefaultCollectionsBulkAsync( policyUpdate.OrganizationId, - usersNeedingDefaultCollections, + userOrgIds, defaultCollectionName); } } diff --git a/src/Core/Entities/DefaultCollectionSemaphore.cs b/src/Core/Entities/DefaultCollectionSemaphore.cs deleted file mode 100644 index ea2568e671..0000000000 --- a/src/Core/Entities/DefaultCollectionSemaphore.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Bit.Core.Entities; - -public class DefaultCollectionSemaphore -{ - public Guid OrganizationUserId { get; set; } - public DateTime CreationDate { get; set; } = DateTime.UtcNow; -} diff --git a/src/Core/Repositories/ICollectionRepository.cs b/src/Core/Repositories/ICollectionRepository.cs index 91232db058..3f3b71d2d5 100644 --- a/src/Core/Repositories/ICollectionRepository.cs +++ b/src/Core/Repositories/ICollectionRepository.cs @@ -65,7 +65,7 @@ public interface ICollectionRepository : IRepository /// /// Creates default user collections for the specified organization users. - /// Throws an exception if any user already has a default collection for the organization. + /// Filters internally to only create collections for users who don't already have one. /// /// The Organization ID. /// The Organization User IDs to create default collections for. @@ -75,27 +75,11 @@ public interface ICollectionRepository : IRepository /// /// Creates default user collections for the specified organization users using bulk insert operations. /// Use this if you need to create collections for > ~1k users. - /// Throws an exception if any user already has a default collection for the organization. + /// Filters internally to only create collections for users who don't already have one. /// /// The Organization ID. /// The Organization User IDs to create default collections for. /// The encrypted string to use as the default collection name. - /// - /// If any of the OrganizationUsers may already have default collections, the caller should first filter out these - /// users using GetDefaultCollectionSemaphoresAsync before calling this method. - /// Task CreateDefaultCollectionsBulkAsync(Guid organizationId, IEnumerable organizationUserIds, string defaultCollectionName); - /// - /// Gets default collection semaphores for the given organizationUserIds. - /// If an organizationUserId is missing from the result set, they do not have a semaphore set. - /// - /// The organization User IDs to check semaphores for. - /// Collection of organization user IDs that have default collection semaphores. - /// - /// The semaphore table is used to ensure that an organizationUser can only have 1 default collection. - /// (That is, a user may only have 1 default collection per organization.) - /// If a semaphore is returned, that user already has a default collection for that organization. - /// - Task> GetDefaultCollectionSemaphoresAsync(IEnumerable organizationUserIds); } diff --git a/src/Infrastructure.Dapper/Repositories/CollectionRepository.cs b/src/Infrastructure.Dapper/Repositories/CollectionRepository.cs index 1416945936..a78a699b10 100644 --- a/src/Infrastructure.Dapper/Repositories/CollectionRepository.cs +++ b/src/Infrastructure.Dapper/Repositories/CollectionRepository.cs @@ -1,7 +1,6 @@ using System.Data; using System.Diagnostics.CodeAnalysis; using System.Text.Json; -using Bit.Core.AdminConsole.Collections; using Bit.Core.AdminConsole.OrganizationFeatures.Collections; using Bit.Core.Entities; using Bit.Core.Models.Data; @@ -392,11 +391,6 @@ public class CollectionRepository : Repository, ICollectionRep await transaction.CommitAsync(); } - catch (Exception ex) when (DatabaseExceptionHelpers.IsDuplicateKeyException(ex)) - { - await transaction.RollbackAsync(); - throw new DuplicateDefaultCollectionException(); - } catch { await transaction.RollbackAsync(); @@ -406,97 +400,8 @@ public class CollectionRepository : Repository, ICollectionRep public async Task CreateDefaultCollectionsBulkAsync(Guid organizationId, IEnumerable organizationUserIds, string defaultCollectionName) { - organizationUserIds = organizationUserIds.ToList(); - if (!organizationUserIds.Any()) - { - return; - } - - var (semaphores, collections, collectionUsers) = - CollectionUtils.BuildDefaultUserCollections(organizationId, organizationUserIds, defaultCollectionName); - - await using var connection = new SqlConnection(ConnectionString); - connection.Open(); - await using var transaction = connection.BeginTransaction(); - - try - { - // CRITICAL: Insert semaphore entries BEFORE collections - // Database will throw on duplicate primary key (OrganizationUserId) - await BulkInsertDefaultCollectionSemaphoresAsync(connection, transaction, semaphores); - await BulkResourceCreationService.CreateCollectionsAsync(connection, transaction, collections); - await BulkResourceCreationService.CreateCollectionsUsersAsync(connection, transaction, collectionUsers); - - await transaction.CommitAsync(); - } - catch (Exception ex) when (DatabaseExceptionHelpers.IsDuplicateKeyException(ex)) - { - await transaction.RollbackAsync(); - throw new DuplicateDefaultCollectionException(); - } - catch - { - await transaction.RollbackAsync(); - throw; - } - } - - public async Task> GetDefaultCollectionSemaphoresAsync(IEnumerable organizationUserIds) - { - await using var connection = new SqlConnection(ConnectionString); - - var results = await connection.QueryAsync( - "[dbo].[DefaultCollectionSemaphore_ReadByOrganizationUserIds]", - new { OrganizationUserIds = organizationUserIds.ToGuidIdArrayTVP() }, - commandType: CommandType.StoredProcedure); - - return results.ToHashSet(); - } - - private async Task BulkInsertDefaultCollectionSemaphoresAsync(SqlConnection connection, SqlTransaction transaction, IEnumerable semaphores) - { - semaphores = semaphores.ToList(); - if (!semaphores.Any()) - { - return; - } - - // Sort by composite key to reduce deadlocks - var sortedSemaphores = semaphores - .OrderBy(s => s.OrganizationUserId) - .ToList(); - - using var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.CheckConstraints, transaction); - bulkCopy.DestinationTableName = "[dbo].[DefaultCollectionSemaphore]"; - bulkCopy.BatchSize = 500; - bulkCopy.BulkCopyTimeout = 120; - bulkCopy.EnableStreaming = true; - - var dataTable = new DataTable("DefaultCollectionSemaphoreDataTable"); - - var organizationUserIdColumn = new DataColumn(nameof(DefaultCollectionSemaphore.OrganizationUserId), typeof(Guid)); - dataTable.Columns.Add(organizationUserIdColumn); - var creationDateColumn = new DataColumn(nameof(DefaultCollectionSemaphore.CreationDate), typeof(DateTime)); - dataTable.Columns.Add(creationDateColumn); - - foreach (DataColumn col in dataTable.Columns) - { - bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); - } - - var keys = new DataColumn[1]; - keys[0] = organizationUserIdColumn; - dataTable.PrimaryKey = keys; - - foreach (var semaphore in sortedSemaphores) - { - var row = dataTable.NewRow(); - row[organizationUserIdColumn] = semaphore.OrganizationUserId; - row[creationDateColumn] = semaphore.CreationDate; - dataTable.Rows.Add(row); - } - - await bulkCopy.WriteToServerAsync(dataTable); + // Use the stored procedure approach which handles filtering internally + await CreateDefaultCollectionsAsync(organizationId, organizationUserIds, defaultCollectionName); } public class CollectionWithGroupsAndUsers : Collection diff --git a/src/Infrastructure.EntityFramework/AdminConsole/Configurations/DefaultCollectionSemaphoreEntityTypeConfiguration.cs b/src/Infrastructure.EntityFramework/AdminConsole/Configurations/DefaultCollectionSemaphoreEntityTypeConfiguration.cs deleted file mode 100644 index 3892941111..0000000000 --- a/src/Infrastructure.EntityFramework/AdminConsole/Configurations/DefaultCollectionSemaphoreEntityTypeConfiguration.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Bit.Infrastructure.EntityFramework.AdminConsole.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace Bit.Infrastructure.EntityFramework.AdminConsole.Configurations; - -public class DefaultCollectionSemaphoreEntityTypeConfiguration : IEntityTypeConfiguration -{ - public void Configure(EntityTypeBuilder builder) - { - builder - .HasKey(dcs => new { dcs.OrganizationUserId }); - - // OrganizationUser FK cascades deletions to ensure automatic cleanup - builder - .HasOne(dcs => dcs.OrganizationUser) - .WithMany() - .HasForeignKey(dcs => dcs.OrganizationUserId) - .OnDelete(DeleteBehavior.Cascade); - - builder.ToTable(nameof(DefaultCollectionSemaphore)); - } -} diff --git a/src/Infrastructure.EntityFramework/AdminConsole/Models/DefaultCollectionSemaphore.cs b/src/Infrastructure.EntityFramework/AdminConsole/Models/DefaultCollectionSemaphore.cs deleted file mode 100644 index 6d51bb9f21..0000000000 --- a/src/Infrastructure.EntityFramework/AdminConsole/Models/DefaultCollectionSemaphore.cs +++ /dev/null @@ -1,19 +0,0 @@ -using AutoMapper; -using Bit.Infrastructure.EntityFramework.Models; - -namespace Bit.Infrastructure.EntityFramework.AdminConsole.Models; - -public class DefaultCollectionSemaphore : Core.Entities.DefaultCollectionSemaphore -{ - public virtual OrganizationUser? OrganizationUser { get; set; } -} - -public class DefaultCollectionSemaphoreMapperProfile : Profile -{ - public DefaultCollectionSemaphoreMapperProfile() - { - CreateMap() - .ForMember(dcs => dcs.OrganizationUser, opt => opt.Ignore()) - .ReverseMap(); - } -} diff --git a/src/Infrastructure.EntityFramework/Repositories/CollectionRepository.cs b/src/Infrastructure.EntityFramework/Repositories/CollectionRepository.cs index 65bdb68312..6211f71873 100644 --- a/src/Infrastructure.EntityFramework/Repositories/CollectionRepository.cs +++ b/src/Infrastructure.EntityFramework/Repositories/CollectionRepository.cs @@ -1,5 +1,4 @@ using AutoMapper; -using Bit.Core.AdminConsole.Collections; using Bit.Core.AdminConsole.OrganizationFeatures.Collections; using Bit.Core.Enums; using Bit.Core.Models.Data; @@ -804,28 +803,38 @@ public class CollectionRepository : Repository organizationUserIdsHashSet.Contains(cu.OrganizationUserId)) + .Where(cu => cu.Collection.Type == CollectionType.DefaultUserCollection) + .Where(cu => cu.Collection.OrganizationId == organizationId) + .Select(cu => cu.OrganizationUserId) + .ToListAsync(); + + // Filter to only users who need collections + var filteredOrgUserIds = organizationUserIds.Except(existingOrgUserIds).ToList(); + + if (!filteredOrgUserIds.Any()) + { + return; + } + + var (collections, collectionUsers) = + CollectionUtils.BuildDefaultUserCollections(organizationId, filteredOrgUserIds, defaultCollectionName); + await using var transaction = await dbContext.Database.BeginTransactionAsync(); try { - // CRITICAL: Insert semaphore entries BEFORE collections - // Database will throw on duplicate primary key (OrganizationUserId) - await dbContext.BulkCopyAsync(Mapper.Map>(semaphores)); await dbContext.BulkCopyAsync(Mapper.Map>(collections)); await dbContext.BulkCopyAsync(Mapper.Map>(collectionUsers)); await transaction.CommitAsync(); } - catch (Exception ex) when (DatabaseExceptionHelpers.IsDuplicateKeyException(ex)) - { - await transaction.RollbackAsync(); - throw new DuplicateDefaultCollectionException(); - } catch { await transaction.RollbackAsync(); @@ -839,18 +848,4 @@ public class CollectionRepository : Repository> GetDefaultCollectionSemaphoresAsync(IEnumerable organizationUserIds) - { - var organizationUserIdsHashSet = organizationUserIds.ToHashSet(); - - using var scope = ServiceScopeFactory.CreateScope(); - var dbContext = GetDatabaseContext(scope); - - var result = await dbContext.DefaultCollectionSemaphores - .Where(s => organizationUserIdsHashSet.Contains(s.OrganizationUserId)) - .Select(s => s.OrganizationUserId) - .ToListAsync(); - - return result.ToHashSet(); - } } diff --git a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs index f48bbc6c24..3ddcad55c3 100644 --- a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs +++ b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs @@ -43,7 +43,6 @@ public class DatabaseContext : DbContext public DbSet CollectionCiphers { get; set; } public DbSet CollectionGroups { get; set; } public DbSet CollectionUsers { get; set; } - public DbSet DefaultCollectionSemaphores { get; set; } public DbSet Devices { get; set; } public DbSet EmergencyAccesses { get; set; } public DbSet Events { get; set; } diff --git a/src/Sql/dbo/AdminConsole/Stored Procedures/Collection_CreateDefaultCollections.sql b/src/Sql/dbo/AdminConsole/Stored Procedures/Collection_CreateDefaultCollections.sql index f751b8776e..b110a7566d 100644 --- a/src/Sql/dbo/AdminConsole/Stored Procedures/Collection_CreateDefaultCollections.sql +++ b/src/Sql/dbo/AdminConsole/Stored Procedures/Collection_CreateDefaultCollections.sql @@ -1,6 +1,6 @@ -- Creates default user collections for organization users --- Uses semaphore table to prevent duplicate default collections at database level --- NOTE: this MUST be executed in a single transaction to obtain semaphore protection +-- Filters out existing default collections at database level +-- NOTE: this MUST be executed in a single transaction to ensure consistency CREATE PROCEDURE [dbo].[Collection_CreateDefaultCollections] @OrganizationId UNIQUEIDENTIFIER, @DefaultCollectionName VARCHAR(MAX), @@ -11,20 +11,20 @@ BEGIN DECLARE @Now DATETIME2(7) = GETUTCDATE() - -- Insert semaphore entries first to obtain the "lock" - -- If this fails due to duplicate key, the entire transaction will be rolled back - INSERT INTO [dbo].[DefaultCollectionSemaphore] - ( - [OrganizationUserId], - [CreationDate] - ) - SELECT - ids.[Id1], -- OrganizationUserId - @Now - FROM - @OrganizationUserCollectionIds ids; + -- Filter to only users who don't have default collections + SELECT ids.Id1, ids.Id2 + INTO #FilteredIds + FROM @OrganizationUserCollectionIds ids + WHERE NOT EXISTS ( + SELECT 1 + FROM [dbo].[CollectionUser] cu + INNER JOIN [dbo].[Collection] c ON c.Id = cu.CollectionId + WHERE c.OrganizationId = @OrganizationId + AND c.[Type] = 1 -- CollectionType.DefaultUserCollection + AND cu.OrganizationUserId = ids.Id1 + ); - -- Insert collections for users who obtained semaphore entries + -- Insert collections only for users who don't have default collections yet INSERT INTO [dbo].[Collection] ( [Id], @@ -37,7 +37,7 @@ BEGIN [DefaultUserCollectionEmail] ) SELECT - ids.[Id2], -- CollectionId + ids.Id2, -- CollectionId @OrganizationId, @DefaultCollectionName, @Now, @@ -46,7 +46,7 @@ BEGIN NULL, NULL FROM - @OrganizationUserCollectionIds ids; + #FilteredIds ids; -- Insert collection user mappings INSERT INTO [dbo].[CollectionUser] @@ -58,11 +58,13 @@ BEGIN [Manage] ) SELECT - ids.[Id2], -- CollectionId - ids.[Id1], -- OrganizationUserId + ids.Id2, -- CollectionId + ids.Id1, -- OrganizationUserId 0, -- ReadOnly = false 0, -- HidePasswords = false 1 -- Manage = true FROM - @OrganizationUserCollectionIds ids; + #FilteredIds ids; + + DROP TABLE #FilteredIds; END diff --git a/src/Sql/dbo/AdminConsole/Tables/DefaultCollectionSemaphore.sql b/src/Sql/dbo/AdminConsole/Tables/DefaultCollectionSemaphore.sql deleted file mode 100644 index 6161781c8c..0000000000 --- a/src/Sql/dbo/AdminConsole/Tables/DefaultCollectionSemaphore.sql +++ /dev/null @@ -1,11 +0,0 @@ --- Semaphore table to prevent duplicate default collections per organization user --- Cascade behavior: Organization -> OrganizationUser (CASCADE) -> DefaultCollectionSemaphore (CASCADE) --- OrganizationId FK has NO ACTION to avoid competing cascade paths -CREATE TABLE [dbo].[DefaultCollectionSemaphore] -( - [OrganizationUserId] UNIQUEIDENTIFIER NOT NULL, - [CreationDate] DATETIME2 (7) NOT NULL, - CONSTRAINT [PK_DefaultCollectionSemaphore] PRIMARY KEY CLUSTERED ([OrganizationUserId] ASC), - CONSTRAINT [FK_DefaultCollectionSemaphore_OrganizationUser] FOREIGN KEY ([OrganizationUserId]) - REFERENCES [dbo].[OrganizationUser] ([Id]) ON DELETE CASCADE -); diff --git a/src/Sql/dbo/Stored Procedures/DefaultCollectionSemaphore_ReadByOrganizationUserIds.sql b/src/Sql/dbo/Stored Procedures/DefaultCollectionSemaphore_ReadByOrganizationUserIds.sql deleted file mode 100644 index b1bfae98b6..0000000000 --- a/src/Sql/dbo/Stored Procedures/DefaultCollectionSemaphore_ReadByOrganizationUserIds.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE PROCEDURE [dbo].[DefaultCollectionSemaphore_ReadByOrganizationUserIds] - @OrganizationUserIds AS [dbo].[GuidIdArray] READONLY -AS -BEGIN - SET NOCOUNT ON - - SELECT - [OrganizationUserId] - FROM - [dbo].[DefaultCollectionSemaphore] DCS - INNER JOIN - @OrganizationUserIds OU ON [OU].[Id] = [DCS].[OrganizationUserId] -END diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidatorTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidatorTests.cs index b61888759a..5d6bac0ead 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidatorTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/Policies/PolicyValidators/OrganizationDataOwnershipPolicyValidatorTests.cs @@ -198,22 +198,13 @@ public class OrganizationDataOwnershipPolicyValidatorTests var policyRepository = ArrangePolicyRepository(orgPolicyDetailsList); var collectionRepository = Substitute.For(); - // Mock GetDefaultCollectionSemaphoresAsync to return empty set (no existing collections) - collectionRepository - .GetDefaultCollectionSemaphoresAsync(Arg.Any>()) - .Returns(new HashSet()); - var sut = ArrangeSut(factory, policyRepository, collectionRepository); var policyRequest = new SavePolicyModel(policyUpdate, new OrganizationModelOwnershipPolicyModel(_defaultUserCollectionName)); // Act await sut.ExecuteSideEffectsAsync(policyRequest, postUpdatedPolicy, previousPolicyState); - // Assert - await collectionRepository - .Received(1) - .GetDefaultCollectionSemaphoresAsync(Arg.Is>(ids => ids.Count() == 3)); - + // Assert - Should call with all user IDs (repository does internal filtering) await collectionRepository .Received(1) .CreateDefaultCollectionsBulkAsync( @@ -224,7 +215,7 @@ public class OrganizationDataOwnershipPolicyValidatorTests [Theory] [BitMemberAutoData(nameof(ShouldUpsertDefaultCollectionsTestCases))] - public async Task ExecuteSideEffectsAsync_FiltersOutUsersWithExistingCollections( + public async Task ExecuteSideEffectsAsync_PassesAllUsers_RepositoryFiltersInternally( Policy postUpdatedPolicy, Policy? previousPolicyState, [PolicyUpdate(PolicyType.OrganizationDataOwnership)] PolicyUpdate policyUpdate, @@ -241,34 +232,24 @@ public class OrganizationDataOwnershipPolicyValidatorTests var policyRepository = ArrangePolicyRepository(orgPolicyDetailsList); var collectionRepository = Substitute.For(); - // Mock GetDefaultCollectionSemaphoresAsync to return one existing user - var existingUserId = orgPolicyDetailsList[0].OrganizationUserId; - collectionRepository - .GetDefaultCollectionSemaphoresAsync(Arg.Any>()) - .Returns([existingUserId]); - var sut = ArrangeSut(factory, policyRepository, collectionRepository); var policyRequest = new SavePolicyModel(policyUpdate, new OrganizationModelOwnershipPolicyModel(_defaultUserCollectionName)); // Act await sut.ExecuteSideEffectsAsync(policyRequest, postUpdatedPolicy, previousPolicyState); - // Assert - Should filter out the existing user - await collectionRepository - .Received(1) - .GetDefaultCollectionSemaphoresAsync(Arg.Is>(ids => ids.Count() == 3)); - + // Assert - Should pass all user IDs (repository does internal filtering) await collectionRepository .Received(1) .CreateDefaultCollectionsBulkAsync( policyUpdate.OrganizationId, - Arg.Is>(ids => ids.Count() == 2 && !ids.Contains(existingUserId)), + Arg.Is>(ids => ids.Count() == 3), _defaultUserCollectionName); } [Theory] [BitMemberAutoData(nameof(ShouldUpsertDefaultCollectionsTestCases))] - public async Task ExecuteSideEffectsAsync_DoesNotCallRepository_WhenAllUsersHaveExistingCollections( + public async Task ExecuteSideEffectsAsync_CallsRepositoryWithAllUsers_EvenIfAllHaveCollections( Policy postUpdatedPolicy, Policy? previousPolicyState, [PolicyUpdate(PolicyType.OrganizationDataOwnership)] PolicyUpdate policyUpdate, @@ -285,26 +266,19 @@ public class OrganizationDataOwnershipPolicyValidatorTests var policyRepository = ArrangePolicyRepository(orgPolicyDetailsList); var collectionRepository = Substitute.For(); - // Mock GetDefaultCollectionSemaphoresAsync to return all users - var allUserIds = orgPolicyDetailsList.Select(p => p.OrganizationUserId).ToHashSet(); - collectionRepository - .GetDefaultCollectionSemaphoresAsync(Arg.Any>()) - .Returns(allUserIds); - var sut = ArrangeSut(factory, policyRepository, collectionRepository); var policyRequest = new SavePolicyModel(policyUpdate, new OrganizationModelOwnershipPolicyModel(_defaultUserCollectionName)); // Act await sut.ExecuteSideEffectsAsync(policyRequest, postUpdatedPolicy, previousPolicyState); - // Assert - Should not call CreateDefaultCollectionsBulkAsync when all users already have collections + // Assert - Should call repository with all user IDs (repository filters internally) await collectionRepository .Received(1) - .GetDefaultCollectionSemaphoresAsync(Arg.Is>(ids => ids.Count() == 3)); - - await collectionRepository - .DidNotReceive() - .CreateDefaultCollectionsBulkAsync(Arg.Any(), Arg.Any>(), Arg.Any()); + .CreateDefaultCollectionsBulkAsync( + policyUpdate.OrganizationId, + Arg.Is>(ids => ids.Count() == 3), + _defaultUserCollectionName); } private static IEnumerable WhenDefaultCollectionsDoesNotExistTestCases() @@ -497,22 +471,13 @@ public class OrganizationDataOwnershipPolicyValidatorTests var policyRepository = ArrangePolicyRepository(orgPolicyDetailsList); var collectionRepository = Substitute.For(); - // Mock GetDefaultCollectionSemaphoresAsync to return empty set (no existing collections) - collectionRepository - .GetDefaultCollectionSemaphoresAsync(Arg.Any>()) - .Returns(new HashSet()); - var sut = ArrangeSut(factory, policyRepository, collectionRepository); var policyRequest = new SavePolicyModel(policyUpdate, new OrganizationModelOwnershipPolicyModel(_defaultUserCollectionName)); // Act await sut.ExecutePostUpsertSideEffectAsync(policyRequest, postUpdatedPolicy, previousPolicyState); - // Assert - await collectionRepository - .Received(1) - .GetDefaultCollectionSemaphoresAsync(Arg.Is>(ids => ids.Count() == 3)); - + // Assert - Should call with all user IDs (repository does internal filtering) await collectionRepository .Received(1) .CreateDefaultCollectionsBulkAsync( diff --git a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsBulkTests.cs b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsBulkTests.cs index b841681cf9..a1ac02e1ec 100644 --- a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsBulkTests.cs +++ b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsBulkTests.cs @@ -1,5 +1,4 @@  -using Bit.Core.AdminConsole.Collections; using Bit.Core.AdminConsole.Entities; using Bit.Core.Entities; using Bit.Core.Enums; @@ -33,13 +32,12 @@ public class CreateDefaultCollectionsBulkTests // Assert await AssertAllUsersHaveOneDefaultCollectionAsync(collectionRepository, resultOrganizationUsers, organization.Id); - await AssertSempahoresCreatedAsync(collectionRepository, affectedOrgUserIds); await CleanupAsync(organizationRepository, userRepository, organization, resultOrganizationUsers); } [Theory, DatabaseData] - public async Task CreateDefaultCollectionsBulkAsync_CreatesForNewUsersOnly_WhenCallerFiltersExisting( + public async Task CreateDefaultCollectionsBulkAsync_CreatesForNewUsersOnly_AutoFiltersExisting( IOrganizationRepository organizationRepository, IUserRepository userRepository, IOrganizationUserRepository organizationUserRepository, @@ -66,20 +64,17 @@ public class CreateDefaultCollectionsBulkTests var affectedOrgUsers = newOrganizationUsers.Concat(arrangedOrganizationUsers); var affectedOrgUserIds = affectedOrgUsers.Select(organizationUser => organizationUser.Id).ToList(); - // Act - Caller filters out existing users (new pattern) - var existingSemaphores = await collectionRepository.GetDefaultCollectionSemaphoresAsync(affectedOrgUserIds); - var usersNeedingCollections = affectedOrgUserIds.Except(existingSemaphores).ToList(); - await collectionRepository.CreateDefaultCollectionsBulkAsync(organization.Id, usersNeedingCollections, defaultCollectionName); + // Act - Pass all user IDs, method should auto-filter existing users + await collectionRepository.CreateDefaultCollectionsBulkAsync(organization.Id, affectedOrgUserIds, defaultCollectionName); // Assert - All users now have exactly one collection await AssertAllUsersHaveOneDefaultCollectionAsync(collectionRepository, affectedOrgUsers, organization.Id); - await AssertSempahoresCreatedAsync(collectionRepository, affectedOrgUserIds); await CleanupAsync(organizationRepository, userRepository, organization, affectedOrgUsers); } [Theory, DatabaseData] - public async Task CreateDefaultCollectionsBulkAsync_ThrowsException_WhenUsersAlreadyHaveOne( + public async Task CreateDefaultCollectionsBulkAsync_DoesNotCreateDuplicates_WhenUsersAlreadyHaveOne( IOrganizationRepository organizationRepository, IUserRepository userRepository, IOrganizationUserRepository organizationUserRepository, @@ -98,19 +93,17 @@ public class CreateDefaultCollectionsBulkTests await CreateUsersWithExistingDefaultCollectionsAsync(collectionRepository, organization.Id, affectedOrgUserIds, defaultCollectionName, resultOrganizationUsers); - // Act - Try to create again, should throw specific duplicate collection exception - await Assert.ThrowsAsync(() => - collectionRepository.CreateDefaultCollectionsBulkAsync(organization.Id, affectedOrgUserIds, defaultCollectionName)); + // Act - Try to create again, should silently filter and not create duplicates + await collectionRepository.CreateDefaultCollectionsBulkAsync(organization.Id, affectedOrgUserIds, defaultCollectionName); - // Assert - Original collections should remain unchanged + // Assert - Original collections should remain unchanged, still only one per user await AssertAllUsersHaveOneDefaultCollectionAsync(collectionRepository, resultOrganizationUsers, organization.Id); - await AssertSempahoresCreatedAsync(collectionRepository, affectedOrgUserIds); await CleanupAsync(organizationRepository, userRepository, organization, resultOrganizationUsers); } [Theory, DatabaseData] - public async Task CreateDefaultCollectionsBulkAsync_ThrowsException_WhenDuplicatesNotFiltered( + public async Task CreateDefaultCollectionsBulkAsync_AutoFilters_WhenMixedUsersProvided( IOrganizationRepository organizationRepository, IUserRepository userRepository, IOrganizationUserRepository organizationUserRepository, @@ -126,24 +119,24 @@ public class CreateDefaultCollectionsBulkTests // Create collection for existing user await collectionRepository.CreateDefaultCollectionsBulkAsync(organization.Id, [existingUser.Id], defaultCollectionName); - // Act - Try to create for both without filtering (incorrect usage) - await Assert.ThrowsAsync(() => - collectionRepository.CreateDefaultCollectionsBulkAsync( - organization.Id, - [existingUser.Id, newUser.Id], - defaultCollectionName)); + // Act - Pass both users, method should auto-filter and only create for new user + await collectionRepository.CreateDefaultCollectionsBulkAsync( + organization.Id, + [existingUser.Id, newUser.Id], + defaultCollectionName); - // Assert - Verify existing user still has collection + // Assert - Verify existing user still has exactly one collection var existingUserCollections = await collectionRepository.GetManyByUserIdAsync(existingUser.UserId!.Value); - var existingUserDefaultCollection = existingUserCollections - .SingleOrDefault(c => c.OrganizationId == organization.Id && c.Type == CollectionType.DefaultUserCollection); - Assert.NotNull(existingUserDefaultCollection); + var existingUserDefaultCollections = existingUserCollections + .Where(c => c.OrganizationId == organization.Id && c.Type == CollectionType.DefaultUserCollection) + .ToList(); + Assert.Single(existingUserDefaultCollections); - // Verify new user does NOT have collection (transaction rolled back) + // Verify new user now has collection (was created) var newUserCollections = await collectionRepository.GetManyByUserIdAsync(newUser.UserId!.Value); var newUserDefaultCollection = newUserCollections - .FirstOrDefault(c => c.OrganizationId == organization.Id && c.Type == CollectionType.DefaultUserCollection); - Assert.Null(newUserDefaultCollection); + .SingleOrDefault(c => c.OrganizationId == organization.Id && c.Type == CollectionType.DefaultUserCollection); + Assert.NotNull(newUserDefaultCollection); await CleanupAsync(organizationRepository, userRepository, organization, [existingUser, newUser]); } @@ -181,14 +174,6 @@ public class CreateDefaultCollectionsBulkTests return orgUser; } - private static async Task AssertSempahoresCreatedAsync(ICollectionRepository collectionRepository, - IEnumerable organizationUserIds) - { - var organizationUserIdHashSet = organizationUserIds.ToHashSet(); - var semaphores = await collectionRepository.GetDefaultCollectionSemaphoresAsync(organizationUserIdHashSet); - Assert.Equal(organizationUserIdHashSet, semaphores); - } - private static async Task CleanupAsync(IOrganizationRepository organizationRepository, IUserRepository userRepository, Organization organization, diff --git a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsTests.cs b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsTests.cs index 224a9bdc29..c778b24fd4 100644 --- a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsTests.cs +++ b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/CreateDefaultCollectionsTests.cs @@ -1,5 +1,4 @@ -using Bit.Core.AdminConsole.Collections; -using Bit.Core.Enums; +using Bit.Core.Enums; using Bit.Core.Repositories; using Xunit; @@ -41,9 +40,6 @@ public class CreateDefaultCollectionsTests Assert.All(defaultCollections, c => Assert.Equal("My Items", c.Item1.Name)); Assert.All(defaultCollections, c => Assert.Equal(organization.Id, c.Item1.OrganizationId)); - var semaphores = await collectionRepository.GetDefaultCollectionSemaphoresAsync([orgUser1.Id, orgUser2.Id]); - Assert.Equal([orgUser1.Id, orgUser2.Id], semaphores); - // Verify each user has exactly 1 collection with correct permissions var orgUser1Collection = Assert.Single(defaultCollections, c => c.Item2.Users.FirstOrDefault()?.Id == orgUser1.Id); @@ -71,7 +67,7 @@ public class CreateDefaultCollectionsTests /// Test that calling CreateDefaultCollectionsAsync multiple times does NOT create duplicates /// [Theory, DatabaseData] - public async Task CreateDefaultCollectionsAsync_CalledMultipleTimesForSameOrganizationUser_Throws( + public async Task CreateDefaultCollectionsAsync_CalledMultipleTimesForSameOrganizationUser_DoesNotCreateDuplicates( IUserRepository userRepository, IOrganizationRepository organizationRepository, ICollectionRepository collectionRepository, @@ -88,12 +84,11 @@ public class CreateDefaultCollectionsTests [orgUser.Id], "My Items"); - // Second call should throw specific exception and should not create duplicate - await Assert.ThrowsAsync(() => - collectionRepository.CreateDefaultCollectionsAsync( - organization.Id, - [orgUser.Id], - "My Items Duplicate")); + // Second call should silently filter and not create duplicate + await collectionRepository.CreateDefaultCollectionsAsync( + organization.Id, + [orgUser.Id], + "My Items Duplicate"); // Assert - Only one collection should exist var collections = await collectionRepository.GetManyByOrganizationIdAsync(organization.Id); @@ -101,9 +96,6 @@ public class CreateDefaultCollectionsTests Assert.Single(defaultCollections); - var semaphores = await collectionRepository.GetDefaultCollectionSemaphoresAsync([orgUser.Id]); - Assert.Equal([orgUser.Id], semaphores); - var access = await collectionRepository.GetManyUsersByIdAsync(defaultCollections.Single().Id); var userAccess = Assert.Single(access); Assert.Equal(orgUser.Id, userAccess.Id); diff --git a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/DefaultCollectionSemaphoreTests.cs b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/DefaultCollectionSemaphoreTests.cs deleted file mode 100644 index 39cd1d775c..0000000000 --- a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/CollectionRepository/DefaultCollectionSemaphoreTests.cs +++ /dev/null @@ -1,72 +0,0 @@ -using Bit.Core.Repositories; -using Xunit; - -namespace Bit.Infrastructure.IntegrationTest.AdminConsole.Repositories.CollectionRepository; - -/// -/// Tests for DefaultCollectionSemaphore table behavior including cascade deletions -/// -public class DefaultCollectionSemaphoreTests -{ - [Theory, DatabaseData] - public async Task DeleteOrganizationUser_CascadeDeletesSemaphore( - IUserRepository userRepository, - IOrganizationRepository organizationRepository, - ICollectionRepository collectionRepository, - IOrganizationUserRepository organizationUserRepository) - { - // Arrange - var user = await userRepository.CreateTestUserAsync(); - var organization = await organizationRepository.CreateTestOrganizationAsync(); - var orgUser = await organizationUserRepository.CreateTestOrganizationUserAsync(organization, user); - - await collectionRepository.CreateDefaultCollectionsAsync( - organization.Id, - [orgUser.Id], - "My Items"); - - // Verify semaphore exists - var semaphoreBefore = await collectionRepository.GetDefaultCollectionSemaphoresAsync([orgUser.Id]); - Assert.Single(semaphoreBefore, s => s == orgUser.Id); - - // Act - Delete organization user - await organizationUserRepository.DeleteAsync(orgUser); - - // Assert - Semaphore should be cascade deleted - var semaphoreAfter = await collectionRepository.GetDefaultCollectionSemaphoresAsync([orgUser.Id]); - Assert.Empty(semaphoreAfter); - } - - /// - /// Test that deleting an Organization cascades through OrganizationUser to DefaultCollectionSemaphore - /// Note: Cascade path is Organization -> OrganizationUser -> DefaultCollectionSemaphore (not direct) - /// - [Theory, DatabaseData] - public async Task DeleteOrganization_CascadeDeletesSemaphore_ThroughOrganizationUser( - IUserRepository userRepository, - IOrganizationRepository organizationRepository, - ICollectionRepository collectionRepository, - IOrganizationUserRepository organizationUserRepository) - { - // Arrange - var user = await userRepository.CreateTestUserAsync(); - var organization = await organizationRepository.CreateTestOrganizationAsync(); - var orgUser = await organizationUserRepository.CreateTestOrganizationUserAsync(organization, user); - - await collectionRepository.CreateDefaultCollectionsAsync( - organization.Id, - [orgUser.Id], - "My Items"); - - // Verify semaphore exists - var semaphoreBefore = await collectionRepository.GetDefaultCollectionSemaphoresAsync([orgUser.Id]); - Assert.Single(semaphoreBefore, s => s == orgUser.Id); - - // Act - Delete organization (which cascades to OrganizationUser, which cascades to semaphore) - await organizationRepository.DeleteAsync(organization); - - // Assert - Semaphore should be cascade deleted via OrganizationUser - var semaphoreAfter = await collectionRepository.GetDefaultCollectionSemaphoresAsync([orgUser.Id]); - Assert.Empty(semaphoreAfter); - } -} diff --git a/util/Migrator/DbScripts/2025-12-30_00_DefaultCollectionSemaphore.sql b/util/Migrator/DbScripts/2025-12-30_00_DefaultCollectionSemaphore.sql deleted file mode 100644 index 285c39e77d..0000000000 --- a/util/Migrator/DbScripts/2025-12-30_00_DefaultCollectionSemaphore.sql +++ /dev/null @@ -1,31 +0,0 @@ --- Create DefaultCollectionSemaphore table --- Cascade behavior: Organization -> OrganizationUser (CASCADE) -> DefaultCollectionSemaphore (CASCADE) --- OrganizationId FK has NO ACTION to avoid competing cascade paths -IF OBJECT_ID('[dbo].[DefaultCollectionSemaphore]') IS NULL -BEGIN - CREATE TABLE [dbo].[DefaultCollectionSemaphore] - ( - [OrganizationUserId] UNIQUEIDENTIFIER NOT NULL, - [CreationDate] DATETIME2 (7) NOT NULL, - CONSTRAINT [PK_DefaultCollectionSemaphore] PRIMARY KEY CLUSTERED ([OrganizationUserId] ASC), - CONSTRAINT [FK_DefaultCollectionSemaphore_OrganizationUser] FOREIGN KEY ([OrganizationUserId]) - REFERENCES [dbo].[OrganizationUser] ([Id]) ON DELETE CASCADE - ); -END -GO - --- Create stored procedure to read semaphores by OrganizationUserId -CREATE OR ALTER PROCEDURE [dbo].[DefaultCollectionSemaphore_ReadByOrganizationUserIds] - @OrganizationUserIds AS [dbo].[GuidIdArray] READONLY -AS -BEGIN - SET NOCOUNT ON - - SELECT - [OrganizationUserId] - FROM - [dbo].[DefaultCollectionSemaphore] DCS - INNER JOIN - @OrganizationUserIds OU ON [OU].[Id] = [DCS].[OrganizationUserId] -END -GO diff --git a/util/Migrator/DbScripts/2025-12-30_01_Collection_CreateDefaultCollections.sql b/util/Migrator/DbScripts/2025-12-30_01_Collection_CreateDefaultCollections.sql index a03040c571..7afee3e412 100644 --- a/util/Migrator/DbScripts/2025-12-30_01_Collection_CreateDefaultCollections.sql +++ b/util/Migrator/DbScripts/2025-12-30_01_Collection_CreateDefaultCollections.sql @@ -1,6 +1,6 @@ -- Creates default user collections for organization users --- Uses semaphore table to prevent duplicate default collections at database level --- NOTE: this MUST be executed in a single transaction to obtain semaphore protection +-- Filters out existing default collections at database level +-- NOTE: this MUST be executed in a single transaction to ensure consistency CREATE OR ALTER PROCEDURE [dbo].[Collection_CreateDefaultCollections] @OrganizationId UNIQUEIDENTIFIER, @DefaultCollectionName VARCHAR(MAX), @@ -11,20 +11,20 @@ BEGIN DECLARE @Now DATETIME2(7) = GETUTCDATE() - -- Insert semaphore entries first to obtain the "lock" - -- If this fails due to duplicate key, the entire transaction will be rolled back - INSERT INTO [dbo].[DefaultCollectionSemaphore] - ( - [OrganizationUserId], - [CreationDate] - ) - SELECT - ids.[Id1], -- OrganizationUserId - @Now - FROM - @OrganizationUserCollectionIds ids; + -- Filter to only users who don't have default collections + SELECT ids.Id1, ids.Id2 + INTO #FilteredIds + FROM @OrganizationUserCollectionIds ids + WHERE NOT EXISTS ( + SELECT 1 + FROM [dbo].[CollectionUser] cu + INNER JOIN [dbo].[Collection] c ON c.Id = cu.CollectionId + WHERE c.OrganizationId = @OrganizationId + AND c.[Type] = 1 -- CollectionType.DefaultUserCollection + AND cu.OrganizationUserId = ids.Id1 + ); - -- Insert collections for users who obtained semaphore entries + -- Insert collections only for users who don't have default collections yet INSERT INTO [dbo].[Collection] ( [Id], @@ -37,7 +37,7 @@ BEGIN [DefaultUserCollectionEmail] ) SELECT - ids.[Id2], -- CollectionId + ids.Id2, -- CollectionId @OrganizationId, @DefaultCollectionName, @Now, @@ -46,7 +46,7 @@ BEGIN NULL, NULL FROM - @OrganizationUserCollectionIds ids; + #FilteredIds ids; -- Insert collection user mappings INSERT INTO [dbo].[CollectionUser] @@ -58,12 +58,14 @@ BEGIN [Manage] ) SELECT - ids.[Id2], -- CollectionId - ids.[Id1], -- OrganizationUserId + ids.Id2, -- CollectionId + ids.Id1, -- OrganizationUserId 0, -- ReadOnly = false 0, -- HidePasswords = false 1 -- Manage = true FROM - @OrganizationUserCollectionIds ids; + #FilteredIds ids; + + DROP TABLE #FilteredIds; END GO diff --git a/util/Migrator/DbScripts/2025-12-30_02_PopulateDefaultCollectionSemaphore.sql b/util/Migrator/DbScripts/2025-12-30_02_PopulateDefaultCollectionSemaphore.sql deleted file mode 100644 index b8518b0eba..0000000000 --- a/util/Migrator/DbScripts/2025-12-30_02_PopulateDefaultCollectionSemaphore.sql +++ /dev/null @@ -1,26 +0,0 @@ --- Populate DefaultCollectionSemaphore from existing Type=1 (DefaultUserCollection) collections --- This migration is idempotent and can be run multiple times safely -INSERT INTO [dbo].[DefaultCollectionSemaphore] -( - [OrganizationUserId], - [CreationDate] -) -SELECT DISTINCT - cu.[OrganizationUserId], - GETUTCDATE() -FROM - [dbo].[Collection] c -INNER JOIN - [dbo].[CollectionUser] cu ON c.[Id] = cu.[CollectionId] -WHERE - c.[Type] = 1 -- CollectionType.DefaultUserCollection - AND NOT EXISTS - ( - SELECT - 1 - FROM - [dbo].[DefaultCollectionSemaphore] dcs - WHERE - dcs.[OrganizationUserId] = cu.[OrganizationUserId] - ); -GO diff --git a/util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.Designer.cs b/util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.Designer.cs deleted file mode 100644 index 6d55cbf765..0000000000 --- a/util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.Designer.cs +++ /dev/null @@ -1,3467 +0,0 @@ -// -using System; -using Bit.Infrastructure.EntityFramework.Repositories; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Bit.MySqlMigrations.Migrations -{ - [DbContext(typeof(DatabaseContext))] - [Migration("20251231233256_DefaultCollectionSemaphore")] - partial class DefaultCollectionSemaphore - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); - - modelBuilder.Entity("Bit.Core.Dirt.Reports.Models.Data.OrganizationMemberBaseDetail", b => - { - b.Property("CipherId") - .HasColumnType("char(36)"); - - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("CollectionName") - .HasColumnType("longtext"); - - b.Property("Email") - .HasColumnType("longtext"); - - b.Property("GroupId") - .HasColumnType("char(36)"); - - b.Property("GroupName") - .HasColumnType("longtext"); - - b.Property("HidePasswords") - .HasColumnType("tinyint(1)"); - - b.Property("Manage") - .HasColumnType("tinyint(1)"); - - b.Property("ReadOnly") - .HasColumnType("tinyint(1)"); - - b.Property("ResetPasswordKey") - .HasColumnType("longtext"); - - b.Property("TwoFactorProviders") - .HasColumnType("longtext"); - - b.Property("UserGuid") - .HasColumnType("char(36)"); - - b.Property("UserName") - .HasColumnType("longtext"); - - b.Property("UsesKeyConnector") - .HasColumnType("tinyint(1)"); - - b.ToTable("OrganizationMemberBaseDetails"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.Property("OrganizationUserId") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.HasKey("OrganizationUserId"); - - b.ToTable("DefaultCollectionSemaphore", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AllowAdminAccessToAllCollectionItems") - .HasColumnType("tinyint(1)") - .HasDefaultValue(true); - - b.Property("BillingEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("BusinessAddress1") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("BusinessAddress2") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("BusinessAddress3") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("BusinessCountry") - .HasMaxLength(2) - .HasColumnType("varchar(2)"); - - b.Property("BusinessName") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("BusinessTaxNumber") - .HasMaxLength(30) - .HasColumnType("varchar(30)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Enabled") - .HasColumnType("tinyint(1)"); - - b.Property("ExpirationDate") - .HasColumnType("datetime(6)"); - - b.Property("Gateway") - .HasColumnType("tinyint unsigned"); - - b.Property("GatewayCustomerId") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("GatewaySubscriptionId") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("Identifier") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("LicenseKey") - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("LimitCollectionCreation") - .HasColumnType("tinyint(1)"); - - b.Property("LimitCollectionDeletion") - .HasColumnType("tinyint(1)"); - - b.Property("LimitItemDeletion") - .HasColumnType("tinyint(1)"); - - b.Property("MaxAutoscaleSeats") - .HasColumnType("int"); - - b.Property("MaxAutoscaleSmSeats") - .HasColumnType("int"); - - b.Property("MaxAutoscaleSmServiceAccounts") - .HasColumnType("int"); - - b.Property("MaxCollections") - .HasColumnType("smallint"); - - b.Property("MaxStorageGb") - .HasColumnType("smallint"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("OwnersNotifiedOfAutoscaling") - .HasColumnType("datetime(6)"); - - b.Property("Plan") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("PlanType") - .HasColumnType("tinyint unsigned"); - - b.Property("PrivateKey") - .HasColumnType("longtext"); - - b.Property("PublicKey") - .HasColumnType("longtext"); - - b.Property("ReferenceData") - .HasColumnType("longtext"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Seats") - .HasColumnType("int"); - - b.Property("SelfHost") - .HasColumnType("tinyint(1)"); - - b.Property("SmSeats") - .HasColumnType("int"); - - b.Property("SmServiceAccounts") - .HasColumnType("int"); - - b.Property("Status") - .HasColumnType("tinyint unsigned"); - - b.Property("Storage") - .HasColumnType("bigint"); - - b.Property("SyncSeats") - .HasColumnType("tinyint(1)"); - - b.Property("TwoFactorProviders") - .HasColumnType("longtext"); - - b.Property("Use2fa") - .HasColumnType("tinyint(1)"); - - b.Property("UseAdminSponsoredFamilies") - .HasColumnType("tinyint(1)"); - - b.Property("UseApi") - .HasColumnType("tinyint(1)"); - - b.Property("UseAutomaticUserConfirmation") - .HasColumnType("tinyint(1)"); - - b.Property("UseCustomPermissions") - .HasColumnType("tinyint(1)"); - - b.Property("UseDirectory") - .HasColumnType("tinyint(1)"); - - b.Property("UseEvents") - .HasColumnType("tinyint(1)"); - - b.Property("UseGroups") - .HasColumnType("tinyint(1)"); - - b.Property("UseKeyConnector") - .HasColumnType("tinyint(1)"); - - b.Property("UseOrganizationDomains") - .HasColumnType("tinyint(1)"); - - b.Property("UsePasswordManager") - .HasColumnType("tinyint(1)"); - - b.Property("UsePhishingBlocker") - .HasColumnType("tinyint(1)"); - - b.Property("UsePolicies") - .HasColumnType("tinyint(1)"); - - b.Property("UseResetPassword") - .HasColumnType("tinyint(1)"); - - b.Property("UseRiskInsights") - .HasColumnType("tinyint(1)"); - - b.Property("UseScim") - .HasColumnType("tinyint(1)"); - - b.Property("UseSecretsManager") - .HasColumnType("tinyint(1)"); - - b.Property("UseSso") - .HasColumnType("tinyint(1)"); - - b.Property("UseTotp") - .HasColumnType("tinyint(1)"); - - b.Property("UsersGetPremium") - .HasColumnType("tinyint(1)"); - - b.HasKey("Id"); - - b.HasIndex("Id", "Enabled") - .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp", "UsersGetPremium" }); - - b.ToTable("Organization", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Configuration") - .HasColumnType("longtext"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "Type") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationIntegration", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegrationConfiguration", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Configuration") - .HasColumnType("longtext"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("EventType") - .HasColumnType("int"); - - b.Property("Filters") - .HasColumnType("longtext"); - - b.Property("OrganizationIntegrationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Template") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationIntegrationId"); - - b.ToTable("OrganizationIntegrationConfiguration", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Data") - .HasColumnType("longtext"); - - b.Property("Enabled") - .HasColumnType("tinyint(1)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "Type") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Policy", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("BillingEmail") - .HasColumnType("longtext"); - - b.Property("BillingPhone") - .HasColumnType("longtext"); - - b.Property("BusinessAddress1") - .HasColumnType("longtext"); - - b.Property("BusinessAddress2") - .HasColumnType("longtext"); - - b.Property("BusinessAddress3") - .HasColumnType("longtext"); - - b.Property("BusinessCountry") - .HasColumnType("longtext"); - - b.Property("BusinessName") - .HasColumnType("longtext"); - - b.Property("BusinessTaxNumber") - .HasColumnType("longtext"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("DiscountId") - .HasColumnType("longtext"); - - b.Property("Enabled") - .HasColumnType("tinyint(1)"); - - b.Property("Gateway") - .HasColumnType("tinyint unsigned"); - - b.Property("GatewayCustomerId") - .HasColumnType("longtext"); - - b.Property("GatewaySubscriptionId") - .HasColumnType("longtext"); - - b.Property("Name") - .HasColumnType("longtext"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Status") - .HasColumnType("tinyint unsigned"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UseEvents") - .HasColumnType("tinyint(1)"); - - b.HasKey("Id"); - - b.ToTable("Provider", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Settings") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ProviderId"); - - b.ToTable("ProviderOrganization", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Email") - .HasColumnType("longtext"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("Permissions") - .HasColumnType("longtext"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Status") - .HasColumnType("tinyint unsigned"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.HasIndex("UserId"); - - b.ToTable("ProviderUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AccessCode") - .HasMaxLength(25) - .HasColumnType("varchar(25)"); - - b.Property("Approved") - .HasColumnType("tinyint(1)"); - - b.Property("AuthenticationDate") - .HasColumnType("datetime(6)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("MasterPasswordHash") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("PublicKey") - .HasColumnType("longtext"); - - b.Property("RequestCountryName") - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("RequestDeviceIdentifier") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("RequestDeviceType") - .HasColumnType("tinyint unsigned"); - - b.Property("RequestIpAddress") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("ResponseDate") - .HasColumnType("datetime(6)"); - - b.Property("ResponseDeviceId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ResponseDeviceId"); - - b.HasIndex("UserId"); - - b.ToTable("AuthRequest", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("GranteeId") - .HasColumnType("char(36)"); - - b.Property("GrantorId") - .HasColumnType("char(36)"); - - b.Property("KeyEncrypted") - .HasColumnType("longtext"); - - b.Property("LastNotificationDate") - .HasColumnType("datetime(6)"); - - b.Property("RecoveryInitiatedDate") - .HasColumnType("datetime(6)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Status") - .HasColumnType("tinyint unsigned"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("WaitTimeDays") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("GranteeId"); - - b.HasIndex("GrantorId"); - - b.ToTable("EmergencyAccess", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClientId") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("ConsumedDate") - .HasColumnType("datetime(6)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Data") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Description") - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("ExpirationDate") - .HasColumnType("datetime(6)"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("SessionId") - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("SubjectId") - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.HasKey("Id") - .HasName("PK_Grant") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ExpirationDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Grant", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Data") - .HasColumnType("longtext"); - - b.Property("Enabled") - .HasColumnType("tinyint(1)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("SsoConfig", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("varchar(300)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId"); - - b.HasIndex("OrganizationId", "ExternalId") - .IsUnique() - .HasAnnotation("Npgsql:IndexInclude", new[] { "UserId" }) - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "UserId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("SsoUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AaGuid") - .HasColumnType("char(36)"); - - b.Property("Counter") - .HasColumnType("int"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("CredentialId") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("EncryptedPrivateKey") - .HasMaxLength(2000) - .HasColumnType("varchar(2000)"); - - b.Property("EncryptedPublicKey") - .HasMaxLength(2000) - .HasColumnType("varchar(2000)"); - - b.Property("EncryptedUserKey") - .HasMaxLength(2000) - .HasColumnType("varchar(2000)"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("PublicKey") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("SupportsPrf") - .HasColumnType("tinyint(1)"); - - b.Property("Type") - .HasMaxLength(20) - .HasColumnType("varchar(20)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("WebAuthnCredential", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ClientOrganizationMigrationRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ExpirationDate") - .HasColumnType("datetime(6)"); - - b.Property("GatewayCustomerId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("GatewaySubscriptionId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("MaxAutoscaleSeats") - .HasColumnType("int"); - - b.Property("MaxStorageGb") - .HasColumnType("smallint"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("PlanType") - .HasColumnType("tinyint unsigned"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("Seats") - .HasColumnType("int"); - - b.Property("Status") - .HasColumnType("tinyint unsigned"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId", "OrganizationId") - .IsUnique(); - - b.ToTable("ClientOrganizationMigrationRecord", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.OrganizationInstallation", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("InstallationId") - .HasColumnType("char(36)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("InstallationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationInstallation", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderInvoiceItem", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AssignedSeats") - .HasColumnType("int"); - - b.Property("ClientId") - .HasColumnType("char(36)"); - - b.Property("ClientName") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("Created") - .HasColumnType("datetime(6)"); - - b.Property("InvoiceId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("InvoiceNumber") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("PlanName") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("Total") - .HasColumnType("decimal(65,30)"); - - b.Property("UsedSeats") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.ToTable("ProviderInvoiceItem", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderPlan", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AllocatedSeats") - .HasColumnType("int"); - - b.Property("PlanType") - .HasColumnType("tinyint unsigned"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("PurchasedSeats") - .HasColumnType("int"); - - b.Property("SeatMinimum") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.HasIndex("Id", "PlanType") - .IsUnique(); - - b.ToTable("ProviderPlan", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationApplication", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Applications") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("ContentEncryptionKey") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationApplication", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationReport", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ApplicationAtRiskCount") - .HasColumnType("int"); - - b.Property("ApplicationCount") - .HasColumnType("int"); - - b.Property("ApplicationData") - .HasColumnType("longtext"); - - b.Property("ContentEncryptionKey") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("CriticalApplicationAtRiskCount") - .HasColumnType("int"); - - b.Property("CriticalApplicationCount") - .HasColumnType("int"); - - b.Property("CriticalMemberAtRiskCount") - .HasColumnType("int"); - - b.Property("CriticalMemberCount") - .HasColumnType("int"); - - b.Property("CriticalPasswordAtRiskCount") - .HasColumnType("int"); - - b.Property("CriticalPasswordCount") - .HasColumnType("int"); - - b.Property("MemberAtRiskCount") - .HasColumnType("int"); - - b.Property("MemberCount") - .HasColumnType("int"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("PasswordAtRiskCount") - .HasColumnType("int"); - - b.Property("PasswordCount") - .HasColumnType("int"); - - b.Property("ReportData") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("SummaryData") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationReport", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.PasswordHealthReportApplication", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Uri") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("PasswordHealthReportApplication", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Cache", b => - { - b.Property("Id") - .HasMaxLength(449) - .HasColumnType("varchar(449)"); - - b.Property("AbsoluteExpiration") - .HasColumnType("datetime(6)"); - - b.Property("ExpiresAtTime") - .HasColumnType("datetime(6)"); - - b.Property("SlidingExpirationInSeconds") - .HasColumnType("bigint"); - - b.Property("Value") - .IsRequired() - .HasColumnType("longblob"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ExpiresAtTime") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Cache", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("DefaultUserCollectionEmail") - .HasColumnType("longtext"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("varchar(300)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("Collection", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("CipherId") - .HasColumnType("char(36)"); - - b.HasKey("CollectionId", "CipherId"); - - b.HasIndex("CipherId"); - - b.ToTable("CollectionCipher", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("GroupId") - .HasColumnType("char(36)"); - - b.Property("HidePasswords") - .HasColumnType("tinyint(1)"); - - b.Property("Manage") - .HasColumnType("tinyint(1)"); - - b.Property("ReadOnly") - .HasColumnType("tinyint(1)"); - - b.HasKey("CollectionId", "GroupId"); - - b.HasIndex("GroupId"); - - b.ToTable("CollectionGroups"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("OrganizationUserId") - .HasColumnType("char(36)"); - - b.Property("HidePasswords") - .HasColumnType("tinyint(1)"); - - b.Property("Manage") - .HasColumnType("tinyint(1)"); - - b.Property("ReadOnly") - .HasColumnType("tinyint(1)"); - - b.HasKey("CollectionId", "OrganizationUserId"); - - b.HasIndex("OrganizationUserId"); - - b.ToTable("CollectionUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Active") - .HasColumnType("tinyint(1)") - .HasDefaultValue(true); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("EncryptedPrivateKey") - .HasColumnType("longtext"); - - b.Property("EncryptedPublicKey") - .HasColumnType("longtext"); - - b.Property("EncryptedUserKey") - .HasColumnType("longtext"); - - b.Property("Identifier") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("PushToken") - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("Identifier") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "Identifier") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Device", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Event", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ActingUserId") - .HasColumnType("char(36)"); - - b.Property("CipherId") - .HasColumnType("char(36)"); - - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("Date") - .HasColumnType("datetime(6)"); - - b.Property("DeviceType") - .HasColumnType("tinyint unsigned"); - - b.Property("DomainName") - .HasColumnType("longtext"); - - b.Property("GrantedServiceAccountId") - .HasColumnType("char(36)"); - - b.Property("GroupId") - .HasColumnType("char(36)"); - - b.Property("InstallationId") - .HasColumnType("char(36)"); - - b.Property("IpAddress") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("OrganizationUserId") - .HasColumnType("char(36)"); - - b.Property("PolicyId") - .HasColumnType("char(36)"); - - b.Property("ProjectId") - .HasColumnType("char(36)"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("ProviderOrganizationId") - .HasColumnType("char(36)"); - - b.Property("ProviderUserId") - .HasColumnType("char(36)"); - - b.Property("SecretId") - .HasColumnType("char(36)"); - - b.Property("ServiceAccountId") - .HasColumnType("char(36)"); - - b.Property("SystemUser") - .HasColumnType("tinyint unsigned"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId") - .HasDatabaseName("IX_Event_DateOrganizationIdUserId") - .HasAnnotation("SqlServer:Clustered", false) - .HasAnnotation("SqlServer:Include", new[] { "ServiceAccountId", "GrantedServiceAccountId" }); - - b.ToTable("Event", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("varchar(300)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("Group", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => - { - b.Property("GroupId") - .HasColumnType("char(36)"); - - b.Property("OrganizationUserId") - .HasColumnType("char(36)"); - - b.HasKey("GroupId", "OrganizationUserId"); - - b.HasIndex("OrganizationUserId"); - - b.ToTable("GroupUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ApiKey") - .IsRequired() - .HasMaxLength(30) - .HasColumnType("varchar(30)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationApiKey", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Config") - .HasColumnType("longtext"); - - b.Property("Enabled") - .HasColumnType("tinyint(1)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationConnection", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("DomainName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("JobRunCount") - .HasColumnType("int"); - - b.Property("LastCheckedDate") - .HasColumnType("datetime(6)"); - - b.Property("NextRunDate") - .HasColumnType("datetime(6)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("Txt") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("VerifiedDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationDomain", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("FriendlyName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("IsAdminInitiated") - .HasColumnType("tinyint(1)"); - - b.Property("LastSyncDate") - .HasColumnType("datetime(6)"); - - b.Property("Notes") - .HasColumnType("longtext"); - - b.Property("OfferedToEmail") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("PlanSponsorshipType") - .HasColumnType("tinyint unsigned"); - - b.Property("SponsoredOrganizationId") - .HasColumnType("char(36)"); - - b.Property("SponsoringOrganizationId") - .HasColumnType("char(36)"); - - b.Property("SponsoringOrganizationUserId") - .HasColumnType("char(36)"); - - b.Property("ToDelete") - .HasColumnType("tinyint(1)"); - - b.Property("ValidUntil") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("SponsoredOrganizationId"); - - b.HasIndex("SponsoringOrganizationId"); - - b.HasIndex("SponsoringOrganizationUserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationSponsorship", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AccessSecretsManager") - .HasColumnType("tinyint(1)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("varchar(300)"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("Permissions") - .HasColumnType("longtext"); - - b.Property("ResetPasswordKey") - .HasColumnType("longtext"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AccessCount") - .HasColumnType("int"); - - b.Property("CipherId") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Data") - .HasColumnType("longtext"); - - b.Property("DeletionDate") - .HasColumnType("datetime(6)"); - - b.Property("Disabled") - .HasColumnType("tinyint(1)"); - - b.Property("Emails") - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("ExpirationDate") - .HasColumnType("datetime(6)"); - - b.Property("HideEmail") - .HasColumnType("tinyint(1)"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("MaxAccessCount") - .HasColumnType("int"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("Password") - .HasMaxLength(300) - .HasColumnType("varchar(300)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("DeletionDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId"); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Send", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.TaxRate", b => - { - b.Property("Id") - .HasMaxLength(40) - .HasColumnType("varchar(40)"); - - b.Property("Active") - .HasColumnType("tinyint(1)"); - - b.Property("Country") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("PostalCode") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("varchar(10)"); - - b.Property("Rate") - .HasColumnType("decimal(65,30)"); - - b.Property("State") - .HasMaxLength(2) - .HasColumnType("varchar(2)"); - - b.HasKey("Id"); - - b.ToTable("TaxRate", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Amount") - .HasColumnType("decimal(65,30)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Details") - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("Gateway") - .HasColumnType("tinyint unsigned"); - - b.Property("GatewayId") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("PaymentMethodType") - .HasColumnType("tinyint unsigned"); - - b.Property("ProviderId") - .HasColumnType("char(36)"); - - b.Property("Refunded") - .HasColumnType("tinyint(1)"); - - b.Property("RefundedAmount") - .HasColumnType("decimal(65,30)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ProviderId"); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "OrganizationId", "CreationDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Transaction", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AccountRevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("ApiKey") - .IsRequired() - .HasMaxLength(30) - .HasColumnType("varchar(30)"); - - b.Property("AvatarColor") - .HasMaxLength(7) - .HasColumnType("varchar(7)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Culture") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("varchar(10)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("EmailVerified") - .HasColumnType("tinyint(1)"); - - b.Property("EquivalentDomains") - .HasColumnType("longtext"); - - b.Property("ExcludedGlobalEquivalentDomains") - .HasColumnType("longtext"); - - b.Property("FailedLoginCount") - .HasColumnType("int"); - - b.Property("ForcePasswordReset") - .HasColumnType("tinyint(1)"); - - b.Property("Gateway") - .HasColumnType("tinyint unsigned"); - - b.Property("GatewayCustomerId") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("GatewaySubscriptionId") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("Kdf") - .HasColumnType("tinyint unsigned"); - - b.Property("KdfIterations") - .HasColumnType("int"); - - b.Property("KdfMemory") - .HasColumnType("int"); - - b.Property("KdfParallelism") - .HasColumnType("int"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("LastEmailChangeDate") - .HasColumnType("datetime(6)"); - - b.Property("LastFailedLoginDate") - .HasColumnType("datetime(6)"); - - b.Property("LastKdfChangeDate") - .HasColumnType("datetime(6)"); - - b.Property("LastKeyRotationDate") - .HasColumnType("datetime(6)"); - - b.Property("LastPasswordChangeDate") - .HasColumnType("datetime(6)"); - - b.Property("LicenseKey") - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("MasterPassword") - .HasMaxLength(300) - .HasColumnType("varchar(300)"); - - b.Property("MasterPasswordHint") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("MaxStorageGb") - .HasColumnType("smallint"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("Premium") - .HasColumnType("tinyint(1)"); - - b.Property("PremiumExpirationDate") - .HasColumnType("datetime(6)"); - - b.Property("PrivateKey") - .HasColumnType("longtext"); - - b.Property("PublicKey") - .HasColumnType("longtext"); - - b.Property("ReferenceData") - .HasColumnType("longtext"); - - b.Property("RenewalReminderDate") - .HasColumnType("datetime(6)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("SecurityState") - .HasColumnType("longtext"); - - b.Property("SecurityVersion") - .HasColumnType("int"); - - b.Property("SignedPublicKey") - .HasColumnType("longtext"); - - b.Property("Storage") - .HasColumnType("bigint"); - - b.Property("TwoFactorProviders") - .HasColumnType("longtext"); - - b.Property("TwoFactorRecoveryCode") - .HasMaxLength(32) - .HasColumnType("varchar(32)"); - - b.Property("UsesKeyConnector") - .HasColumnType("tinyint(1)"); - - b.Property("VerifyDevices") - .HasColumnType("tinyint(1)"); - - b.HasKey("Id"); - - b.HasIndex("Email") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("Premium", "PremiumExpirationDate", "RenewalReminderDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("User", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.UserSignatureKeyPair", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("SignatureAlgorithm") - .HasColumnType("tinyint unsigned"); - - b.Property("SigningKey") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("VerifyingKey") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("UserId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("UserSignatureKeyPair", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Body") - .HasMaxLength(3000) - .HasColumnType("varchar(3000)"); - - b.Property("ClientType") - .HasColumnType("tinyint unsigned"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Global") - .HasColumnType("tinyint(1)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("Priority") - .HasColumnType("tinyint unsigned"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("TaskId") - .HasColumnType("char(36)"); - - b.Property("Title") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("TaskId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("ClientType", "Global", "UserId", "OrganizationId", "Priority", "CreationDate") - .IsDescending(false, false, false, false, true, true) - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Notification", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.NotificationStatus", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("NotificationId") - .HasColumnType("char(36)"); - - b.Property("DeletedDate") - .HasColumnType("datetime(6)"); - - b.Property("ReadDate") - .HasColumnType("datetime(6)"); - - b.HasKey("UserId", "NotificationId") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("NotificationId"); - - b.ToTable("NotificationStatus", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Platform.Installation", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Enabled") - .HasColumnType("tinyint(1)"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(150) - .HasColumnType("varchar(150)"); - - b.Property("LastActivityDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.ToTable("Installation", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Discriminator") - .IsRequired() - .HasMaxLength(34) - .HasColumnType("varchar(34)"); - - b.Property("Read") - .HasColumnType("tinyint(1)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Write") - .HasColumnType("tinyint(1)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.ToTable("AccessPolicy", (string)null); - - b.HasDiscriminator().HasValue("AccessPolicy"); - - b.UseTphMappingStrategy(); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ClientSecretHash") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("EncryptedPayload") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("varchar(4000)"); - - b.Property("ExpireAt") - .HasColumnType("datetime(6)"); - - b.Property("Key") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Scope") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("varchar(4000)"); - - b.Property("ServiceAccountId") - .HasColumnType("char(36)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ServiceAccountId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("ApiKey", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("DeletedDate") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("DeletedDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Project", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("DeletedDate") - .HasColumnType("datetime(6)"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("Note") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Value") - .HasColumnType("longtext"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("DeletedDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Secret", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.SecretVersion", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("EditorOrganizationUserId") - .HasColumnType("char(36)"); - - b.Property("EditorServiceAccountId") - .HasColumnType("char(36)"); - - b.Property("SecretId") - .HasColumnType("char(36)"); - - b.Property("Value") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("VersionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("EditorOrganizationUserId") - .HasDatabaseName("IX_SecretVersion_EditorOrganizationUserId"); - - b.HasIndex("EditorServiceAccountId") - .HasDatabaseName("IX_SecretVersion_EditorServiceAccountId"); - - b.HasIndex("SecretId") - .HasDatabaseName("IX_SecretVersion_SecretId"); - - b.ToTable("SecretVersion"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("ServiceAccount", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ArchivedDate") - .HasColumnType("datetime(6)"); - - b.Property("Attachments") - .HasColumnType("longtext"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Data") - .HasColumnType("longtext"); - - b.Property("DeletedDate") - .HasColumnType("datetime(6)"); - - b.Property("Favorites") - .HasColumnType("longtext"); - - b.Property("Folders") - .HasColumnType("longtext"); - - b.Property("Key") - .HasColumnType("longtext"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("Reprompt") - .HasColumnType("tinyint unsigned"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("UserId"); - - b.ToTable("Cipher", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Folder", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasColumnType("longtext"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("Folder", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CipherId") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.Property("OrganizationId") - .HasColumnType("char(36)"); - - b.Property("RevisionDate") - .HasColumnType("datetime(6)"); - - b.Property("Status") - .HasColumnType("tinyint unsigned"); - - b.Property("Type") - .HasColumnType("tinyint unsigned"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("CipherId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("SecurityTask", (string)null); - }); - - modelBuilder.Entity("ProjectSecret", b => - { - b.Property("ProjectsId") - .HasColumnType("char(36)"); - - b.Property("SecretsId") - .HasColumnType("char(36)"); - - b.HasKey("ProjectsId", "SecretsId"); - - b.HasIndex("SecretsId"); - - b.ToTable("ProjectSecret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedProjectId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedSecretId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedServiceAccountId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedServiceAccountId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_service_account"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedProjectId"); - - b.Property("ServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("ServiceAccountId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("ServiceAccountId"); - - b.HasDiscriminator().HasValue("service_account_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedSecretId"); - - b.Property("ServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("ServiceAccountId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("ServiceAccountId"); - - b.HasDiscriminator().HasValue("service_account_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedProjectId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedSecretId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("GrantedServiceAccountId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("char(36)") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedServiceAccountId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_service_account"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegrationConfiguration", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", "OrganizationIntegration") - .WithMany() - .HasForeignKey("OrganizationIntegrationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationIntegration"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Policies") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Provider"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Device", "ResponseDevice") - .WithMany() - .HasForeignKey("ResponseDeviceId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("ResponseDevice"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantee") - .WithMany() - .HasForeignKey("GranteeId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantor") - .WithMany() - .HasForeignKey("GrantorId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Grantee"); - - b.Navigation("Grantor"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("SsoConfigs") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("SsoUsers") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("SsoUsers") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.OrganizationInstallation", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Platform.Installation", "Installation") - .WithMany() - .HasForeignKey("InstallationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Installation"); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderInvoiceItem", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderPlan", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationApplication", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationReport", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.PasswordHealthReportApplication", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Collections") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher") - .WithMany("CollectionCiphers") - .HasForeignKey("CipherId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionCiphers") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Cipher"); - - b.Navigation("Collection"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionGroups") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Collection"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionUsers") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany("CollectionUsers") - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Collection"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Groups") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany("GroupUsers") - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany("GroupUsers") - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Group"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("ApiKeys") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Connections") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Domains") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "SponsoredOrganization") - .WithMany() - .HasForeignKey("SponsoredOrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "SponsoringOrganization") - .WithMany() - .HasForeignKey("SponsoringOrganizationId"); - - b.Navigation("SponsoredOrganization"); - - b.Navigation("SponsoringOrganization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("OrganizationUsers") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("OrganizationUsers") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Transactions") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Transactions") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("Provider"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.UserSignatureKeyPair", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", "Task") - .WithMany() - .HasForeignKey("TaskId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("Task"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.NotificationStatus", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", "Notification") - .WithMany() - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany("ApiKeys") - .HasForeignKey("ServiceAccountId"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.SecretVersion", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "EditorOrganizationUser") - .WithMany() - .HasForeignKey("EditorOrganizationUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "EditorServiceAccount") - .WithMany() - .HasForeignKey("EditorServiceAccountId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "Secret") - .WithMany("SecretVersions") - .HasForeignKey("SecretId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EditorOrganizationUser"); - - b.Navigation("EditorServiceAccount"); - - b.Navigation("Secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Ciphers") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Ciphers") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Folder", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Folders") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher") - .WithMany() - .HasForeignKey("CipherId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Cipher"); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("ProjectSecret", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", null) - .WithMany() - .HasForeignKey("ProjectsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", null) - .WithMany() - .HasForeignKey("SecretsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedProject"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedSecret"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedServiceAccountId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedServiceAccount"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("ServiceAccountAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany("ProjectAccessPolicies") - .HasForeignKey("ServiceAccountId"); - - b.Navigation("GrantedProject"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("ServiceAccountAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany() - .HasForeignKey("ServiceAccountId"); - - b.Navigation("GrantedSecret"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedProject"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedSecret"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedServiceAccountId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedServiceAccount"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => - { - b.Navigation("ApiKeys"); - - b.Navigation("Ciphers"); - - b.Navigation("Collections"); - - b.Navigation("Connections"); - - b.Navigation("Domains"); - - b.Navigation("Groups"); - - b.Navigation("OrganizationUsers"); - - b.Navigation("Policies"); - - b.Navigation("SsoConfigs"); - - b.Navigation("SsoUsers"); - - b.Navigation("Transactions"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.Navigation("CollectionCiphers"); - - b.Navigation("CollectionGroups"); - - b.Navigation("CollectionUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.Navigation("GroupUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.Navigation("CollectionUsers"); - - b.Navigation("GroupUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => - { - b.Navigation("Ciphers"); - - b.Navigation("Folders"); - - b.Navigation("OrganizationUsers"); - - b.Navigation("SsoUsers"); - - b.Navigation("Transactions"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.Navigation("GroupAccessPolicies"); - - b.Navigation("ServiceAccountAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.Navigation("GroupAccessPolicies"); - - b.Navigation("SecretVersions"); - - b.Navigation("ServiceAccountAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.Navigation("ApiKeys"); - - b.Navigation("GroupAccessPolicies"); - - b.Navigation("ProjectAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.Navigation("CollectionCiphers"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.cs b/util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.cs deleted file mode 100644 index d738230662..0000000000 --- a/util/MySqlMigrations/Migrations/20251231233256_DefaultCollectionSemaphore.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Bit.MySqlMigrations.Migrations; - -/// -public partial class DefaultCollectionSemaphore : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "DefaultCollectionSemaphore", - columns: table => new - { - OrganizationUserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - CreationDate = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_DefaultCollectionSemaphore", x => x.OrganizationUserId); - table.ForeignKey( - name: "FK_DefaultCollectionSemaphore_OrganizationUser_OrganizationUser~", - column: x => x.OrganizationUserId, - principalTable: "OrganizationUser", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "DefaultCollectionSemaphore"); - } -} diff --git a/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs index 891decef79..53fccb37a0 100644 --- a/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -69,19 +69,6 @@ namespace Bit.MySqlMigrations.Migrations b.ToTable("OrganizationMemberBaseDetails"); }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.Property("OrganizationUserId") - .HasColumnType("char(36)"); - - b.Property("CreationDate") - .HasColumnType("datetime(6)"); - - b.HasKey("OrganizationUserId"); - - b.ToTable("DefaultCollectionSemaphore", (string)null); - }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => { b.Property("Id") @@ -2617,17 +2604,6 @@ namespace Bit.MySqlMigrations.Migrations b.HasDiscriminator().HasValue("user_service_account"); }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationUser"); - }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => { b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") diff --git a/util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.Designer.cs b/util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.Designer.cs deleted file mode 100644 index 0f1d0cc9db..0000000000 --- a/util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.Designer.cs +++ /dev/null @@ -1,3473 +0,0 @@ -// -using System; -using Bit.Infrastructure.EntityFramework.Repositories; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Bit.PostgresMigrations.Migrations -{ - [DbContext(typeof(DatabaseContext))] - [Migration("20251231233251_DefaultCollectionSemaphore")] - partial class DefaultCollectionSemaphore - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("Npgsql:CollationDefinition:postgresIndetermanisticCollation", "en-u-ks-primary,en-u-ks-primary,icu,False") - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Bit.Core.Dirt.Reports.Models.Data.OrganizationMemberBaseDetail", b => - { - b.Property("CipherId") - .HasColumnType("uuid"); - - b.Property("CollectionId") - .HasColumnType("uuid"); - - b.Property("CollectionName") - .HasColumnType("text"); - - b.Property("Email") - .HasColumnType("text"); - - b.Property("GroupId") - .HasColumnType("uuid"); - - b.Property("GroupName") - .HasColumnType("text"); - - b.Property("HidePasswords") - .HasColumnType("boolean"); - - b.Property("Manage") - .HasColumnType("boolean"); - - b.Property("ReadOnly") - .HasColumnType("boolean"); - - b.Property("ResetPasswordKey") - .HasColumnType("text"); - - b.Property("TwoFactorProviders") - .HasColumnType("text"); - - b.Property("UserGuid") - .HasColumnType("uuid"); - - b.Property("UserName") - .HasColumnType("text"); - - b.Property("UsesKeyConnector") - .HasColumnType("boolean"); - - b.ToTable("OrganizationMemberBaseDetails"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.Property("OrganizationUserId") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("OrganizationUserId"); - - b.ToTable("DefaultCollectionSemaphore", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AllowAdminAccessToAllCollectionItems") - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("BillingEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("BusinessAddress1") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("BusinessAddress2") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("BusinessAddress3") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("BusinessCountry") - .HasMaxLength(2) - .HasColumnType("character varying(2)"); - - b.Property("BusinessName") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("BusinessTaxNumber") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("ExpirationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Gateway") - .HasColumnType("smallint"); - - b.Property("GatewayCustomerId") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("GatewaySubscriptionId") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("Identifier") - .HasMaxLength(50) - .HasColumnType("character varying(50)") - .UseCollation("postgresIndetermanisticCollation"); - - b.Property("LicenseKey") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("LimitCollectionCreation") - .HasColumnType("boolean"); - - b.Property("LimitCollectionDeletion") - .HasColumnType("boolean"); - - b.Property("LimitItemDeletion") - .HasColumnType("boolean"); - - b.Property("MaxAutoscaleSeats") - .HasColumnType("integer"); - - b.Property("MaxAutoscaleSmSeats") - .HasColumnType("integer"); - - b.Property("MaxAutoscaleSmServiceAccounts") - .HasColumnType("integer"); - - b.Property("MaxCollections") - .HasColumnType("smallint"); - - b.Property("MaxStorageGb") - .HasColumnType("smallint"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("OwnersNotifiedOfAutoscaling") - .HasColumnType("timestamp with time zone"); - - b.Property("Plan") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("PlanType") - .HasColumnType("smallint"); - - b.Property("PrivateKey") - .HasColumnType("text"); - - b.Property("PublicKey") - .HasColumnType("text"); - - b.Property("ReferenceData") - .HasColumnType("text"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Seats") - .HasColumnType("integer"); - - b.Property("SelfHost") - .HasColumnType("boolean"); - - b.Property("SmSeats") - .HasColumnType("integer"); - - b.Property("SmServiceAccounts") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Storage") - .HasColumnType("bigint"); - - b.Property("SyncSeats") - .HasColumnType("boolean"); - - b.Property("TwoFactorProviders") - .HasColumnType("text"); - - b.Property("Use2fa") - .HasColumnType("boolean"); - - b.Property("UseAdminSponsoredFamilies") - .HasColumnType("boolean"); - - b.Property("UseApi") - .HasColumnType("boolean"); - - b.Property("UseAutomaticUserConfirmation") - .HasColumnType("boolean"); - - b.Property("UseCustomPermissions") - .HasColumnType("boolean"); - - b.Property("UseDirectory") - .HasColumnType("boolean"); - - b.Property("UseEvents") - .HasColumnType("boolean"); - - b.Property("UseGroups") - .HasColumnType("boolean"); - - b.Property("UseKeyConnector") - .HasColumnType("boolean"); - - b.Property("UseOrganizationDomains") - .HasColumnType("boolean"); - - b.Property("UsePasswordManager") - .HasColumnType("boolean"); - - b.Property("UsePhishingBlocker") - .HasColumnType("boolean"); - - b.Property("UsePolicies") - .HasColumnType("boolean"); - - b.Property("UseResetPassword") - .HasColumnType("boolean"); - - b.Property("UseRiskInsights") - .HasColumnType("boolean"); - - b.Property("UseScim") - .HasColumnType("boolean"); - - b.Property("UseSecretsManager") - .HasColumnType("boolean"); - - b.Property("UseSso") - .HasColumnType("boolean"); - - b.Property("UseTotp") - .HasColumnType("boolean"); - - b.Property("UsersGetPremium") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("Id", "Enabled"); - - NpgsqlIndexBuilderExtensions.IncludeProperties(b.HasIndex("Id", "Enabled"), new[] { "UseTotp", "UsersGetPremium" }); - - b.ToTable("Organization", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("Configuration") - .HasColumnType("text"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "Type") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationIntegration", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegrationConfiguration", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("Configuration") - .HasColumnType("text"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EventType") - .HasColumnType("integer"); - - b.Property("Filters") - .HasColumnType("text"); - - b.Property("OrganizationIntegrationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Template") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationIntegrationId"); - - b.ToTable("OrganizationIntegrationConfiguration", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "Type") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Policy", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("BillingEmail") - .HasColumnType("text"); - - b.Property("BillingPhone") - .HasColumnType("text"); - - b.Property("BusinessAddress1") - .HasColumnType("text"); - - b.Property("BusinessAddress2") - .HasColumnType("text"); - - b.Property("BusinessAddress3") - .HasColumnType("text"); - - b.Property("BusinessCountry") - .HasColumnType("text"); - - b.Property("BusinessName") - .HasColumnType("text"); - - b.Property("BusinessTaxNumber") - .HasColumnType("text"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("DiscountId") - .HasColumnType("text"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("Gateway") - .HasColumnType("smallint"); - - b.Property("GatewayCustomerId") - .HasColumnType("text"); - - b.Property("GatewaySubscriptionId") - .HasColumnType("text"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UseEvents") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.ToTable("Provider", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Settings") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ProviderId"); - - b.ToTable("ProviderOrganization", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Email") - .HasColumnType("text"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("Permissions") - .HasColumnType("text"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.HasIndex("UserId"); - - b.ToTable("ProviderUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AccessCode") - .HasMaxLength(25) - .HasColumnType("character varying(25)"); - - b.Property("Approved") - .HasColumnType("boolean"); - - b.Property("AuthenticationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("MasterPasswordHash") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("PublicKey") - .HasColumnType("text"); - - b.Property("RequestCountryName") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("RequestDeviceIdentifier") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("RequestDeviceType") - .HasColumnType("smallint"); - - b.Property("RequestIpAddress") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("ResponseDate") - .HasColumnType("timestamp with time zone"); - - b.Property("ResponseDeviceId") - .HasColumnType("uuid"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ResponseDeviceId"); - - b.HasIndex("UserId"); - - b.ToTable("AuthRequest", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("GranteeId") - .HasColumnType("uuid"); - - b.Property("GrantorId") - .HasColumnType("uuid"); - - b.Property("KeyEncrypted") - .HasColumnType("text"); - - b.Property("LastNotificationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("RecoveryInitiatedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("WaitTimeDays") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("GranteeId"); - - b.HasIndex("GrantorId"); - - b.ToTable("EmergencyAccess", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClientId") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("ConsumedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Data") - .IsRequired() - .HasColumnType("text"); - - b.Property("Description") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("ExpirationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("SessionId") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("SubjectId") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.HasKey("Id") - .HasName("PK_Grant") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ExpirationDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Grant", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("SsoConfig", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("character varying(300)") - .UseCollation("postgresIndetermanisticCollation"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId"); - - b.HasIndex("OrganizationId", "ExternalId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - NpgsqlIndexBuilderExtensions.IncludeProperties(b.HasIndex("OrganizationId", "ExternalId"), new[] { "UserId" }); - - b.HasIndex("OrganizationId", "UserId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("SsoUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AaGuid") - .HasColumnType("uuid"); - - b.Property("Counter") - .HasColumnType("integer"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("CredentialId") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EncryptedPrivateKey") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EncryptedPublicKey") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("EncryptedUserKey") - .HasMaxLength(2000) - .HasColumnType("character varying(2000)"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("PublicKey") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SupportsPrf") - .HasColumnType("boolean"); - - b.Property("Type") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("WebAuthnCredential", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ClientOrganizationMigrationRecord", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("ExpirationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("GatewayCustomerId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("GatewaySubscriptionId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("MaxAutoscaleSeats") - .HasColumnType("integer"); - - b.Property("MaxStorageGb") - .HasColumnType("smallint"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("PlanType") - .HasColumnType("smallint"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("Seats") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId", "OrganizationId") - .IsUnique(); - - b.ToTable("ClientOrganizationMigrationRecord", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.OrganizationInstallation", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("InstallationId") - .HasColumnType("uuid"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("InstallationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationInstallation", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderInvoiceItem", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AssignedSeats") - .HasColumnType("integer"); - - b.Property("ClientId") - .HasColumnType("uuid"); - - b.Property("ClientName") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("Created") - .HasColumnType("timestamp with time zone"); - - b.Property("InvoiceId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("InvoiceNumber") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("PlanName") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("Total") - .HasColumnType("numeric"); - - b.Property("UsedSeats") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.ToTable("ProviderInvoiceItem", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderPlan", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AllocatedSeats") - .HasColumnType("integer"); - - b.Property("PlanType") - .HasColumnType("smallint"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("PurchasedSeats") - .HasColumnType("integer"); - - b.Property("SeatMinimum") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.HasIndex("Id", "PlanType") - .IsUnique(); - - b.ToTable("ProviderPlan", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationApplication", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("Applications") - .IsRequired() - .HasColumnType("text"); - - b.Property("ContentEncryptionKey") - .IsRequired() - .HasColumnType("text"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationApplication", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationReport", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("ApplicationAtRiskCount") - .HasColumnType("integer"); - - b.Property("ApplicationCount") - .HasColumnType("integer"); - - b.Property("ApplicationData") - .HasColumnType("text"); - - b.Property("ContentEncryptionKey") - .IsRequired() - .HasColumnType("text"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("CriticalApplicationAtRiskCount") - .HasColumnType("integer"); - - b.Property("CriticalApplicationCount") - .HasColumnType("integer"); - - b.Property("CriticalMemberAtRiskCount") - .HasColumnType("integer"); - - b.Property("CriticalMemberCount") - .HasColumnType("integer"); - - b.Property("CriticalPasswordAtRiskCount") - .HasColumnType("integer"); - - b.Property("CriticalPasswordCount") - .HasColumnType("integer"); - - b.Property("MemberAtRiskCount") - .HasColumnType("integer"); - - b.Property("MemberCount") - .HasColumnType("integer"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("PasswordAtRiskCount") - .HasColumnType("integer"); - - b.Property("PasswordCount") - .HasColumnType("integer"); - - b.Property("ReportData") - .IsRequired() - .HasColumnType("text"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SummaryData") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationReport", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.PasswordHealthReportApplication", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Uri") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("PasswordHealthReportApplication", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Cache", b => - { - b.Property("Id") - .HasMaxLength(449) - .HasColumnType("character varying(449)"); - - b.Property("AbsoluteExpiration") - .HasColumnType("timestamp with time zone"); - - b.Property("ExpiresAtTime") - .HasColumnType("timestamp with time zone"); - - b.Property("SlidingExpirationInSeconds") - .HasColumnType("bigint"); - - b.Property("Value") - .IsRequired() - .HasColumnType("bytea"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ExpiresAtTime") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Cache", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("DefaultUserCollectionEmail") - .HasColumnType("text"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("Collection", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => - { - b.Property("CollectionId") - .HasColumnType("uuid"); - - b.Property("CipherId") - .HasColumnType("uuid"); - - b.HasKey("CollectionId", "CipherId"); - - b.HasIndex("CipherId"); - - b.ToTable("CollectionCipher", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => - { - b.Property("CollectionId") - .HasColumnType("uuid"); - - b.Property("GroupId") - .HasColumnType("uuid"); - - b.Property("HidePasswords") - .HasColumnType("boolean"); - - b.Property("Manage") - .HasColumnType("boolean"); - - b.Property("ReadOnly") - .HasColumnType("boolean"); - - b.HasKey("CollectionId", "GroupId"); - - b.HasIndex("GroupId"); - - b.ToTable("CollectionGroups"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => - { - b.Property("CollectionId") - .HasColumnType("uuid"); - - b.Property("OrganizationUserId") - .HasColumnType("uuid"); - - b.Property("HidePasswords") - .HasColumnType("boolean"); - - b.Property("Manage") - .HasColumnType("boolean"); - - b.Property("ReadOnly") - .HasColumnType("boolean"); - - b.HasKey("CollectionId", "OrganizationUserId"); - - b.HasIndex("OrganizationUserId"); - - b.ToTable("CollectionUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Active") - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EncryptedPrivateKey") - .HasColumnType("text"); - - b.Property("EncryptedPublicKey") - .HasColumnType("text"); - - b.Property("EncryptedUserKey") - .HasColumnType("text"); - - b.Property("Identifier") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("PushToken") - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("Identifier") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "Identifier") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Device", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Event", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("ActingUserId") - .HasColumnType("uuid"); - - b.Property("CipherId") - .HasColumnType("uuid"); - - b.Property("CollectionId") - .HasColumnType("uuid"); - - b.Property("Date") - .HasColumnType("timestamp with time zone"); - - b.Property("DeviceType") - .HasColumnType("smallint"); - - b.Property("DomainName") - .HasColumnType("text"); - - b.Property("GrantedServiceAccountId") - .HasColumnType("uuid"); - - b.Property("GroupId") - .HasColumnType("uuid"); - - b.Property("InstallationId") - .HasColumnType("uuid"); - - b.Property("IpAddress") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("OrganizationUserId") - .HasColumnType("uuid"); - - b.Property("PolicyId") - .HasColumnType("uuid"); - - b.Property("ProjectId") - .HasColumnType("uuid"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("ProviderOrganizationId") - .HasColumnType("uuid"); - - b.Property("ProviderUserId") - .HasColumnType("uuid"); - - b.Property("SecretId") - .HasColumnType("uuid"); - - b.Property("ServiceAccountId") - .HasColumnType("uuid"); - - b.Property("SystemUser") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("integer"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId") - .HasDatabaseName("IX_Event_DateOrganizationIdUserId") - .HasAnnotation("SqlServer:Clustered", false) - .HasAnnotation("SqlServer:Include", new[] { "ServiceAccountId", "GrantedServiceAccountId" }); - - b.ToTable("Event", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("Group", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => - { - b.Property("GroupId") - .HasColumnType("uuid"); - - b.Property("OrganizationUserId") - .HasColumnType("uuid"); - - b.HasKey("GroupId", "OrganizationUserId"); - - b.HasIndex("OrganizationUserId"); - - b.ToTable("GroupUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("ApiKey") - .IsRequired() - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationApiKey", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("Config") - .HasColumnType("text"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationConnection", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("DomainName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)"); - - b.Property("JobRunCount") - .HasColumnType("integer"); - - b.Property("LastCheckedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("NextRunDate") - .HasColumnType("timestamp with time zone"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("Txt") - .IsRequired() - .HasColumnType("text"); - - b.Property("VerifiedDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationDomain", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("FriendlyName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("IsAdminInitiated") - .HasColumnType("boolean"); - - b.Property("LastSyncDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Notes") - .HasColumnType("text"); - - b.Property("OfferedToEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PlanSponsorshipType") - .HasColumnType("smallint"); - - b.Property("SponsoredOrganizationId") - .HasColumnType("uuid"); - - b.Property("SponsoringOrganizationId") - .HasColumnType("uuid"); - - b.Property("SponsoringOrganizationUserId") - .HasColumnType("uuid"); - - b.Property("ToDelete") - .HasColumnType("boolean"); - - b.Property("ValidUntil") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.HasIndex("SponsoredOrganizationId"); - - b.HasIndex("SponsoringOrganizationId"); - - b.HasIndex("SponsoringOrganizationUserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationSponsorship", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AccessSecretsManager") - .HasColumnType("boolean"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("Permissions") - .HasColumnType("text"); - - b.Property("ResetPasswordKey") - .HasColumnType("text"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AccessCount") - .HasColumnType("integer"); - - b.Property("CipherId") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("DeletionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Disabled") - .HasColumnType("boolean"); - - b.Property("Emails") - .HasMaxLength(1024) - .HasColumnType("character varying(1024)"); - - b.Property("ExpirationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("HideEmail") - .HasColumnType("boolean"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("MaxAccessCount") - .HasColumnType("integer"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("Password") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("DeletionDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId"); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Send", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.TaxRate", b => - { - b.Property("Id") - .HasMaxLength(40) - .HasColumnType("character varying(40)"); - - b.Property("Active") - .HasColumnType("boolean"); - - b.Property("Country") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("PostalCode") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("Rate") - .HasColumnType("numeric"); - - b.Property("State") - .HasMaxLength(2) - .HasColumnType("character varying(2)"); - - b.HasKey("Id"); - - b.ToTable("TaxRate", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("Amount") - .HasColumnType("numeric"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Details") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Gateway") - .HasColumnType("smallint"); - - b.Property("GatewayId") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("PaymentMethodType") - .HasColumnType("smallint"); - - b.Property("ProviderId") - .HasColumnType("uuid"); - - b.Property("Refunded") - .HasColumnType("boolean"); - - b.Property("RefundedAmount") - .HasColumnType("numeric"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ProviderId"); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "OrganizationId", "CreationDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Transaction", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("AccountRevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("ApiKey") - .IsRequired() - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("AvatarColor") - .HasMaxLength(7) - .HasColumnType("character varying(7)"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Culture") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("character varying(10)"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .UseCollation("postgresIndetermanisticCollation"); - - b.Property("EmailVerified") - .HasColumnType("boolean"); - - b.Property("EquivalentDomains") - .HasColumnType("text"); - - b.Property("ExcludedGlobalEquivalentDomains") - .HasColumnType("text"); - - b.Property("FailedLoginCount") - .HasColumnType("integer"); - - b.Property("ForcePasswordReset") - .HasColumnType("boolean"); - - b.Property("Gateway") - .HasColumnType("smallint"); - - b.Property("GatewayCustomerId") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("GatewaySubscriptionId") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("Kdf") - .HasColumnType("smallint"); - - b.Property("KdfIterations") - .HasColumnType("integer"); - - b.Property("KdfMemory") - .HasColumnType("integer"); - - b.Property("KdfParallelism") - .HasColumnType("integer"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("LastEmailChangeDate") - .HasColumnType("timestamp with time zone"); - - b.Property("LastFailedLoginDate") - .HasColumnType("timestamp with time zone"); - - b.Property("LastKdfChangeDate") - .HasColumnType("timestamp with time zone"); - - b.Property("LastKeyRotationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("LastPasswordChangeDate") - .HasColumnType("timestamp with time zone"); - - b.Property("LicenseKey") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("MasterPassword") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("MasterPasswordHint") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("MaxStorageGb") - .HasColumnType("smallint"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("Premium") - .HasColumnType("boolean"); - - b.Property("PremiumExpirationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("PrivateKey") - .HasColumnType("text"); - - b.Property("PublicKey") - .HasColumnType("text"); - - b.Property("ReferenceData") - .HasColumnType("text"); - - b.Property("RenewalReminderDate") - .HasColumnType("timestamp with time zone"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("SecurityState") - .HasColumnType("text"); - - b.Property("SecurityVersion") - .HasColumnType("integer"); - - b.Property("SignedPublicKey") - .HasColumnType("text"); - - b.Property("Storage") - .HasColumnType("bigint"); - - b.Property("TwoFactorProviders") - .HasColumnType("text"); - - b.Property("TwoFactorRecoveryCode") - .HasMaxLength(32) - .HasColumnType("character varying(32)"); - - b.Property("UsesKeyConnector") - .HasColumnType("boolean"); - - b.Property("VerifyDevices") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.HasIndex("Email") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("Premium", "PremiumExpirationDate", "RenewalReminderDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("User", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.UserSignatureKeyPair", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("SignatureAlgorithm") - .HasColumnType("smallint"); - - b.Property("SigningKey") - .IsRequired() - .HasColumnType("text"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("VerifyingKey") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("UserSignatureKeyPair", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("Body") - .HasMaxLength(3000) - .HasColumnType("character varying(3000)"); - - b.Property("ClientType") - .HasColumnType("smallint"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Global") - .HasColumnType("boolean"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("Priority") - .HasColumnType("smallint"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("TaskId") - .HasColumnType("uuid"); - - b.Property("Title") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("TaskId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("ClientType", "Global", "UserId", "OrganizationId", "Priority", "CreationDate") - .IsDescending(false, false, false, false, true, true) - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Notification", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.NotificationStatus", b => - { - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("NotificationId") - .HasColumnType("uuid"); - - b.Property("DeletedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("ReadDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("UserId", "NotificationId") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("NotificationId"); - - b.ToTable("NotificationStatus", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Platform.Installation", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(150) - .HasColumnType("character varying(150)"); - - b.Property("LastActivityDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Installation", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Discriminator") - .IsRequired() - .HasMaxLength(34) - .HasColumnType("character varying(34)"); - - b.Property("Read") - .HasColumnType("boolean"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Write") - .HasColumnType("boolean"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.ToTable("AccessPolicy", (string)null); - - b.HasDiscriminator().HasValue("AccessPolicy"); - - b.UseTphMappingStrategy(); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("ClientSecretHash") - .HasMaxLength(128) - .HasColumnType("character varying(128)"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("EncryptedPayload") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ExpireAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Key") - .IsRequired() - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Scope") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("character varying(4000)"); - - b.Property("ServiceAccountId") - .HasColumnType("uuid"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ServiceAccountId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("ApiKey", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("DeletedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("DeletedDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Project", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("DeletedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("Note") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("DeletedDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Secret", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.SecretVersion", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("EditorOrganizationUserId") - .HasColumnType("uuid"); - - b.Property("EditorServiceAccountId") - .HasColumnType("uuid"); - - b.Property("SecretId") - .HasColumnType("uuid"); - - b.Property("Value") - .IsRequired() - .HasColumnType("text"); - - b.Property("VersionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("EditorOrganizationUserId") - .HasDatabaseName("IX_SecretVersion_EditorOrganizationUserId"); - - b.HasIndex("EditorServiceAccountId") - .HasDatabaseName("IX_SecretVersion_EditorServiceAccountId"); - - b.HasIndex("SecretId") - .HasDatabaseName("IX_SecretVersion_SecretId"); - - b.ToTable("SecretVersion"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("ServiceAccount", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("ArchivedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Attachments") - .HasColumnType("text"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("DeletedDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Favorites") - .HasColumnType("text"); - - b.Property("Folders") - .HasColumnType("text"); - - b.Property("Key") - .HasColumnType("text"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("Reprompt") - .HasColumnType("smallint"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("UserId"); - - b.ToTable("Cipher", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Folder", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("Folder", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", b => - { - b.Property("Id") - .HasColumnType("uuid"); - - b.Property("CipherId") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("OrganizationId") - .HasColumnType("uuid"); - - b.Property("RevisionDate") - .HasColumnType("timestamp with time zone"); - - b.Property("Status") - .HasColumnType("smallint"); - - b.Property("Type") - .HasColumnType("smallint"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("CipherId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("SecurityTask", (string)null); - }); - - modelBuilder.Entity("ProjectSecret", b => - { - b.Property("ProjectsId") - .HasColumnType("uuid"); - - b.Property("SecretsId") - .HasColumnType("uuid"); - - b.HasKey("ProjectsId", "SecretsId"); - - b.HasIndex("SecretsId"); - - b.ToTable("ProjectSecret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedProjectId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedSecretId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedServiceAccountId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedServiceAccountId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_service_account"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedProjectId"); - - b.Property("ServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("ServiceAccountId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("ServiceAccountId"); - - b.HasDiscriminator().HasValue("service_account_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedSecretId"); - - b.Property("ServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("ServiceAccountId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("ServiceAccountId"); - - b.HasDiscriminator().HasValue("service_account_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedProjectId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedSecretId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("GrantedServiceAccountId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("uuid") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedServiceAccountId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_service_account"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegrationConfiguration", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", "OrganizationIntegration") - .WithMany() - .HasForeignKey("OrganizationIntegrationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationIntegration"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Policies") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Provider"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Device", "ResponseDevice") - .WithMany() - .HasForeignKey("ResponseDeviceId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("ResponseDevice"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantee") - .WithMany() - .HasForeignKey("GranteeId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantor") - .WithMany() - .HasForeignKey("GrantorId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Grantee"); - - b.Navigation("Grantor"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("SsoConfigs") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("SsoUsers") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("SsoUsers") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.OrganizationInstallation", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Platform.Installation", "Installation") - .WithMany() - .HasForeignKey("InstallationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Installation"); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderInvoiceItem", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderPlan", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationApplication", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationReport", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.PasswordHealthReportApplication", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Collections") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher") - .WithMany("CollectionCiphers") - .HasForeignKey("CipherId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionCiphers") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Cipher"); - - b.Navigation("Collection"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionGroups") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Collection"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionUsers") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany("CollectionUsers") - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Collection"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Groups") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany("GroupUsers") - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany("GroupUsers") - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Group"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("ApiKeys") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Connections") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Domains") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "SponsoredOrganization") - .WithMany() - .HasForeignKey("SponsoredOrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "SponsoringOrganization") - .WithMany() - .HasForeignKey("SponsoringOrganizationId"); - - b.Navigation("SponsoredOrganization"); - - b.Navigation("SponsoringOrganization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("OrganizationUsers") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("OrganizationUsers") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Transactions") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Transactions") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("Provider"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.UserSignatureKeyPair", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", "Task") - .WithMany() - .HasForeignKey("TaskId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("Task"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.NotificationStatus", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", "Notification") - .WithMany() - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany("ApiKeys") - .HasForeignKey("ServiceAccountId"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.SecretVersion", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "EditorOrganizationUser") - .WithMany() - .HasForeignKey("EditorOrganizationUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "EditorServiceAccount") - .WithMany() - .HasForeignKey("EditorServiceAccountId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "Secret") - .WithMany("SecretVersions") - .HasForeignKey("SecretId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EditorOrganizationUser"); - - b.Navigation("EditorServiceAccount"); - - b.Navigation("Secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Ciphers") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Ciphers") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Folder", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Folders") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher") - .WithMany() - .HasForeignKey("CipherId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Cipher"); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("ProjectSecret", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", null) - .WithMany() - .HasForeignKey("ProjectsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", null) - .WithMany() - .HasForeignKey("SecretsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedProject"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedSecret"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedServiceAccountId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedServiceAccount"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("ServiceAccountAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany("ProjectAccessPolicies") - .HasForeignKey("ServiceAccountId"); - - b.Navigation("GrantedProject"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("ServiceAccountAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany() - .HasForeignKey("ServiceAccountId"); - - b.Navigation("GrantedSecret"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedProject"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedSecret"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedServiceAccountId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedServiceAccount"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => - { - b.Navigation("ApiKeys"); - - b.Navigation("Ciphers"); - - b.Navigation("Collections"); - - b.Navigation("Connections"); - - b.Navigation("Domains"); - - b.Navigation("Groups"); - - b.Navigation("OrganizationUsers"); - - b.Navigation("Policies"); - - b.Navigation("SsoConfigs"); - - b.Navigation("SsoUsers"); - - b.Navigation("Transactions"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.Navigation("CollectionCiphers"); - - b.Navigation("CollectionGroups"); - - b.Navigation("CollectionUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.Navigation("GroupUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.Navigation("CollectionUsers"); - - b.Navigation("GroupUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => - { - b.Navigation("Ciphers"); - - b.Navigation("Folders"); - - b.Navigation("OrganizationUsers"); - - b.Navigation("SsoUsers"); - - b.Navigation("Transactions"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.Navigation("GroupAccessPolicies"); - - b.Navigation("ServiceAccountAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.Navigation("GroupAccessPolicies"); - - b.Navigation("SecretVersions"); - - b.Navigation("ServiceAccountAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.Navigation("ApiKeys"); - - b.Navigation("GroupAccessPolicies"); - - b.Navigation("ProjectAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.Navigation("CollectionCiphers"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.cs b/util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.cs deleted file mode 100644 index 39121813ab..0000000000 --- a/util/PostgresMigrations/Migrations/20251231233251_DefaultCollectionSemaphore.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Bit.PostgresMigrations.Migrations; - -/// -public partial class DefaultCollectionSemaphore : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "DefaultCollectionSemaphore", - columns: table => new - { - OrganizationUserId = table.Column(type: "uuid", nullable: false), - CreationDate = table.Column(type: "timestamp with time zone", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_DefaultCollectionSemaphore", x => x.OrganizationUserId); - table.ForeignKey( - name: "FK_DefaultCollectionSemaphore_OrganizationUser_OrganizationUse~", - column: x => x.OrganizationUserId, - principalTable: "OrganizationUser", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "DefaultCollectionSemaphore"); - } -} diff --git a/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs index 43179226f5..6d5715bcec 100644 --- a/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -70,19 +70,6 @@ namespace Bit.PostgresMigrations.Migrations b.ToTable("OrganizationMemberBaseDetails"); }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.Property("OrganizationUserId") - .HasColumnType("uuid"); - - b.Property("CreationDate") - .HasColumnType("timestamp with time zone"); - - b.HasKey("OrganizationUserId"); - - b.ToTable("DefaultCollectionSemaphore", (string)null); - }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => { b.Property("Id") @@ -2623,17 +2610,6 @@ namespace Bit.PostgresMigrations.Migrations b.HasDiscriminator().HasValue("user_service_account"); }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationUser"); - }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => { b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") diff --git a/util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.Designer.cs b/util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.Designer.cs deleted file mode 100644 index 1afaf2b4dd..0000000000 --- a/util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.Designer.cs +++ /dev/null @@ -1,3456 +0,0 @@ -// -using System; -using Bit.Infrastructure.EntityFramework.Repositories; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Bit.SqliteMigrations.Migrations -{ - [DbContext(typeof(DatabaseContext))] - [Migration("20251231233301_DefaultCollectionSemaphore")] - partial class DefaultCollectionSemaphore - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.8"); - - modelBuilder.Entity("Bit.Core.Dirt.Reports.Models.Data.OrganizationMemberBaseDetail", b => - { - b.Property("CipherId") - .HasColumnType("TEXT"); - - b.Property("CollectionId") - .HasColumnType("TEXT"); - - b.Property("CollectionName") - .HasColumnType("TEXT"); - - b.Property("Email") - .HasColumnType("TEXT"); - - b.Property("GroupId") - .HasColumnType("TEXT"); - - b.Property("GroupName") - .HasColumnType("TEXT"); - - b.Property("HidePasswords") - .HasColumnType("INTEGER"); - - b.Property("Manage") - .HasColumnType("INTEGER"); - - b.Property("ReadOnly") - .HasColumnType("INTEGER"); - - b.Property("ResetPasswordKey") - .HasColumnType("TEXT"); - - b.Property("TwoFactorProviders") - .HasColumnType("TEXT"); - - b.Property("UserGuid") - .HasColumnType("TEXT"); - - b.Property("UserName") - .HasColumnType("TEXT"); - - b.Property("UsesKeyConnector") - .HasColumnType("INTEGER"); - - b.ToTable("OrganizationMemberBaseDetails"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.Property("OrganizationUserId") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.HasKey("OrganizationUserId"); - - b.ToTable("DefaultCollectionSemaphore", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AllowAdminAccessToAllCollectionItems") - .HasColumnType("INTEGER") - .HasDefaultValue(true); - - b.Property("BillingEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("BusinessAddress1") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("BusinessAddress2") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("BusinessAddress3") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("BusinessCountry") - .HasMaxLength(2) - .HasColumnType("TEXT"); - - b.Property("BusinessName") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("BusinessTaxNumber") - .HasMaxLength(30) - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Enabled") - .HasColumnType("INTEGER"); - - b.Property("ExpirationDate") - .HasColumnType("TEXT"); - - b.Property("Gateway") - .HasColumnType("INTEGER"); - - b.Property("GatewayCustomerId") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("GatewaySubscriptionId") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("Identifier") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("LicenseKey") - .HasMaxLength(100) - .HasColumnType("TEXT"); - - b.Property("LimitCollectionCreation") - .HasColumnType("INTEGER"); - - b.Property("LimitCollectionDeletion") - .HasColumnType("INTEGER"); - - b.Property("LimitItemDeletion") - .HasColumnType("INTEGER"); - - b.Property("MaxAutoscaleSeats") - .HasColumnType("INTEGER"); - - b.Property("MaxAutoscaleSmSeats") - .HasColumnType("INTEGER"); - - b.Property("MaxAutoscaleSmServiceAccounts") - .HasColumnType("INTEGER"); - - b.Property("MaxCollections") - .HasColumnType("INTEGER"); - - b.Property("MaxStorageGb") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("OwnersNotifiedOfAutoscaling") - .HasColumnType("TEXT"); - - b.Property("Plan") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("PlanType") - .HasColumnType("INTEGER"); - - b.Property("PrivateKey") - .HasColumnType("TEXT"); - - b.Property("PublicKey") - .HasColumnType("TEXT"); - - b.Property("ReferenceData") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Seats") - .HasColumnType("INTEGER"); - - b.Property("SelfHost") - .HasColumnType("INTEGER"); - - b.Property("SmSeats") - .HasColumnType("INTEGER"); - - b.Property("SmServiceAccounts") - .HasColumnType("INTEGER"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.Property("Storage") - .HasColumnType("INTEGER"); - - b.Property("SyncSeats") - .HasColumnType("INTEGER"); - - b.Property("TwoFactorProviders") - .HasColumnType("TEXT"); - - b.Property("Use2fa") - .HasColumnType("INTEGER"); - - b.Property("UseAdminSponsoredFamilies") - .HasColumnType("INTEGER"); - - b.Property("UseApi") - .HasColumnType("INTEGER"); - - b.Property("UseAutomaticUserConfirmation") - .HasColumnType("INTEGER"); - - b.Property("UseCustomPermissions") - .HasColumnType("INTEGER"); - - b.Property("UseDirectory") - .HasColumnType("INTEGER"); - - b.Property("UseEvents") - .HasColumnType("INTEGER"); - - b.Property("UseGroups") - .HasColumnType("INTEGER"); - - b.Property("UseKeyConnector") - .HasColumnType("INTEGER"); - - b.Property("UseOrganizationDomains") - .HasColumnType("INTEGER"); - - b.Property("UsePasswordManager") - .HasColumnType("INTEGER"); - - b.Property("UsePhishingBlocker") - .HasColumnType("INTEGER"); - - b.Property("UsePolicies") - .HasColumnType("INTEGER"); - - b.Property("UseResetPassword") - .HasColumnType("INTEGER"); - - b.Property("UseRiskInsights") - .HasColumnType("INTEGER"); - - b.Property("UseScim") - .HasColumnType("INTEGER"); - - b.Property("UseSecretsManager") - .HasColumnType("INTEGER"); - - b.Property("UseSso") - .HasColumnType("INTEGER"); - - b.Property("UseTotp") - .HasColumnType("INTEGER"); - - b.Property("UsersGetPremium") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("Id", "Enabled") - .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp", "UsersGetPremium" }); - - b.ToTable("Organization", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Configuration") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "Type") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationIntegration", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegrationConfiguration", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Configuration") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("EventType") - .HasColumnType("INTEGER"); - - b.Property("Filters") - .HasColumnType("TEXT"); - - b.Property("OrganizationIntegrationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Template") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationIntegrationId"); - - b.ToTable("OrganizationIntegrationConfiguration", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Data") - .HasColumnType("TEXT"); - - b.Property("Enabled") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "Type") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Policy", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("BillingEmail") - .HasColumnType("TEXT"); - - b.Property("BillingPhone") - .HasColumnType("TEXT"); - - b.Property("BusinessAddress1") - .HasColumnType("TEXT"); - - b.Property("BusinessAddress2") - .HasColumnType("TEXT"); - - b.Property("BusinessAddress3") - .HasColumnType("TEXT"); - - b.Property("BusinessCountry") - .HasColumnType("TEXT"); - - b.Property("BusinessName") - .HasColumnType("TEXT"); - - b.Property("BusinessTaxNumber") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("DiscountId") - .HasColumnType("TEXT"); - - b.Property("Enabled") - .HasColumnType("INTEGER"); - - b.Property("Gateway") - .HasColumnType("INTEGER"); - - b.Property("GatewayCustomerId") - .HasColumnType("TEXT"); - - b.Property("GatewaySubscriptionId") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UseEvents") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.ToTable("Provider", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Settings") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ProviderId"); - - b.ToTable("ProviderOrganization", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Email") - .HasColumnType("TEXT"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("Permissions") - .HasColumnType("TEXT"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.HasIndex("UserId"); - - b.ToTable("ProviderUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AccessCode") - .HasMaxLength(25) - .HasColumnType("TEXT"); - - b.Property("Approved") - .HasColumnType("INTEGER"); - - b.Property("AuthenticationDate") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("MasterPasswordHash") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("PublicKey") - .HasColumnType("TEXT"); - - b.Property("RequestCountryName") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("RequestDeviceIdentifier") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("RequestDeviceType") - .HasColumnType("INTEGER"); - - b.Property("RequestIpAddress") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("ResponseDate") - .HasColumnType("TEXT"); - - b.Property("ResponseDeviceId") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ResponseDeviceId"); - - b.HasIndex("UserId"); - - b.ToTable("AuthRequest", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("GranteeId") - .HasColumnType("TEXT"); - - b.Property("GrantorId") - .HasColumnType("TEXT"); - - b.Property("KeyEncrypted") - .HasColumnType("TEXT"); - - b.Property("LastNotificationDate") - .HasColumnType("TEXT"); - - b.Property("RecoveryInitiatedDate") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("WaitTimeDays") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("GranteeId"); - - b.HasIndex("GrantorId"); - - b.ToTable("EmergencyAccess", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("ConsumedDate") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Data") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("ExpirationDate") - .HasColumnType("TEXT"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("SessionId") - .HasMaxLength(100) - .HasColumnType("TEXT"); - - b.Property("SubjectId") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasName("PK_Grant") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ExpirationDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("Key") - .IsUnique(); - - b.ToTable("Grant", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Data") - .HasColumnType("TEXT"); - - b.Property("Enabled") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("SsoConfig", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId"); - - b.HasIndex("OrganizationId", "ExternalId") - .IsUnique() - .HasAnnotation("Npgsql:IndexInclude", new[] { "UserId" }) - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId", "UserId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("SsoUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AaGuid") - .HasColumnType("TEXT"); - - b.Property("Counter") - .HasColumnType("INTEGER"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("CredentialId") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EncryptedPrivateKey") - .HasMaxLength(2000) - .HasColumnType("TEXT"); - - b.Property("EncryptedPublicKey") - .HasMaxLength(2000) - .HasColumnType("TEXT"); - - b.Property("EncryptedUserKey") - .HasMaxLength(2000) - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("PublicKey") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("SupportsPrf") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasMaxLength(20) - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("WebAuthnCredential", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ClientOrganizationMigrationRecord", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("ExpirationDate") - .HasColumnType("TEXT"); - - b.Property("GatewayCustomerId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("GatewaySubscriptionId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("MaxAutoscaleSeats") - .HasColumnType("INTEGER"); - - b.Property("MaxStorageGb") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("PlanType") - .HasColumnType("INTEGER"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("Seats") - .HasColumnType("INTEGER"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId", "OrganizationId") - .IsUnique(); - - b.ToTable("ClientOrganizationMigrationRecord", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.OrganizationInstallation", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("InstallationId") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("InstallationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationInstallation", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderInvoiceItem", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AssignedSeats") - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("TEXT"); - - b.Property("ClientName") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("Created") - .HasColumnType("TEXT"); - - b.Property("InvoiceId") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("InvoiceNumber") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("PlanName") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("Total") - .HasColumnType("TEXT"); - - b.Property("UsedSeats") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.ToTable("ProviderInvoiceItem", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderPlan", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AllocatedSeats") - .HasColumnType("INTEGER"); - - b.Property("PlanType") - .HasColumnType("INTEGER"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("PurchasedSeats") - .HasColumnType("INTEGER"); - - b.Property("SeatMinimum") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("ProviderId"); - - b.HasIndex("Id", "PlanType") - .IsUnique(); - - b.ToTable("ProviderPlan", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationApplication", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Applications") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ContentEncryptionKey") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationApplication", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationReport", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("ApplicationAtRiskCount") - .HasColumnType("INTEGER"); - - b.Property("ApplicationCount") - .HasColumnType("INTEGER"); - - b.Property("ApplicationData") - .HasColumnType("TEXT"); - - b.Property("ContentEncryptionKey") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("CriticalApplicationAtRiskCount") - .HasColumnType("INTEGER"); - - b.Property("CriticalApplicationCount") - .HasColumnType("INTEGER"); - - b.Property("CriticalMemberAtRiskCount") - .HasColumnType("INTEGER"); - - b.Property("CriticalMemberCount") - .HasColumnType("INTEGER"); - - b.Property("CriticalPasswordAtRiskCount") - .HasColumnType("INTEGER"); - - b.Property("CriticalPasswordCount") - .HasColumnType("INTEGER"); - - b.Property("MemberAtRiskCount") - .HasColumnType("INTEGER"); - - b.Property("MemberCount") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("PasswordAtRiskCount") - .HasColumnType("INTEGER"); - - b.Property("PasswordCount") - .HasColumnType("INTEGER"); - - b.Property("ReportData") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("SummaryData") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationReport", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.PasswordHealthReportApplication", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Uri") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("PasswordHealthReportApplication", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Cache", b => - { - b.Property("Id") - .HasMaxLength(449) - .HasColumnType("TEXT"); - - b.Property("AbsoluteExpiration") - .HasColumnType("TEXT"); - - b.Property("ExpiresAtTime") - .HasColumnType("TEXT"); - - b.Property("SlidingExpirationInSeconds") - .HasColumnType("INTEGER"); - - b.Property("Value") - .IsRequired() - .HasColumnType("BLOB"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ExpiresAtTime") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Cache", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("DefaultUserCollectionEmail") - .HasColumnType("TEXT"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("Collection", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => - { - b.Property("CollectionId") - .HasColumnType("TEXT"); - - b.Property("CipherId") - .HasColumnType("TEXT"); - - b.HasKey("CollectionId", "CipherId"); - - b.HasIndex("CipherId"); - - b.ToTable("CollectionCipher", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => - { - b.Property("CollectionId") - .HasColumnType("TEXT"); - - b.Property("GroupId") - .HasColumnType("TEXT"); - - b.Property("HidePasswords") - .HasColumnType("INTEGER"); - - b.Property("Manage") - .HasColumnType("INTEGER"); - - b.Property("ReadOnly") - .HasColumnType("INTEGER"); - - b.HasKey("CollectionId", "GroupId"); - - b.HasIndex("GroupId"); - - b.ToTable("CollectionGroups"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => - { - b.Property("CollectionId") - .HasColumnType("TEXT"); - - b.Property("OrganizationUserId") - .HasColumnType("TEXT"); - - b.Property("HidePasswords") - .HasColumnType("INTEGER"); - - b.Property("Manage") - .HasColumnType("INTEGER"); - - b.Property("ReadOnly") - .HasColumnType("INTEGER"); - - b.HasKey("CollectionId", "OrganizationUserId"); - - b.HasIndex("OrganizationUserId"); - - b.ToTable("CollectionUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Active") - .HasColumnType("INTEGER") - .HasDefaultValue(true); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("EncryptedPrivateKey") - .HasColumnType("TEXT"); - - b.Property("EncryptedPublicKey") - .HasColumnType("TEXT"); - - b.Property("EncryptedUserKey") - .HasColumnType("TEXT"); - - b.Property("Identifier") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("PushToken") - .HasMaxLength(255) - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Identifier") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "Identifier") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Device", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Event", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("ActingUserId") - .HasColumnType("TEXT"); - - b.Property("CipherId") - .HasColumnType("TEXT"); - - b.Property("CollectionId") - .HasColumnType("TEXT"); - - b.Property("Date") - .HasColumnType("TEXT"); - - b.Property("DeviceType") - .HasColumnType("INTEGER"); - - b.Property("DomainName") - .HasColumnType("TEXT"); - - b.Property("GrantedServiceAccountId") - .HasColumnType("TEXT"); - - b.Property("GroupId") - .HasColumnType("TEXT"); - - b.Property("InstallationId") - .HasColumnType("TEXT"); - - b.Property("IpAddress") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("OrganizationUserId") - .HasColumnType("TEXT"); - - b.Property("PolicyId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("ProviderOrganizationId") - .HasColumnType("TEXT"); - - b.Property("ProviderUserId") - .HasColumnType("TEXT"); - - b.Property("SecretId") - .HasColumnType("TEXT"); - - b.Property("ServiceAccountId") - .HasColumnType("TEXT"); - - b.Property("SystemUser") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId") - .HasDatabaseName("IX_Event_DateOrganizationIdUserId") - .HasAnnotation("SqlServer:Clustered", false) - .HasAnnotation("SqlServer:Include", new[] { "ServiceAccountId", "GrantedServiceAccountId" }); - - b.ToTable("Event", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("Group", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => - { - b.Property("GroupId") - .HasColumnType("TEXT"); - - b.Property("OrganizationUserId") - .HasColumnType("TEXT"); - - b.HasKey("GroupId", "OrganizationUserId"); - - b.HasIndex("OrganizationUserId"); - - b.ToTable("GroupUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("ApiKey") - .IsRequired() - .HasMaxLength(30) - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationApiKey", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Config") - .HasColumnType("TEXT"); - - b.Property("Enabled") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationConnection", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("DomainName") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("TEXT"); - - b.Property("JobRunCount") - .HasColumnType("INTEGER"); - - b.Property("LastCheckedDate") - .HasColumnType("TEXT"); - - b.Property("NextRunDate") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("Txt") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("VerifiedDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.ToTable("OrganizationDomain", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("FriendlyName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("IsAdminInitiated") - .HasColumnType("INTEGER"); - - b.Property("LastSyncDate") - .HasColumnType("TEXT"); - - b.Property("Notes") - .HasColumnType("TEXT"); - - b.Property("OfferedToEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PlanSponsorshipType") - .HasColumnType("INTEGER"); - - b.Property("SponsoredOrganizationId") - .HasColumnType("TEXT"); - - b.Property("SponsoringOrganizationId") - .HasColumnType("TEXT"); - - b.Property("SponsoringOrganizationUserId") - .HasColumnType("TEXT"); - - b.Property("ToDelete") - .HasColumnType("INTEGER"); - - b.Property("ValidUntil") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("SponsoredOrganizationId"); - - b.HasIndex("SponsoringOrganizationId"); - - b.HasIndex("SponsoringOrganizationUserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationSponsorship", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AccessSecretsManager") - .HasColumnType("INTEGER"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("ExternalId") - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("Permissions") - .HasColumnType("TEXT"); - - b.Property("ResetPasswordKey") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("OrganizationUser", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AccessCount") - .HasColumnType("INTEGER"); - - b.Property("CipherId") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Data") - .HasColumnType("TEXT"); - - b.Property("DeletionDate") - .HasColumnType("TEXT"); - - b.Property("Disabled") - .HasColumnType("INTEGER"); - - b.Property("Emails") - .HasMaxLength(1024) - .HasColumnType("TEXT"); - - b.Property("ExpirationDate") - .HasColumnType("TEXT"); - - b.Property("HideEmail") - .HasColumnType("INTEGER"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("MaxAccessCount") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("Password") - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("DeletionDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId"); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Send", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.TaxRate", b => - { - b.Property("Id") - .HasMaxLength(40) - .HasColumnType("TEXT"); - - b.Property("Active") - .HasColumnType("INTEGER"); - - b.Property("Country") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("PostalCode") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("TEXT"); - - b.Property("Rate") - .HasColumnType("TEXT"); - - b.Property("State") - .HasMaxLength(2) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("TaxRate", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Amount") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Details") - .HasMaxLength(100) - .HasColumnType("TEXT"); - - b.Property("Gateway") - .HasColumnType("INTEGER"); - - b.Property("GatewayId") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("PaymentMethodType") - .HasColumnType("INTEGER"); - - b.Property("ProviderId") - .HasColumnType("TEXT"); - - b.Property("Refunded") - .HasColumnType("INTEGER"); - - b.Property("RefundedAmount") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("ProviderId"); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId", "OrganizationId", "CreationDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Transaction", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AccountRevisionDate") - .HasColumnType("TEXT"); - - b.Property("ApiKey") - .IsRequired() - .HasMaxLength(30) - .HasColumnType("TEXT"); - - b.Property("AvatarColor") - .HasMaxLength(7) - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Culture") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("TEXT"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailVerified") - .HasColumnType("INTEGER"); - - b.Property("EquivalentDomains") - .HasColumnType("TEXT"); - - b.Property("ExcludedGlobalEquivalentDomains") - .HasColumnType("TEXT"); - - b.Property("FailedLoginCount") - .HasColumnType("INTEGER"); - - b.Property("ForcePasswordReset") - .HasColumnType("INTEGER"); - - b.Property("Gateway") - .HasColumnType("INTEGER"); - - b.Property("GatewayCustomerId") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("GatewaySubscriptionId") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("Kdf") - .HasColumnType("INTEGER"); - - b.Property("KdfIterations") - .HasColumnType("INTEGER"); - - b.Property("KdfMemory") - .HasColumnType("INTEGER"); - - b.Property("KdfParallelism") - .HasColumnType("INTEGER"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("LastEmailChangeDate") - .HasColumnType("TEXT"); - - b.Property("LastFailedLoginDate") - .HasColumnType("TEXT"); - - b.Property("LastKdfChangeDate") - .HasColumnType("TEXT"); - - b.Property("LastKeyRotationDate") - .HasColumnType("TEXT"); - - b.Property("LastPasswordChangeDate") - .HasColumnType("TEXT"); - - b.Property("LicenseKey") - .HasMaxLength(100) - .HasColumnType("TEXT"); - - b.Property("MasterPassword") - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("MasterPasswordHint") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("MaxStorageGb") - .HasColumnType("INTEGER"); - - b.Property("Name") - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("Premium") - .HasColumnType("INTEGER"); - - b.Property("PremiumExpirationDate") - .HasColumnType("TEXT"); - - b.Property("PrivateKey") - .HasColumnType("TEXT"); - - b.Property("PublicKey") - .HasColumnType("TEXT"); - - b.Property("ReferenceData") - .HasColumnType("TEXT"); - - b.Property("RenewalReminderDate") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("TEXT"); - - b.Property("SecurityState") - .HasColumnType("TEXT"); - - b.Property("SecurityVersion") - .HasColumnType("INTEGER"); - - b.Property("SignedPublicKey") - .HasColumnType("TEXT"); - - b.Property("Storage") - .HasColumnType("INTEGER"); - - b.Property("TwoFactorProviders") - .HasColumnType("TEXT"); - - b.Property("TwoFactorRecoveryCode") - .HasMaxLength(32) - .HasColumnType("TEXT"); - - b.Property("UsesKeyConnector") - .HasColumnType("INTEGER"); - - b.Property("VerifyDevices") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("Email") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("Premium", "PremiumExpirationDate", "RenewalReminderDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("User", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.UserSignatureKeyPair", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("SignatureAlgorithm") - .HasColumnType("INTEGER"); - - b.Property("SigningKey") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.Property("VerifyingKey") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("UserId") - .IsUnique() - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("UserSignatureKeyPair", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Body") - .HasMaxLength(3000) - .HasColumnType("TEXT"); - - b.Property("ClientType") - .HasColumnType("INTEGER"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Global") - .HasColumnType("INTEGER"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("Priority") - .HasColumnType("INTEGER"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("TaskId") - .HasColumnType("TEXT"); - - b.Property("Title") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("TaskId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("UserId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("ClientType", "Global", "UserId", "OrganizationId", "Priority", "CreationDate") - .IsDescending(false, false, false, false, true, true) - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Notification", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.NotificationStatus", b => - { - b.Property("UserId") - .HasColumnType("TEXT"); - - b.Property("NotificationId") - .HasColumnType("TEXT"); - - b.Property("DeletedDate") - .HasColumnType("TEXT"); - - b.Property("ReadDate") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "NotificationId") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("NotificationId"); - - b.ToTable("NotificationStatus", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Platform.Installation", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Enabled") - .HasColumnType("INTEGER"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(150) - .HasColumnType("TEXT"); - - b.Property("LastActivityDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Installation", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Discriminator") - .IsRequired() - .HasMaxLength(34) - .HasColumnType("TEXT"); - - b.Property("Read") - .HasColumnType("INTEGER"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Write") - .HasColumnType("INTEGER"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.ToTable("AccessPolicy", (string)null); - - b.HasDiscriminator().HasValue("AccessPolicy"); - - b.UseTphMappingStrategy(); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("ClientSecretHash") - .HasMaxLength(128) - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("EncryptedPayload") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("TEXT"); - - b.Property("ExpireAt") - .HasColumnType("TEXT"); - - b.Property("Key") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Scope") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("TEXT"); - - b.Property("ServiceAccountId") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("ServiceAccountId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("ApiKey", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("DeletedDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("DeletedDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Project", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("DeletedDate") - .HasColumnType("TEXT"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("Note") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("DeletedDate") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("Secret", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.SecretVersion", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("EditorOrganizationUserId") - .HasColumnType("TEXT"); - - b.Property("EditorServiceAccountId") - .HasColumnType("TEXT"); - - b.Property("SecretId") - .HasColumnType("TEXT"); - - b.Property("Value") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("VersionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("EditorOrganizationUserId") - .HasDatabaseName("IX_SecretVersion_EditorOrganizationUserId"); - - b.HasIndex("EditorServiceAccountId") - .HasDatabaseName("IX_SecretVersion_EditorServiceAccountId"); - - b.HasIndex("SecretId") - .HasDatabaseName("IX_SecretVersion_SecretId"); - - b.ToTable("SecretVersion"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("ServiceAccount", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("ArchivedDate") - .HasColumnType("TEXT"); - - b.Property("Attachments") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Data") - .HasColumnType("TEXT"); - - b.Property("DeletedDate") - .HasColumnType("TEXT"); - - b.Property("Favorites") - .HasColumnType("TEXT"); - - b.Property("Folders") - .HasColumnType("TEXT"); - - b.Property("Key") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("Reprompt") - .HasColumnType("INTEGER"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OrganizationId"); - - b.HasIndex("UserId"); - - b.ToTable("Cipher", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Folder", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("Folder", (string)null); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CipherId") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.Property("OrganizationId") - .HasColumnType("TEXT"); - - b.Property("RevisionDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .HasColumnType("INTEGER"); - - b.Property("Type") - .HasColumnType("INTEGER"); - - b.HasKey("Id") - .HasAnnotation("SqlServer:Clustered", true); - - b.HasIndex("CipherId") - .HasAnnotation("SqlServer:Clustered", false); - - b.HasIndex("OrganizationId") - .HasAnnotation("SqlServer:Clustered", false); - - b.ToTable("SecurityTask", (string)null); - }); - - modelBuilder.Entity("ProjectSecret", b => - { - b.Property("ProjectsId") - .HasColumnType("TEXT"); - - b.Property("SecretsId") - .HasColumnType("TEXT"); - - b.HasKey("ProjectsId", "SecretsId"); - - b.HasIndex("SecretsId"); - - b.ToTable("ProjectSecret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedProjectId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedSecretId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedServiceAccountId"); - - b.Property("GroupId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GroupId"); - - b.HasIndex("GrantedServiceAccountId"); - - b.HasIndex("GroupId"); - - b.HasDiscriminator().HasValue("group_service_account"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedProjectId"); - - b.Property("ServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("ServiceAccountId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("ServiceAccountId"); - - b.HasDiscriminator().HasValue("service_account_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedSecretId"); - - b.Property("ServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("ServiceAccountId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("ServiceAccountId"); - - b.HasDiscriminator().HasValue("service_account_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedProjectId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedProjectId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedProjectId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_project"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserSecretAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedSecretId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedSecretId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedSecretId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => - { - b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); - - b.Property("GrantedServiceAccountId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("GrantedServiceAccountId"); - - b.Property("OrganizationUserId") - .ValueGeneratedOnUpdateSometimes() - .HasColumnType("TEXT") - .HasColumnName("OrganizationUserId"); - - b.HasIndex("GrantedServiceAccountId"); - - b.HasIndex("OrganizationUserId"); - - b.HasDiscriminator().HasValue("user_service_account"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegrationConfiguration", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", "OrganizationIntegration") - .WithMany() - .HasForeignKey("OrganizationIntegrationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationIntegration"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Policies") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Provider"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Device", "ResponseDevice") - .WithMany() - .HasForeignKey("ResponseDeviceId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("ResponseDevice"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantee") - .WithMany() - .HasForeignKey("GranteeId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantor") - .WithMany() - .HasForeignKey("GrantorId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Grantee"); - - b.Navigation("Grantor"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("SsoConfigs") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("SsoUsers") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("SsoUsers") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.OrganizationInstallation", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Platform.Installation", "Installation") - .WithMany() - .HasForeignKey("InstallationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Installation"); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderInvoiceItem", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Billing.Models.ProviderPlan", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Provider"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationApplication", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.OrganizationReport", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Dirt.Models.PasswordHealthReportApplication", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Collections") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher") - .WithMany("CollectionCiphers") - .HasForeignKey("CipherId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionCiphers") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Cipher"); - - b.Navigation("Collection"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionGroups") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Collection"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") - .WithMany("CollectionUsers") - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany("CollectionUsers") - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Collection"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Groups") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany("GroupUsers") - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany("GroupUsers") - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Group"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("ApiKeys") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Connections") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Domains") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "SponsoredOrganization") - .WithMany() - .HasForeignKey("SponsoredOrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "SponsoringOrganization") - .WithMany() - .HasForeignKey("SponsoringOrganizationId"); - - b.Navigation("SponsoredOrganization"); - - b.Navigation("SponsoringOrganization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("OrganizationUsers") - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("OrganizationUsers") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Transactions") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", "Provider") - .WithMany() - .HasForeignKey("ProviderId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Transactions") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("Provider"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.UserSignatureKeyPair", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", "Task") - .WithMany() - .HasForeignKey("TaskId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("Task"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.NotificationStatus", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.NotificationCenter.Models.Notification", "Notification") - .WithMany() - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany("ApiKeys") - .HasForeignKey("ServiceAccountId"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.SecretVersion", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "EditorOrganizationUser") - .WithMany() - .HasForeignKey("EditorOrganizationUserId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "EditorServiceAccount") - .WithMany() - .HasForeignKey("EditorServiceAccountId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "Secret") - .WithMany("SecretVersions") - .HasForeignKey("SecretId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("EditorOrganizationUser"); - - b.Navigation("EditorServiceAccount"); - - b.Navigation("Secret"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany("Ciphers") - .HasForeignKey("OrganizationId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Ciphers") - .HasForeignKey("UserId"); - - b.Navigation("Organization"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Folder", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") - .WithMany("Folders") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher") - .WithMany() - .HasForeignKey("CipherId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization") - .WithMany() - .HasForeignKey("OrganizationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Cipher"); - - b.Navigation("Organization"); - }); - - modelBuilder.Entity("ProjectSecret", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", null) - .WithMany() - .HasForeignKey("ProjectsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", null) - .WithMany() - .HasForeignKey("SecretsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedProject"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedSecret"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") - .WithMany("GroupAccessPolicies") - .HasForeignKey("GrantedServiceAccountId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") - .WithMany() - .HasForeignKey("GroupId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("GrantedServiceAccount"); - - b.Navigation("Group"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("ServiceAccountAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany("ProjectAccessPolicies") - .HasForeignKey("ServiceAccountId"); - - b.Navigation("GrantedProject"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("ServiceAccountAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") - .WithMany() - .HasForeignKey("ServiceAccountId"); - - b.Navigation("GrantedSecret"); - - b.Navigation("ServiceAccount"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedProjectId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedProject"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserSecretAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", "GrantedSecret") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedSecretId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedSecret"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") - .WithMany("UserAccessPolicies") - .HasForeignKey("GrantedServiceAccountId"); - - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId"); - - b.Navigation("GrantedServiceAccount"); - - b.Navigation("OrganizationUser"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => - { - b.Navigation("ApiKeys"); - - b.Navigation("Ciphers"); - - b.Navigation("Collections"); - - b.Navigation("Connections"); - - b.Navigation("Domains"); - - b.Navigation("Groups"); - - b.Navigation("OrganizationUsers"); - - b.Navigation("Policies"); - - b.Navigation("SsoConfigs"); - - b.Navigation("SsoUsers"); - - b.Navigation("Transactions"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => - { - b.Navigation("CollectionCiphers"); - - b.Navigation("CollectionGroups"); - - b.Navigation("CollectionUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => - { - b.Navigation("GroupUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => - { - b.Navigation("CollectionUsers"); - - b.Navigation("GroupUsers"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => - { - b.Navigation("Ciphers"); - - b.Navigation("Folders"); - - b.Navigation("OrganizationUsers"); - - b.Navigation("SsoUsers"); - - b.Navigation("Transactions"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => - { - b.Navigation("GroupAccessPolicies"); - - b.Navigation("ServiceAccountAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => - { - b.Navigation("GroupAccessPolicies"); - - b.Navigation("SecretVersions"); - - b.Navigation("ServiceAccountAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => - { - b.Navigation("ApiKeys"); - - b.Navigation("GroupAccessPolicies"); - - b.Navigation("ProjectAccessPolicies"); - - b.Navigation("UserAccessPolicies"); - }); - - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", b => - { - b.Navigation("CollectionCiphers"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.cs b/util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.cs deleted file mode 100644 index 36db0718fb..0000000000 --- a/util/SqliteMigrations/Migrations/20251231233301_DefaultCollectionSemaphore.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Bit.SqliteMigrations.Migrations; - -/// -public partial class DefaultCollectionSemaphore : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "DefaultCollectionSemaphore", - columns: table => new - { - OrganizationUserId = table.Column(type: "TEXT", nullable: false), - CreationDate = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_DefaultCollectionSemaphore", x => x.OrganizationUserId); - table.ForeignKey( - name: "FK_DefaultCollectionSemaphore_OrganizationUser_OrganizationUserId", - column: x => x.OrganizationUserId, - principalTable: "OrganizationUser", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "DefaultCollectionSemaphore"); - } -} diff --git a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs index 724261d026..fcf5ce834e 100644 --- a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -64,19 +64,6 @@ namespace Bit.SqliteMigrations.Migrations b.ToTable("OrganizationMemberBaseDetails"); }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.Property("OrganizationUserId") - .HasColumnType("TEXT"); - - b.Property("CreationDate") - .HasColumnType("TEXT"); - - b.HasKey("OrganizationUserId"); - - b.ToTable("DefaultCollectionSemaphore", (string)null); - }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b => { b.Property("Id") @@ -2606,17 +2593,6 @@ namespace Bit.SqliteMigrations.Migrations b.HasDiscriminator().HasValue("user_service_account"); }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.DefaultCollectionSemaphore", b => - { - b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") - .WithMany() - .HasForeignKey("OrganizationUserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("OrganizationUser"); - }); - modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.OrganizationIntegration", b => { b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization")