From b5fdf42c37319f3a8d280fed332fb4c757fdfd03 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Tue, 2 Sep 2025 08:32:46 -0400 Subject: [PATCH] allow modules to be able to specify the databases they support --- .../Infrastructure/DatabaseManager.cs | 18 +++++++++++++++++- .../Repository/ModuleDefinitionRepository.cs | 17 +++++++++++++++++ Oqtane.Shared/Models/ModuleDefinition.cs | 6 +++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/Oqtane.Server/Infrastructure/DatabaseManager.cs b/Oqtane.Server/Infrastructure/DatabaseManager.cs index 3d72ae06..4dd4ea52 100644 --- a/Oqtane.Server/Infrastructure/DatabaseManager.cs +++ b/Oqtane.Server/Infrastructure/DatabaseManager.cs @@ -476,7 +476,7 @@ namespace Oqtane.Infrastructure { index = -1; } - if (index != (versions.Length - 1)) + if (index != (versions.Length - 1) && ModuleSupportsDatabase(moduleDefinition.Databases, tenant.DBType)) { for (var i = (index + 1); i < versions.Length; i++) { @@ -789,5 +789,21 @@ namespace Oqtane.Infrastructure _configManager.AddOrUpdateSetting(SettingKeys.AvailableDatabasesSection, databases, true); } } + + private bool ModuleSupportsDatabase(string databases, string dbtype) + { + // check if module supports tenant database + if (!string.IsNullOrEmpty(databases)) + { + foreach (var database in databases.Split(',', StringSplitOptions.RemoveEmptyEntries)) + { + if (dbtype.ToLower().Contains(database.ToLower())) + { + return true; + } + } + } + return string.IsNullOrEmpty(databases); + } } } diff --git a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs index b073f5d5..10226d28 100644 --- a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs +++ b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs @@ -196,6 +196,7 @@ namespace Oqtane.Repository if (siteId != -1) { var siteKey = _tenants.GetAlias().SiteKey; + var dbType = _tenants.GetTenant().DBType; var assemblies = new List(); // get all module definition permissions for site @@ -219,6 +220,22 @@ namespace Oqtane.Repository moduledefinition.IsEnabled = moduledefinition.IsAutoEnabled; } + // check if module supports tenant database + if (moduledefinition.IsEnabled) + { + moduledefinition.IsEnabled = string.IsNullOrEmpty(moduledefinition.Databases); + if (!string.IsNullOrEmpty(moduledefinition.Databases)) + { + foreach (var database in moduledefinition.Databases.Split(',', StringSplitOptions.RemoveEmptyEntries)) + { + if (dbType.ToLower().Contains(database.ToLower())) + { + moduledefinition.IsEnabled = true; + } + } + } + } + if (moduledefinition.IsEnabled) { // build list of assemblies for site diff --git a/Oqtane.Shared/Models/ModuleDefinition.cs b/Oqtane.Shared/Models/ModuleDefinition.cs index ce344d09..a7d7b4dd 100644 --- a/Oqtane.Shared/Models/ModuleDefinition.cs +++ b/Oqtane.Shared/Models/ModuleDefinition.cs @@ -33,6 +33,7 @@ namespace Oqtane.Models SettingsType = ""; PackageName = ""; Runtimes = ""; + Databases = ""; Template = ""; Resources = null; IsAutoEnabled = true; @@ -83,7 +84,10 @@ namespace Oqtane.Models public string License { get; set; } [NotMapped] - public string Runtimes { get; set; } + public string Runtimes { get; set; } // comma-delimited list of runtimes ie. Server, WebAssembly + + [NotMapped] + public string Databases { get; set; } // comma-delimited list of database names ie. SQLServer, SQLite [NotMapped] public string Dependencies { get; set; }