| | | 1 | | using Elsa.Secrets.Models; |
| | | 2 | | using Microsoft.EntityFrameworkCore; |
| | | 3 | | using Microsoft.EntityFrameworkCore.Metadata.Builders; |
| | | 4 | | |
| | | 5 | | namespace Elsa.Secrets.Persistence.EFCore; |
| | | 6 | | |
| | | 7 | | internal class SecretConfiguration : IEntityTypeConfiguration<Secret> |
| | | 8 | | { |
| | | 9 | | public void Configure(EntityTypeBuilder<Secret> builder) |
| | | 10 | | { |
| | 1 | 11 | | builder.HasKey(x => x.Id); |
| | 1 | 12 | | builder.Ignore(x => x.Tags); |
| | 1 | 13 | | builder.Ignore(x => x.Versions); |
| | 1 | 14 | | builder.Ignore(x => x.LatestActiveVersion); |
| | 1 | 15 | | builder.Property(x => x.ManagedOwnerId).HasMaxLength(200); |
| | 1 | 16 | | builder.Property(x => x.ManagedGenerationId).HasMaxLength(200); |
| | 1 | 17 | | builder.Property<string>(SecretShadowPropertyNames.SerializedTags).HasColumnName("Tags").IsRequired(); |
| | 1 | 18 | | builder.Property<string>(SecretShadowPropertyNames.SerializedVersions).HasColumnName("Versions").IsRequired(); |
| | 1 | 19 | | builder.Property(x => x.Name).HasMaxLength(200).IsRequired(); |
| | 1 | 20 | | builder.Property<string>(SecretShadowPropertyNames.NormalizedName).HasMaxLength(200).IsRequired(); |
| | 1 | 21 | | builder.Property(x => x.DisplayName).HasMaxLength(200).IsRequired(); |
| | 1 | 22 | | builder.Property(x => x.TypeName).HasMaxLength(100).IsRequired(); |
| | 1 | 23 | | builder.Property(x => x.StoreName).HasMaxLength(100).IsRequired(); |
| | 1 | 24 | | builder.Property(x => x.Scope).HasMaxLength(200); |
| | 1 | 25 | | builder.Property(x => x.Status).HasConversion<string>().HasMaxLength(32).IsRequired(); |
| | | 26 | | // Uniqueness is per tenant, matching Labels (and User, Role, Application). |
| | | 27 | | // A global unique index would make the name a shared resource across tenants. |
| | | 28 | | // SQL Server still emits a filtered unique index (TenantId IS NOT NULL); leftover |
| | | 29 | | // nulls are stamped to "" first. Oracle stores '' as NULL, so that provider uses |
| | | 30 | | // a function-based unique index on NVL(TenantId, CHR(1)) instead of a filter. |
| | 1 | 31 | | builder.HasIndex("TenantId", SecretShadowPropertyNames.NormalizedName).HasDatabaseName($"IX_{nameof(Secret)}_Ten |
| | 1 | 32 | | builder.HasIndex(x => x.TypeName).HasDatabaseName($"IX_{nameof(Secret)}_{nameof(Secret.TypeName)}"); |
| | 1 | 33 | | builder.HasIndex(x => x.StoreName).HasDatabaseName($"IX_{nameof(Secret)}_{nameof(Secret.StoreName)}"); |
| | 1 | 34 | | builder.HasIndex(x => x.Scope).HasDatabaseName($"IX_{nameof(Secret)}_{nameof(Secret.Scope)}"); |
| | 1 | 35 | | builder.HasIndex(x => x.Status).HasDatabaseName($"IX_{nameof(Secret)}_{nameof(Secret.Status)}"); |
| | 1 | 36 | | } |
| | | 37 | | } |