mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00
[BEEEP][SM-1062] Add missing table indexes to EF config (#3628)
* Add missing EF indexes * Add EF migrations * move configs * regenerate migrations
This commit is contained in:
@ -0,0 +1,29 @@
|
||||
using Bit.Infrastructure.EntityFramework.AdminConsole.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.AdminConsole.Configurations;
|
||||
|
||||
public class OrganizationEntityTypeConfiguration : IEntityTypeConfiguration<Organization>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<Organization> builder)
|
||||
{
|
||||
builder
|
||||
.Property(o => o.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
builder.Property(c => c.LimitCollectionCreationDeletion)
|
||||
.ValueGeneratedNever()
|
||||
.HasDefaultValue(true);
|
||||
|
||||
builder.Property(c => c.AllowAdminAccessToAllCollectionItems)
|
||||
.ValueGeneratedNever()
|
||||
.HasDefaultValue(true);
|
||||
|
||||
NpgsqlIndexBuilderExtensions.IncludeProperties(
|
||||
builder.HasIndex(o => new { o.Id, o.Enabled }),
|
||||
o => o.UseTotp);
|
||||
|
||||
builder.ToTable(nameof(Organization));
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
using Bit.Infrastructure.EntityFramework.AdminConsole.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.AdminConsole.Configurations;
|
||||
|
||||
public class PolicyEntityTypeConfiguration : IEntityTypeConfiguration<Policy>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<Policy> builder)
|
||||
{
|
||||
builder
|
||||
.Property(p => p.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
builder
|
||||
.HasIndex(p => p.OrganizationId)
|
||||
.IsClustered(false);
|
||||
|
||||
builder
|
||||
.HasIndex(p => new { p.OrganizationId, p.Type })
|
||||
.IsUnique()
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(Policy));
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.Configurations;
|
||||
|
||||
public class DeviceEntityTypeConfiguration : IEntityTypeConfiguration<Device>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<Device> builder)
|
||||
{
|
||||
builder
|
||||
.HasIndex(d => d.UserId)
|
||||
.IsClustered(false);
|
||||
|
||||
builder
|
||||
.HasIndex(d => new { d.UserId, d.Identifier })
|
||||
.IsUnique()
|
||||
.IsClustered(false);
|
||||
|
||||
builder
|
||||
.HasIndex(d => d.Identifier)
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(Device));
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.Configurations;
|
||||
|
||||
public class EventEntityTypeConfiguration : IEntityTypeConfiguration<Event>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<Event> builder)
|
||||
{
|
||||
builder
|
||||
.Property(e => e.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
builder
|
||||
.HasIndex(e => new { e.Date, e.OrganizationId, e.ActingUserId, e.CipherId })
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(Event));
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.Configurations;
|
||||
|
||||
public class OrganizationSponsorshipEntityTypeConfiguration : IEntityTypeConfiguration<OrganizationSponsorship>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<OrganizationSponsorship> builder)
|
||||
{
|
||||
builder
|
||||
.Property(o => o.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
builder
|
||||
.HasIndex(o => o.SponsoringOrganizationUserId)
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(OrganizationSponsorship));
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.Configurations;
|
||||
|
||||
public class OrganizationUserEntityTypeConfiguration : IEntityTypeConfiguration<OrganizationUser>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<OrganizationUser> builder)
|
||||
{
|
||||
builder
|
||||
.Property(ou => ou.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
NpgsqlIndexBuilderExtensions.IncludeProperties(
|
||||
builder.HasIndex(ou => new { ou.UserId, ou.OrganizationId, ou.Status }).IsClustered(false),
|
||||
ou => ou.AccessAll);
|
||||
|
||||
builder
|
||||
.HasIndex(ou => ou.OrganizationId)
|
||||
.IsClustered(false);
|
||||
|
||||
builder
|
||||
.HasIndex(ou => ou.UserId)
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(OrganizationUser));
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.Configurations;
|
||||
|
||||
public class TransactionEntityTypeConfiguration : IEntityTypeConfiguration<Transaction>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<Transaction> builder)
|
||||
{
|
||||
builder
|
||||
.Property(t => t.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
builder
|
||||
.HasIndex(t => t.UserId)
|
||||
.IsClustered(false);
|
||||
|
||||
builder
|
||||
.HasIndex(t => new { t.UserId, t.OrganizationId, t.CreationDate })
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(Transaction));
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Bit.Infrastructure.EntityFramework.Configurations;
|
||||
|
||||
public class UserEntityTypeConfiguration : IEntityTypeConfiguration<User>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<User> builder)
|
||||
{
|
||||
builder
|
||||
.Property(u => u.Id)
|
||||
.ValueGeneratedNever();
|
||||
|
||||
builder
|
||||
.HasIndex(u => u.Email)
|
||||
.IsUnique()
|
||||
.IsClustered(false);
|
||||
|
||||
builder
|
||||
.HasIndex(u => new { u.Premium, u.PremiumExpirationDate, u.RenewalReminderDate })
|
||||
.IsClustered(false);
|
||||
|
||||
builder.ToTable(nameof(User));
|
||||
}
|
||||
}
|
@ -77,24 +77,17 @@ public class DatabaseContext : DbContext
|
||||
var eCollectionCipher = builder.Entity<CollectionCipher>();
|
||||
var eCollectionUser = builder.Entity<CollectionUser>();
|
||||
var eCollectionGroup = builder.Entity<CollectionGroup>();
|
||||
var eDevice = builder.Entity<Device>();
|
||||
var eEmergencyAccess = builder.Entity<EmergencyAccess>();
|
||||
var eEvent = builder.Entity<Event>();
|
||||
var eFolder = builder.Entity<Folder>();
|
||||
var eGroup = builder.Entity<Group>();
|
||||
var eGroupUser = builder.Entity<GroupUser>();
|
||||
var eInstallation = builder.Entity<Installation>();
|
||||
var eOrganization = builder.Entity<Organization>();
|
||||
var eOrganizationSponsorship = builder.Entity<OrganizationSponsorship>();
|
||||
var eOrganizationUser = builder.Entity<OrganizationUser>();
|
||||
var ePolicy = builder.Entity<Policy>();
|
||||
var eProvider = builder.Entity<Provider>();
|
||||
var eProviderUser = builder.Entity<ProviderUser>();
|
||||
var eProviderOrganization = builder.Entity<ProviderOrganization>();
|
||||
var eSsoConfig = builder.Entity<SsoConfig>();
|
||||
var eSsoUser = builder.Entity<SsoUser>();
|
||||
var eTaxRate = builder.Entity<TaxRate>();
|
||||
var eTransaction = builder.Entity<Transaction>();
|
||||
var eUser = builder.Entity<User>();
|
||||
var eOrganizationApiKey = builder.Entity<OrganizationApiKey>();
|
||||
var eOrganizationConnection = builder.Entity<OrganizationConnection>();
|
||||
@ -104,25 +97,12 @@ public class DatabaseContext : DbContext
|
||||
eCipher.Property(c => c.Id).ValueGeneratedNever();
|
||||
eCollection.Property(c => c.Id).ValueGeneratedNever();
|
||||
eEmergencyAccess.Property(c => c.Id).ValueGeneratedNever();
|
||||
eEvent.Property(c => c.Id).ValueGeneratedNever();
|
||||
eFolder.Property(c => c.Id).ValueGeneratedNever();
|
||||
eGroup.Property(c => c.Id).ValueGeneratedNever();
|
||||
eInstallation.Property(c => c.Id).ValueGeneratedNever();
|
||||
eOrganization.Property(c => c.Id).ValueGeneratedNever();
|
||||
eOrganization.Property(c => c.LimitCollectionCreationDeletion)
|
||||
.ValueGeneratedNever()
|
||||
.HasDefaultValue(true);
|
||||
eOrganization.Property(c => c.AllowAdminAccessToAllCollectionItems)
|
||||
.ValueGeneratedNever()
|
||||
.HasDefaultValue(true);
|
||||
eOrganizationSponsorship.Property(c => c.Id).ValueGeneratedNever();
|
||||
eOrganizationUser.Property(c => c.Id).ValueGeneratedNever();
|
||||
ePolicy.Property(c => c.Id).ValueGeneratedNever();
|
||||
eProvider.Property(c => c.Id).ValueGeneratedNever();
|
||||
eProviderUser.Property(c => c.Id).ValueGeneratedNever();
|
||||
eProviderOrganization.Property(c => c.Id).ValueGeneratedNever();
|
||||
eTransaction.Property(c => c.Id).ValueGeneratedNever();
|
||||
eUser.Property(c => c.Id).ValueGeneratedNever();
|
||||
eOrganizationApiKey.Property(c => c.Id).ValueGeneratedNever();
|
||||
eOrganizationConnection.Property(c => c.Id).ValueGeneratedNever();
|
||||
eOrganizationDomain.Property(ar => ar.Id).ValueGeneratedNever();
|
||||
@ -146,32 +126,24 @@ public class DatabaseContext : DbContext
|
||||
builder.HasCollation(postgresIndetermanisticCollation, locale: "en-u-ks-primary", provider: "icu", deterministic: false);
|
||||
eUser.Property(e => e.Email).UseCollation(postgresIndetermanisticCollation);
|
||||
eSsoUser.Property(e => e.ExternalId).UseCollation(postgresIndetermanisticCollation);
|
||||
eOrganization.Property(e => e.Identifier).UseCollation(postgresIndetermanisticCollation);
|
||||
builder.Entity<Organization>().Property(e => e.Identifier).UseCollation(postgresIndetermanisticCollation);
|
||||
//
|
||||
}
|
||||
|
||||
eCipher.ToTable(nameof(Cipher));
|
||||
eCollection.ToTable(nameof(Collection));
|
||||
eCollectionCipher.ToTable(nameof(CollectionCipher));
|
||||
eDevice.ToTable(nameof(Device));
|
||||
eEmergencyAccess.ToTable(nameof(EmergencyAccess));
|
||||
eEvent.ToTable(nameof(Event));
|
||||
eFolder.ToTable(nameof(Folder));
|
||||
eGroup.ToTable(nameof(Group));
|
||||
eGroupUser.ToTable(nameof(GroupUser));
|
||||
eInstallation.ToTable(nameof(Installation));
|
||||
eOrganization.ToTable(nameof(Organization));
|
||||
eOrganizationSponsorship.ToTable(nameof(OrganizationSponsorship));
|
||||
eOrganizationUser.ToTable(nameof(OrganizationUser));
|
||||
ePolicy.ToTable(nameof(Policy));
|
||||
eProvider.ToTable(nameof(Provider));
|
||||
eProviderUser.ToTable(nameof(ProviderUser));
|
||||
eProviderOrganization.ToTable(nameof(ProviderOrganization));
|
||||
eSsoConfig.ToTable(nameof(SsoConfig));
|
||||
eSsoUser.ToTable(nameof(SsoUser));
|
||||
eTaxRate.ToTable(nameof(TaxRate));
|
||||
eTransaction.ToTable(nameof(Transaction));
|
||||
eUser.ToTable(nameof(User));
|
||||
eOrganizationApiKey.ToTable(nameof(OrganizationApiKey));
|
||||
eOrganizationConnection.ToTable(nameof(OrganizationConnection));
|
||||
eOrganizationDomain.ToTable(nameof(OrganizationDomain));
|
||||
|
Reference in New Issue
Block a user