// using System; using EntKube.Web.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace EntKube.Web.Data.Migrations.Sqlite { [DbContext(typeof(ApplicationDbContext))] [Migration("20260602124559_AddRedisCluster")] partial class AddRedisCluster { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder.HasAnnotation("ProductVersion", "10.0.8"); modelBuilder.Entity("EntKube.Web.Data.AlertIncident", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AcknowledgedAt") .HasColumnType("TEXT"); b.Property("AcknowledgedBy") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("AlertName") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("ClusterId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Description") .IsRequired() .HasMaxLength(2000) .HasColumnType("TEXT"); b.Property("EndsAt") .HasColumnType("TEXT"); b.Property("Fingerprint") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("LabelsJson") .IsRequired() .HasColumnType("TEXT"); b.Property("ResolvedAt") .HasColumnType("TEXT"); b.Property("Severity") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("StartsAt") .HasColumnType("TEXT"); b.Property("Status") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Summary") .IsRequired() .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("UpdatedAt") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("StartsAt"); b.HasIndex("Status"); b.HasIndex("ClusterId", "Fingerprint") .IsUnique(); b.ToTable("AlertIncidents"); }); modelBuilder.Entity("EntKube.Web.Data.App", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("CustomerId") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("CustomerId", "Name") .IsUnique(); b.ToTable("Apps"); }); modelBuilder.Entity("EntKube.Web.Data.AppDeployment", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppId") .HasColumnType("TEXT"); b.Property("ClusterId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("EnvironmentId") .HasColumnType("TEXT"); b.Property("HealthStatus") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("HelmChartName") .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("HelmChartVersion") .HasMaxLength(50) .HasColumnType("TEXT"); b.Property("HelmRepoUrl") .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("HelmValues") .HasColumnType("TEXT"); b.Property("LastSyncedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Namespace") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("StatusMessage") .HasColumnType("TEXT"); b.Property("SyncStatus") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Type") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ClusterId"); b.HasIndex("EnvironmentId"); b.HasIndex("AppId", "Name") .IsUnique(); b.ToTable("AppDeployments"); }); modelBuilder.Entity("EntKube.Web.Data.AppEnvironment", b => { b.Property("AppId") .HasColumnType("TEXT"); b.Property("EnvironmentId") .HasColumnType("TEXT"); b.Property("LinkedAt") .HasColumnType("TEXT"); b.HasKey("AppId", "EnvironmentId"); b.HasIndex("EnvironmentId"); b.ToTable("AppEnvironments"); }); modelBuilder.Entity("EntKube.Web.Data.ApplicationUser", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("AccessFailedCount") .HasColumnType("INTEGER"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Email") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("EmailConfirmed") .HasColumnType("INTEGER"); b.Property("LockoutEnabled") .HasColumnType("INTEGER"); b.Property("LockoutEnd") .HasColumnType("TEXT"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("PasswordHash") .HasColumnType("TEXT"); b.Property("PhoneNumber") .HasColumnType("TEXT"); b.Property("PhoneNumberConfirmed") .HasColumnType("INTEGER"); b.Property("SecurityStamp") .HasColumnType("TEXT"); b.Property("TwoFactorEnabled") .HasColumnType("INTEGER"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("EntKube.Web.Data.AuditEvent", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("Action") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("DeploymentId") .HasColumnType("TEXT"); b.Property("Details") .HasMaxLength(1000) .HasColumnType("TEXT"); b.Property("OccurredAt") .HasColumnType("TEXT"); b.Property("PerformedBy") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("ResourceKind") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("ResourceName") .HasMaxLength(253) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("DeploymentId"); b.HasIndex("OccurredAt"); b.ToTable("AuditEvents"); }); modelBuilder.Entity("EntKube.Web.Data.ClusterComponent", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ClusterId") .HasColumnType("TEXT"); b.Property("ComponentType") .IsRequired() .HasMaxLength(50) .HasColumnType("TEXT"); b.Property("Configuration") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("HelmChartName") .HasColumnType("TEXT"); b.Property("HelmChartVersion") .HasColumnType("TEXT"); b.Property("HelmRepoUrl") .HasColumnType("TEXT"); b.Property("HelmValues") .HasColumnType("TEXT"); b.Property("InstalledAt") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Namespace") .HasColumnType("TEXT"); b.Property("ReleaseName") .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("ClusterId", "Name") .IsUnique(); b.ToTable("ClusterComponents"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgBackup", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CnpgClusterId") .HasColumnType("TEXT"); b.Property("CompletedAt") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("SizeBytes") .HasColumnType("INTEGER"); b.Property("StartedAt") .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("Type") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("CnpgClusterId", "Name") .IsUnique(); b.ToTable("CnpgBackups"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgCluster", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("BackupSchedule") .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Instances") .HasColumnType("INTEGER"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("MaxBackups") .ValueGeneratedOnAdd() .HasColumnType("INTEGER") .HasDefaultValue(20); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Namespace") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("PostgresVersion") .IsRequired() .HasMaxLength(10) .HasColumnType("TEXT"); b.Property("RetentionDays") .HasColumnType("INTEGER"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("StorageSize") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("StorageLinkId"); b.HasIndex("TenantId"); b.HasIndex("KubernetesClusterId", "Name", "Namespace") .IsUnique(); b.ToTable("CnpgClusters"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgDatabase", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CnpgClusterId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Owner") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("CnpgClusterId", "Name") .IsUnique(); b.ToTable("CnpgDatabases"); }); modelBuilder.Entity("EntKube.Web.Data.Customer", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("Customers"); }); modelBuilder.Entity("EntKube.Web.Data.CustomerAccess", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("CustomerId") .HasColumnType("TEXT"); b.Property("GrantedAt") .HasColumnType("TEXT"); b.Property("Role") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.HasKey("UserId", "CustomerId"); b.HasIndex("CustomerId"); b.ToTable("CustomerAccesses"); }); modelBuilder.Entity("EntKube.Web.Data.DatabaseBinding", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppDeploymentId") .HasColumnType("TEXT"); b.Property("CnpgDatabaseId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KubernetesSecretName") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("LastSyncedAt") .HasColumnType("TEXT"); b.Property("MongoDatabaseId") .HasColumnType("TEXT"); b.Property("RegisteredPostgresDatabaseId") .HasColumnType("TEXT"); b.Property("SyncEnabled") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("AppDeploymentId"); b.HasIndex("CnpgDatabaseId"); b.HasIndex("MongoDatabaseId"); b.HasIndex("RegisteredPostgresDatabaseId"); b.ToTable("DatabaseBindings"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentHealthSnapshot", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("DeploymentId") .HasColumnType("TEXT"); b.Property("HealthStatus") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("ReadyReplicas") .HasColumnType("INTEGER"); b.Property("SnapshotAt") .HasColumnType("TEXT"); b.Property("SyncStatus") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TotalReplicas") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("DeploymentId", "SnapshotAt"); b.ToTable("DeploymentHealthSnapshots"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentManifest", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("DeploymentId") .HasColumnType("TEXT"); b.Property("Kind") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("SortOrder") .HasColumnType("INTEGER"); b.Property("UpdatedAt") .HasColumnType("TEXT"); b.Property("YamlContent") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("DeploymentId"); b.ToTable("DeploymentManifests"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentResource", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("DeploymentId") .HasColumnType("TEXT"); b.Property("Group") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("HealthStatus") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Kind") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("LastUpdatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("Namespace") .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("ParentResourceId") .HasColumnType("TEXT"); b.Property("StatusMessage") .HasColumnType("TEXT"); b.Property("SyncStatus") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Version") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("DeploymentId"); b.HasIndex("ParentResourceId"); b.ToTable("DeploymentResources"); }); modelBuilder.Entity("EntKube.Web.Data.DockerRegistryCredential", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Email") .HasMaxLength(254) .HasColumnType("TEXT"); b.Property("EncryptedPassword") .IsRequired() .HasColumnType("BLOB"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("KubernetesNamespace") .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("KubernetesSecretName") .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("PasswordNonce") .IsRequired() .HasColumnType("BLOB"); b.Property("RegistryType") .HasColumnType("INTEGER"); b.Property("Server") .IsRequired() .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("UpdatedAt") .HasColumnType("TEXT"); b.Property("Username") .IsRequired() .HasMaxLength(300) .HasColumnType("TEXT"); b.Property("VaultId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("AppId"); b.HasIndex("KubernetesClusterId"); b.HasIndex("VaultId"); b.ToTable("DockerRegistryCredentials"); }); modelBuilder.Entity("EntKube.Web.Data.Environment", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("Environments"); }); modelBuilder.Entity("EntKube.Web.Data.ExternalRoute", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ClusterIssuerName") .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("ComponentId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("GatewayName") .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("GatewayNamespace") .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Hostname") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("IsReachable") .HasColumnType("INTEGER"); b.Property("LastHealthCheckAt") .HasColumnType("TEXT"); b.Property("LastStatusCode") .HasColumnType("INTEGER"); b.Property("PathPrefix") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("ServiceName") .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("ServicePort") .HasColumnType("INTEGER"); b.Property("TlsCertificate") .HasColumnType("TEXT"); b.Property("TlsMode") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TlsPrivateKey") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ComponentId"); b.ToTable("ExternalRoutes"); }); modelBuilder.Entity("EntKube.Web.Data.ExternalRouteHealthHistory", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CheckedAt") .HasColumnType("TEXT"); b.Property("IsReachable") .HasColumnType("INTEGER"); b.Property("ResponseMs") .HasColumnType("INTEGER"); b.Property("RouteId") .HasColumnType("TEXT"); b.Property("StatusCode") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("RouteId", "CheckedAt"); b.ToTable("ExternalRouteHealthHistories"); }); modelBuilder.Entity("EntKube.Web.Data.Group", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("Groups"); }); modelBuilder.Entity("EntKube.Web.Data.GroupMembership", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("GroupId") .HasColumnType("TEXT"); b.Property("JoinedAt") .HasColumnType("TEXT"); b.HasKey("UserId", "GroupId"); b.HasIndex("GroupId"); b.ToTable("GroupMemberships"); }); modelBuilder.Entity("EntKube.Web.Data.HarborComponentConfig", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AdminUsername") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("ClusterComponentId") .HasColumnType("TEXT"); b.Property("CnpgDatabaseId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("RegistryUrl") .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ClusterComponentId"); b.HasIndex("CnpgDatabaseId"); b.HasIndex("StorageLinkId"); b.HasIndex("TenantId"); b.ToTable("HarborComponentConfigs"); }); modelBuilder.Entity("EntKube.Web.Data.HarborProject", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("HarborComponentConfigId") .HasColumnType("TEXT"); b.Property("LinkedAppId") .HasColumnType("TEXT"); b.Property("ProjectName") .IsRequired() .HasMaxLength(255) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("LinkedAppId"); b.HasIndex("TenantId"); b.HasIndex("HarborComponentConfigId", "ProjectName") .IsUnique(); b.ToTable("HarborProjects"); }); modelBuilder.Entity("EntKube.Web.Data.IncidentNote", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("Author") .IsRequired() .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("Content") .IsRequired() .HasMaxLength(2000) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("IncidentId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("IncidentId"); b.ToTable("IncidentNotes"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakBackup", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CompletedAt") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KeycloakRealmId") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("ObjectKey") .IsRequired() .HasMaxLength(1024) .HasColumnType("TEXT"); b.Property("RealmName") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("SizeBytes") .HasColumnType("INTEGER"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("KeycloakRealmId"); b.HasIndex("StorageLinkId"); b.ToTable("KeycloakBackups"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakComponentConfig", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AdminUrl") .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("AdminUsername") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("ClusterComponentId") .HasColumnType("TEXT"); b.Property("CnpgDatabaseId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("DisplayName") .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("RegisteredPostgresDatabaseId") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ClusterComponentId"); b.HasIndex("CnpgDatabaseId"); b.HasIndex("RegisteredPostgresDatabaseId"); b.HasIndex("TenantId"); b.ToTable("KeycloakComponentConfigs"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakRealm", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AccountTheme") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("DisplayName") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Enabled") .HasColumnType("INTEGER"); b.Property("KeycloakComponentConfigId") .HasColumnType("TEXT"); b.Property("KeycloakThemeId") .HasColumnType("TEXT"); b.Property("LinkedAppId") .HasColumnType("TEXT"); b.Property("LoginTheme") .HasColumnType("TEXT"); b.Property("RealmName") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("KeycloakThemeId"); b.HasIndex("LinkedAppId"); b.HasIndex("KeycloakComponentConfigId", "RealmName") .IsUnique(); b.ToTable("KeycloakRealms"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakTheme", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AccountTheme") .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KeycloakComponentConfigId") .HasColumnType("TEXT"); b.Property("LoginTheme") .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("KeycloakComponentConfigId", "Name") .IsUnique(); b.ToTable("KeycloakThemes"); }); modelBuilder.Entity("EntKube.Web.Data.KubernetesCluster", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ApiServerUrl") .IsRequired() .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("ContextName") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("EnvironmentId") .HasColumnType("TEXT"); b.Property("Kubeconfig") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("EnvironmentId"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("KubernetesClusters"); }); modelBuilder.Entity("EntKube.Web.Data.MaintenanceWindow", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ClusterId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("CreatedBy") .IsRequired() .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("Description") .HasMaxLength(1000) .HasColumnType("TEXT"); b.Property("EndsAt") .HasColumnType("TEXT"); b.Property("StartsAt") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.Property("Title") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ClusterId"); b.HasIndex("StartsAt"); b.HasIndex("TenantId", "StartsAt"); b.ToTable("MaintenanceWindows"); }); modelBuilder.Entity("EntKube.Web.Data.MessagingBinding", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppDeploymentId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("ExchangeName") .HasMaxLength(255) .HasColumnType("TEXT"); b.Property("KubernetesSecretName") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("LastSyncedAt") .HasColumnType("TEXT"); b.Property("QueueName") .HasMaxLength(255) .HasColumnType("TEXT"); b.Property("RabbitMQClusterId") .HasColumnType("TEXT"); b.Property("SyncEnabled") .HasColumnType("INTEGER"); b.Property("TenantId") .HasColumnType("TEXT"); b.Property("Vhost") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("AppDeploymentId"); b.HasIndex("RabbitMQClusterId"); b.ToTable("MessagingBindings"); }); modelBuilder.Entity("EntKube.Web.Data.MongoBackup", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CompletedAt") .HasColumnType("TEXT"); b.Property("MongoClusterId") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("SizeBytes") .HasColumnType("INTEGER"); b.Property("StartedAt") .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("Type") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("MongoClusterId", "Name") .IsUnique(); b.ToTable("MongoBackups"); }); modelBuilder.Entity("EntKube.Web.Data.MongoCluster", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("BackupSchedule") .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("ExternalUri") .HasColumnType("TEXT"); b.Property("IsExternal") .HasColumnType("INTEGER"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("MaxBackups") .ValueGeneratedOnAdd() .HasColumnType("INTEGER") .HasDefaultValue(20); b.Property("Members") .HasColumnType("INTEGER"); b.Property("MongoVersion") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Namespace") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("RetentionDays") .HasColumnType("INTEGER"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("StorageSize") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("StorageLinkId"); b.HasIndex("TenantId"); b.HasIndex("KubernetesClusterId", "Name", "Namespace") .IsUnique(); b.ToTable("MongoClusters"); }); modelBuilder.Entity("EntKube.Web.Data.MongoDatabase", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("MongoClusterId") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Owner") .IsRequired() .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("MongoClusterId", "Name") .IsUnique(); b.ToTable("MongoDatabases"); }); modelBuilder.Entity("EntKube.Web.Data.NotificationChannel", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ConfigurationJson") .IsRequired() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("IsEnabled") .HasColumnType("INTEGER"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("SeverityFilter") .IsRequired() .HasMaxLength(30) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.Property("Type") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("NotificationChannels"); }); modelBuilder.Entity("EntKube.Web.Data.NotificationDelivery", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ChannelId") .HasColumnType("TEXT"); b.Property("Error") .HasMaxLength(1000) .HasColumnType("TEXT"); b.Property("IncidentId") .HasColumnType("TEXT"); b.Property("IsFiring") .HasColumnType("INTEGER"); b.Property("SentAt") .HasColumnType("TEXT"); b.Property("Success") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("ChannelId"); b.HasIndex("IncidentId", "ChannelId", "IsFiring"); b.ToTable("NotificationDeliveries"); }); modelBuilder.Entity("EntKube.Web.Data.OpenStackConnection", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AuthUrl") .IsRequired() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasColumnType("TEXT"); b.Property("ProjectDomainName") .HasColumnType("TEXT"); b.Property("ProjectId") .HasColumnType("TEXT"); b.Property("ProjectName") .HasColumnType("TEXT"); b.Property("Region") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.Property("UserDomainName") .HasColumnType("TEXT"); b.Property("Username") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId"); b.ToTable("OpenStackConnections"); }); modelBuilder.Entity("EntKube.Web.Data.RabbitMQBackup", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ClusterName") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("CompletedAt") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("ObjectKey") .IsRequired() .HasMaxLength(1024) .HasColumnType("TEXT"); b.Property("RabbitMQClusterId") .HasColumnType("TEXT"); b.Property("SizeBytes") .HasColumnType("INTEGER"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("RabbitMQClusterId"); b.HasIndex("StorageLinkId"); b.ToTable("RabbitMQBackups"); }); modelBuilder.Entity("EntKube.Web.Data.RabbitMQCluster", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("BackupSchedule") .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("MaxBackups") .ValueGeneratedOnAdd() .HasColumnType("INTEGER") .HasDefaultValue(10); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Namespace") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("RabbitMQVersion") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Replicas") .HasColumnType("INTEGER"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("StorageClass") .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("StorageSize") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("StorageLinkId"); b.HasIndex("TenantId"); b.HasIndex("KubernetesClusterId", "Name", "Namespace") .IsUnique(); b.ToTable("RabbitMQClusters"); }); modelBuilder.Entity("EntKube.Web.Data.RedisCluster", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ClusterSize") .HasColumnType("INTEGER"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("LastError") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Namespace") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("PersistenceEnabled") .HasColumnType("INTEGER"); b.Property("RedisVersion") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.Property("StorageClass") .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("StorageSize") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId"); b.HasIndex("KubernetesClusterId", "Name", "Namespace") .IsUnique(); b.ToTable("RedisClusters"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresDatabase", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Owner") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("RegisteredPostgresInstanceId") .HasColumnType("TEXT"); b.Property("Status") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("RegisteredPostgresInstanceId", "Name") .IsUnique(); b.ToTable("RegisteredPostgresDatabases"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresDump", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("RegisteredPostgresDatabaseId") .HasColumnType("TEXT"); b.Property("S3Key") .IsRequired() .HasMaxLength(1024) .HasColumnType("TEXT"); b.Property("SizeBytes") .HasColumnType("INTEGER"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("RegisteredPostgresDatabaseId"); b.HasIndex("StorageLinkId"); b.ToTable("RegisteredPostgresDumps"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresInstance", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AdminPodName") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("AdminUsername") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Namespace") .IsRequired() .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("Notes") .HasMaxLength(1000) .HasColumnType("TEXT"); b.Property("Port") .HasColumnType("INTEGER"); b.Property("ServiceName") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("KubernetesClusterId"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("RegisteredPostgresInstances"); }); modelBuilder.Entity("EntKube.Web.Data.SecretVault", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("EncryptedDataKey") .IsRequired() .HasColumnType("BLOB"); b.Property("Nonce") .IsRequired() .HasColumnType("BLOB"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId") .IsUnique(); b.ToTable("SecretVaults"); }); modelBuilder.Entity("EntKube.Web.Data.SlaTarget", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("CustomerId") .HasColumnType("TEXT"); b.Property("MeasurementWindowDays") .HasColumnType("INTEGER"); b.Property("TargetPercent") .HasColumnType("REAL"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("AppId"); b.HasIndex("CustomerId"); b.HasIndex("TenantId", "CustomerId", "AppId") .IsUnique(); b.ToTable("SlaTargets"); }); modelBuilder.Entity("EntKube.Web.Data.StorageBinding", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppDeploymentId") .HasColumnType("TEXT"); b.Property("ComponentId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("KubernetesSecretName") .IsRequired() .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("LastSyncedAt") .HasColumnType("TEXT"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("SyncEnabled") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("AppDeploymentId"); b.HasIndex("ComponentId"); b.HasIndex("StorageLinkId"); b.ToTable("StorageBindings"); }); modelBuilder.Entity("EntKube.Web.Data.StorageLink", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("BucketName") .HasColumnType("TEXT"); b.Property("ComponentId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Endpoint") .HasColumnType("TEXT"); b.Property("EnvironmentId") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasColumnType("TEXT"); b.Property("Notes") .HasColumnType("TEXT"); b.Property("OpenStackConnectionId") .HasColumnType("TEXT"); b.Property("Provider") .HasColumnType("INTEGER"); b.Property("Region") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ComponentId"); b.HasIndex("EnvironmentId"); b.HasIndex("OpenStackConnectionId"); b.HasIndex("TenantId"); b.ToTable("StorageLinks"); }); modelBuilder.Entity("EntKube.Web.Data.Tenant", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Slug") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("Slug") .IsUnique(); b.ToTable("Tenants"); }); modelBuilder.Entity("EntKube.Web.Data.TenantMembership", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.Property("JoinedAt") .HasColumnType("TEXT"); b.Property("RoleId") .HasColumnType("TEXT"); b.HasKey("UserId", "TenantId"); b.HasIndex("RoleId"); b.HasIndex("TenantId"); b.ToTable("TenantMemberships"); }); modelBuilder.Entity("EntKube.Web.Data.TenantRole", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("TenantRoles"); }); modelBuilder.Entity("EntKube.Web.Data.VaultSecret", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AppId") .HasColumnType("TEXT"); b.Property("CnpgClusterId") .HasColumnType("TEXT"); b.Property("CnpgDatabaseId") .HasColumnType("TEXT"); b.Property("ComponentId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("EncryptedValue") .IsRequired() .HasColumnType("BLOB"); b.Property("KubernetesClusterId") .HasColumnType("TEXT"); b.Property("KubernetesNamespace") .HasMaxLength(63) .HasColumnType("TEXT"); b.Property("KubernetesSecretName") .HasMaxLength(253) .HasColumnType("TEXT"); b.Property("MongoClusterId") .HasColumnType("TEXT"); b.Property("MongoDatabaseId") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Nonce") .IsRequired() .HasColumnType("BLOB"); b.Property("OpenStackConnectionId") .HasColumnType("TEXT"); b.Property("RabbitMQClusterId") .HasColumnType("TEXT"); b.Property("RedisClusterId") .HasColumnType("TEXT"); b.Property("RegisteredPostgresDatabaseId") .HasColumnType("TEXT"); b.Property("StorageLinkId") .HasColumnType("TEXT"); b.Property("SyncToKubernetes") .HasColumnType("INTEGER"); b.Property("UpdatedAt") .HasColumnType("TEXT"); b.Property("VaultId") .HasColumnType("TEXT"); b.Property("VpnRemoteEndpointId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("AppId"); b.HasIndex("CnpgClusterId"); b.HasIndex("CnpgDatabaseId"); b.HasIndex("ComponentId"); b.HasIndex("KubernetesClusterId"); b.HasIndex("MongoClusterId"); b.HasIndex("MongoDatabaseId"); b.HasIndex("RabbitMQClusterId"); b.HasIndex("RedisClusterId"); b.HasIndex("RegisteredPostgresDatabaseId"); b.HasIndex("StorageLinkId"); b.HasIndex("VpnRemoteEndpointId"); b.HasIndex("VaultId", "AppId", "Name") .IsUnique(); b.HasIndex("VaultId", "ComponentId", "Name") .IsUnique(); b.ToTable("VaultSecrets"); }); modelBuilder.Entity("EntKube.Web.Data.VpnLocalEndpoint", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ClusterId") .HasColumnType("TEXT"); b.Property("ComponentId") .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("PublicIp") .HasMaxLength(45) .HasColumnType("TEXT"); b.Property("Role") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Status") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Subnets") .IsRequired() .HasMaxLength(1000) .HasColumnType("TEXT"); b.Property("VpnTunnelId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("ClusterId"); b.HasIndex("ComponentId"); b.HasIndex("VpnTunnelId"); b.ToTable("VpnLocalEndpoints"); }); modelBuilder.Entity("EntKube.Web.Data.VpnRemoteEndpoint", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("AuthMode") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("LastSeenAt") .HasColumnType("TEXT"); b.Property("LocalId") .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("PublicIp") .IsRequired() .HasMaxLength(45) .HasColumnType("TEXT"); b.Property("RemoteId") .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("Status") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("Subnets") .IsRequired() .HasMaxLength(1000) .HasColumnType("TEXT"); b.Property("VpnTunnelId") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("VpnTunnelId"); b.ToTable("VpnRemoteEndpoints"); }); modelBuilder.Entity("EntKube.Web.Data.VpnTunnel", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); b.Property("ChildLifetime") .HasColumnType("INTEGER"); b.Property("CreatedAt") .HasColumnType("TEXT"); b.Property("Description") .HasColumnType("TEXT"); b.Property("DpdDelay") .HasColumnType("INTEGER"); b.Property("DpdTimeout") .HasColumnType("INTEGER"); b.Property("EspProposal") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("IkeLifetime") .HasColumnType("INTEGER"); b.Property("IkeProposal") .IsRequired() .HasMaxLength(100) .HasColumnType("TEXT"); b.Property("IkeVersion") .HasColumnType("INTEGER"); b.Property("LastStatusCheckAt") .HasColumnType("TEXT"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Status") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.Property("TenantId") .HasColumnType("TEXT"); b.Property("TunnelType") .IsRequired() .HasMaxLength(20) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TenantId", "Name") .IsUnique(); b.ToTable("VpnTunnels"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Name") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("RoleId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("ProviderKey") .HasColumnType("TEXT"); b.Property("ProviderDisplayName") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("RoleId") .HasColumnType("TEXT"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("Name") .HasColumnType("TEXT"); b.Property("Value") .HasColumnType("TEXT"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("EntKube.Web.Data.AlertIncident", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "Cluster") .WithMany() .HasForeignKey("ClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Cluster"); }); modelBuilder.Entity("EntKube.Web.Data.App", b => { b.HasOne("EntKube.Web.Data.Customer", "Customer") .WithMany("Apps") .HasForeignKey("CustomerId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Customer"); }); modelBuilder.Entity("EntKube.Web.Data.AppDeployment", b => { b.HasOne("EntKube.Web.Data.App", "App") .WithMany("Deployments") .HasForeignKey("AppId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.KubernetesCluster", "Cluster") .WithMany() .HasForeignKey("ClusterId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("EntKube.Web.Data.Environment", "Environment") .WithMany() .HasForeignKey("EnvironmentId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("App"); b.Navigation("Cluster"); b.Navigation("Environment"); }); modelBuilder.Entity("EntKube.Web.Data.AppEnvironment", b => { b.HasOne("EntKube.Web.Data.App", "App") .WithMany("AppEnvironments") .HasForeignKey("AppId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.Environment", "Environment") .WithMany("AppEnvironments") .HasForeignKey("EnvironmentId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("App"); b.Navigation("Environment"); }); modelBuilder.Entity("EntKube.Web.Data.AuditEvent", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "Deployment") .WithMany() .HasForeignKey("DeploymentId") .OnDelete(DeleteBehavior.Cascade); b.Navigation("Deployment"); }); modelBuilder.Entity("EntKube.Web.Data.ClusterComponent", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "Cluster") .WithMany("Components") .HasForeignKey("ClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Cluster"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgBackup", b => { b.HasOne("EntKube.Web.Data.CnpgCluster", "CnpgCluster") .WithMany("Backups") .HasForeignKey("CnpgClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CnpgCluster"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgCluster", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("KubernetesCluster"); b.Navigation("StorageLink"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgDatabase", b => { b.HasOne("EntKube.Web.Data.CnpgCluster", "CnpgCluster") .WithMany("Databases") .HasForeignKey("CnpgClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CnpgCluster"); }); modelBuilder.Entity("EntKube.Web.Data.Customer", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany("Customers") .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.CustomerAccess", b => { b.HasOne("EntKube.Web.Data.Customer", "Customer") .WithMany() .HasForeignKey("CustomerId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.ApplicationUser", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Customer"); b.Navigation("User"); }); modelBuilder.Entity("EntKube.Web.Data.DatabaseBinding", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "AppDeployment") .WithMany("DatabaseBindings") .HasForeignKey("AppDeploymentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.CnpgDatabase", "CnpgDatabase") .WithMany("DatabaseBindings") .HasForeignKey("CnpgDatabaseId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.MongoDatabase", "MongoDatabase") .WithMany("DatabaseBindings") .HasForeignKey("MongoDatabaseId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.RegisteredPostgresDatabase", "RegisteredPostgresDatabase") .WithMany("DatabaseBindings") .HasForeignKey("RegisteredPostgresDatabaseId") .OnDelete(DeleteBehavior.Cascade); b.Navigation("AppDeployment"); b.Navigation("CnpgDatabase"); b.Navigation("MongoDatabase"); b.Navigation("RegisteredPostgresDatabase"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentHealthSnapshot", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "Deployment") .WithMany() .HasForeignKey("DeploymentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Deployment"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentManifest", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "Deployment") .WithMany("Manifests") .HasForeignKey("DeploymentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Deployment"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentResource", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "Deployment") .WithMany("Resources") .HasForeignKey("DeploymentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.DeploymentResource", "ParentResource") .WithMany("ChildResources") .HasForeignKey("ParentResourceId") .OnDelete(DeleteBehavior.Restrict); b.Navigation("Deployment"); b.Navigation("ParentResource"); }); modelBuilder.Entity("EntKube.Web.Data.DockerRegistryCredential", b => { b.HasOne("EntKube.Web.Data.App", "App") .WithMany() .HasForeignKey("AppId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.SecretVault", "Vault") .WithMany() .HasForeignKey("VaultId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("App"); b.Navigation("KubernetesCluster"); b.Navigation("Vault"); }); modelBuilder.Entity("EntKube.Web.Data.Environment", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany("Environments") .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.ExternalRoute", b => { b.HasOne("EntKube.Web.Data.ClusterComponent", "Component") .WithMany("ExternalRoutes") .HasForeignKey("ComponentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Component"); }); modelBuilder.Entity("EntKube.Web.Data.ExternalRouteHealthHistory", b => { b.HasOne("EntKube.Web.Data.ExternalRoute", "Route") .WithMany() .HasForeignKey("RouteId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Route"); }); modelBuilder.Entity("EntKube.Web.Data.Group", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany("Groups") .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.GroupMembership", b => { b.HasOne("EntKube.Web.Data.Group", "Group") .WithMany("Memberships") .HasForeignKey("GroupId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.ApplicationUser", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Group"); b.Navigation("User"); }); modelBuilder.Entity("EntKube.Web.Data.HarborComponentConfig", b => { b.HasOne("EntKube.Web.Data.ClusterComponent", "ClusterComponent") .WithMany() .HasForeignKey("ClusterComponentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.CnpgDatabase", "CnpgDatabase") .WithMany() .HasForeignKey("CnpgDatabaseId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("ClusterComponent"); b.Navigation("CnpgDatabase"); b.Navigation("StorageLink"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.HarborProject", b => { b.HasOne("EntKube.Web.Data.HarborComponentConfig", "HarborComponentConfig") .WithMany() .HasForeignKey("HarborComponentConfigId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.App", "LinkedApp") .WithMany() .HasForeignKey("LinkedAppId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("HarborComponentConfig"); b.Navigation("LinkedApp"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.IncidentNote", b => { b.HasOne("EntKube.Web.Data.AlertIncident", "Incident") .WithMany("Notes") .HasForeignKey("IncidentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Incident"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakBackup", b => { b.HasOne("EntKube.Web.Data.KeycloakRealm", "Realm") .WithMany("Backups") .HasForeignKey("KeycloakRealmId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("Realm"); b.Navigation("StorageLink"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakComponentConfig", b => { b.HasOne("EntKube.Web.Data.ClusterComponent", "ClusterComponent") .WithMany() .HasForeignKey("ClusterComponentId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.CnpgDatabase", "CnpgDatabase") .WithMany() .HasForeignKey("CnpgDatabaseId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.RegisteredPostgresDatabase", "RegisteredPostgresDatabase") .WithMany() .HasForeignKey("RegisteredPostgresDatabaseId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("ClusterComponent"); b.Navigation("CnpgDatabase"); b.Navigation("RegisteredPostgresDatabase"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakRealm", b => { b.HasOne("EntKube.Web.Data.KeycloakComponentConfig", "ComponentConfig") .WithMany("Realms") .HasForeignKey("KeycloakComponentConfigId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.KeycloakTheme", "Theme") .WithMany("Realms") .HasForeignKey("KeycloakThemeId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.App", "LinkedApp") .WithMany() .HasForeignKey("LinkedAppId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("ComponentConfig"); b.Navigation("LinkedApp"); b.Navigation("Theme"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakTheme", b => { b.HasOne("EntKube.Web.Data.KeycloakComponentConfig", "ComponentConfig") .WithMany() .HasForeignKey("KeycloakComponentConfigId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("ComponentConfig"); }); modelBuilder.Entity("EntKube.Web.Data.KubernetesCluster", b => { b.HasOne("EntKube.Web.Data.Environment", "Environment") .WithMany("KubernetesClusters") .HasForeignKey("EnvironmentId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany("KubernetesClusters") .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Environment"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.MaintenanceWindow", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "Cluster") .WithMany() .HasForeignKey("ClusterId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Cluster"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.MessagingBinding", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "AppDeployment") .WithMany() .HasForeignKey("AppDeploymentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.RabbitMQCluster", "Cluster") .WithMany() .HasForeignKey("RabbitMQClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("AppDeployment"); b.Navigation("Cluster"); }); modelBuilder.Entity("EntKube.Web.Data.MongoBackup", b => { b.HasOne("EntKube.Web.Data.MongoCluster", "MongoCluster") .WithMany("Backups") .HasForeignKey("MongoClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("MongoCluster"); }); modelBuilder.Entity("EntKube.Web.Data.MongoCluster", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("KubernetesCluster"); b.Navigation("StorageLink"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.MongoDatabase", b => { b.HasOne("EntKube.Web.Data.MongoCluster", "MongoCluster") .WithMany("Databases") .HasForeignKey("MongoClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("MongoCluster"); }); modelBuilder.Entity("EntKube.Web.Data.NotificationChannel", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.NotificationDelivery", b => { b.HasOne("EntKube.Web.Data.NotificationChannel", "Channel") .WithMany("Deliveries") .HasForeignKey("ChannelId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.AlertIncident", "Incident") .WithMany("Deliveries") .HasForeignKey("IncidentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Channel"); b.Navigation("Incident"); }); modelBuilder.Entity("EntKube.Web.Data.OpenStackConnection", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.RabbitMQBackup", b => { b.HasOne("EntKube.Web.Data.RabbitMQCluster", "Cluster") .WithMany("Backups") .HasForeignKey("RabbitMQClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("Cluster"); b.Navigation("StorageLink"); }); modelBuilder.Entity("EntKube.Web.Data.RabbitMQCluster", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("KubernetesCluster"); b.Navigation("StorageLink"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.RedisCluster", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("KubernetesCluster"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresDatabase", b => { b.HasOne("EntKube.Web.Data.RegisteredPostgresInstance", "RegisteredPostgresInstance") .WithMany("Databases") .HasForeignKey("RegisteredPostgresInstanceId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("RegisteredPostgresInstance"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresDump", b => { b.HasOne("EntKube.Web.Data.RegisteredPostgresDatabase", "RegisteredPostgresDatabase") .WithMany() .HasForeignKey("RegisteredPostgresDatabaseId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("RegisteredPostgresDatabase"); b.Navigation("StorageLink"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresInstance", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("KubernetesCluster"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.SecretVault", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithOne("Vault") .HasForeignKey("EntKube.Web.Data.SecretVault", "TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.SlaTarget", b => { b.HasOne("EntKube.Web.Data.App", "App") .WithMany() .HasForeignKey("AppId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.Customer", "Customer") .WithMany() .HasForeignKey("CustomerId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("App"); b.Navigation("Customer"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.StorageBinding", b => { b.HasOne("EntKube.Web.Data.AppDeployment", "AppDeployment") .WithMany("StorageBindings") .HasForeignKey("AppDeploymentId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.ClusterComponent", "Component") .WithMany("StorageBindings") .HasForeignKey("ComponentId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany("StorageBindings") .HasForeignKey("StorageLinkId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("AppDeployment"); b.Navigation("Component"); b.Navigation("StorageLink"); }); modelBuilder.Entity("EntKube.Web.Data.StorageLink", b => { b.HasOne("EntKube.Web.Data.ClusterComponent", "Component") .WithMany() .HasForeignKey("ComponentId"); b.HasOne("EntKube.Web.Data.Environment", "Environment") .WithMany() .HasForeignKey("EnvironmentId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.OpenStackConnection", "OpenStackConnection") .WithMany("StorageLinks") .HasForeignKey("OpenStackConnectionId"); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Component"); b.Navigation("Environment"); b.Navigation("OpenStackConnection"); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.TenantMembership", b => { b.HasOne("EntKube.Web.Data.TenantRole", "Role") .WithMany("Memberships") .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany("Memberships") .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.ApplicationUser", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Role"); b.Navigation("Tenant"); b.Navigation("User"); }); modelBuilder.Entity("EntKube.Web.Data.TenantRole", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany("Roles") .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("EntKube.Web.Data.VaultSecret", b => { b.HasOne("EntKube.Web.Data.App", "App") .WithMany("Secrets") .HasForeignKey("AppId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.CnpgCluster", "CnpgCluster") .WithMany() .HasForeignKey("CnpgClusterId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.CnpgDatabase", "CnpgDatabase") .WithMany() .HasForeignKey("CnpgDatabaseId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.ClusterComponent", "Component") .WithMany("Secrets") .HasForeignKey("ComponentId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.KubernetesCluster", "KubernetesCluster") .WithMany() .HasForeignKey("KubernetesClusterId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.MongoCluster", "MongoCluster") .WithMany() .HasForeignKey("MongoClusterId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.MongoDatabase", "MongoDatabase") .WithMany() .HasForeignKey("MongoDatabaseId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.RabbitMQCluster", "RabbitMQCluster") .WithMany() .HasForeignKey("RabbitMQClusterId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.RedisCluster", "RedisCluster") .WithMany() .HasForeignKey("RedisClusterId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.RegisteredPostgresDatabase", "RegisteredPostgresDatabase") .WithMany() .HasForeignKey("RegisteredPostgresDatabaseId") .OnDelete(DeleteBehavior.Cascade); b.HasOne("EntKube.Web.Data.StorageLink", "StorageLink") .WithMany() .HasForeignKey("StorageLinkId"); b.HasOne("EntKube.Web.Data.SecretVault", "Vault") .WithMany("Secrets") .HasForeignKey("VaultId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.VpnRemoteEndpoint", "VpnRemoteEndpoint") .WithMany("Secrets") .HasForeignKey("VpnRemoteEndpointId") .OnDelete(DeleteBehavior.Cascade); b.Navigation("App"); b.Navigation("CnpgCluster"); b.Navigation("CnpgDatabase"); b.Navigation("Component"); b.Navigation("KubernetesCluster"); b.Navigation("MongoCluster"); b.Navigation("MongoDatabase"); b.Navigation("RabbitMQCluster"); b.Navigation("RedisCluster"); b.Navigation("RegisteredPostgresDatabase"); b.Navigation("StorageLink"); b.Navigation("Vault"); b.Navigation("VpnRemoteEndpoint"); }); modelBuilder.Entity("EntKube.Web.Data.VpnLocalEndpoint", b => { b.HasOne("EntKube.Web.Data.KubernetesCluster", "Cluster") .WithMany() .HasForeignKey("ClusterId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("EntKube.Web.Data.ClusterComponent", "Component") .WithMany() .HasForeignKey("ComponentId") .OnDelete(DeleteBehavior.SetNull); b.HasOne("EntKube.Web.Data.VpnTunnel", "Tunnel") .WithMany("LocalEndpoints") .HasForeignKey("VpnTunnelId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Cluster"); b.Navigation("Component"); b.Navigation("Tunnel"); }); modelBuilder.Entity("EntKube.Web.Data.VpnRemoteEndpoint", b => { b.HasOne("EntKube.Web.Data.VpnTunnel", "Tunnel") .WithMany("RemoteEndpoints") .HasForeignKey("VpnTunnelId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tunnel"); }); modelBuilder.Entity("EntKube.Web.Data.VpnTunnel", b => { b.HasOne("EntKube.Web.Data.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Tenant"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("EntKube.Web.Data.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("EntKube.Web.Data.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("EntKube.Web.Data.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("EntKube.Web.Data.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("EntKube.Web.Data.AlertIncident", b => { b.Navigation("Deliveries"); b.Navigation("Notes"); }); modelBuilder.Entity("EntKube.Web.Data.App", b => { b.Navigation("AppEnvironments"); b.Navigation("Deployments"); b.Navigation("Secrets"); }); modelBuilder.Entity("EntKube.Web.Data.AppDeployment", b => { b.Navigation("DatabaseBindings"); b.Navigation("Manifests"); b.Navigation("Resources"); b.Navigation("StorageBindings"); }); modelBuilder.Entity("EntKube.Web.Data.ClusterComponent", b => { b.Navigation("ExternalRoutes"); b.Navigation("Secrets"); b.Navigation("StorageBindings"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgCluster", b => { b.Navigation("Backups"); b.Navigation("Databases"); }); modelBuilder.Entity("EntKube.Web.Data.CnpgDatabase", b => { b.Navigation("DatabaseBindings"); }); modelBuilder.Entity("EntKube.Web.Data.Customer", b => { b.Navigation("Apps"); }); modelBuilder.Entity("EntKube.Web.Data.DeploymentResource", b => { b.Navigation("ChildResources"); }); modelBuilder.Entity("EntKube.Web.Data.Environment", b => { b.Navigation("AppEnvironments"); b.Navigation("KubernetesClusters"); }); modelBuilder.Entity("EntKube.Web.Data.Group", b => { b.Navigation("Memberships"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakComponentConfig", b => { b.Navigation("Realms"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakRealm", b => { b.Navigation("Backups"); }); modelBuilder.Entity("EntKube.Web.Data.KeycloakTheme", b => { b.Navigation("Realms"); }); modelBuilder.Entity("EntKube.Web.Data.KubernetesCluster", b => { b.Navigation("Components"); }); modelBuilder.Entity("EntKube.Web.Data.MongoCluster", b => { b.Navigation("Backups"); b.Navigation("Databases"); }); modelBuilder.Entity("EntKube.Web.Data.MongoDatabase", b => { b.Navigation("DatabaseBindings"); }); modelBuilder.Entity("EntKube.Web.Data.NotificationChannel", b => { b.Navigation("Deliveries"); }); modelBuilder.Entity("EntKube.Web.Data.OpenStackConnection", b => { b.Navigation("StorageLinks"); }); modelBuilder.Entity("EntKube.Web.Data.RabbitMQCluster", b => { b.Navigation("Backups"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresDatabase", b => { b.Navigation("DatabaseBindings"); }); modelBuilder.Entity("EntKube.Web.Data.RegisteredPostgresInstance", b => { b.Navigation("Databases"); }); modelBuilder.Entity("EntKube.Web.Data.SecretVault", b => { b.Navigation("Secrets"); }); modelBuilder.Entity("EntKube.Web.Data.StorageLink", b => { b.Navigation("StorageBindings"); }); modelBuilder.Entity("EntKube.Web.Data.Tenant", b => { b.Navigation("Customers"); b.Navigation("Environments"); b.Navigation("Groups"); b.Navigation("KubernetesClusters"); b.Navigation("Memberships"); b.Navigation("Roles"); b.Navigation("Vault"); }); modelBuilder.Entity("EntKube.Web.Data.TenantRole", b => { b.Navigation("Memberships"); }); modelBuilder.Entity("EntKube.Web.Data.VpnRemoteEndpoint", b => { b.Navigation("Secrets"); }); modelBuilder.Entity("EntKube.Web.Data.VpnTunnel", b => { b.Navigation("LocalEndpoints"); b.Navigation("RemoteEndpoints"); }); #pragma warning restore 612, 618 } } }