diff --git a/src/Server/Controllers/SearchdomainController.cs b/src/Server/Controllers/SearchdomainController.cs index 564dd88..11ca113 100644 --- a/src/Server/Controllers/SearchdomainController.cs +++ b/src/Server/Controllers/SearchdomainController.cs @@ -128,4 +128,26 @@ public class SearchdomainController : ControllerBase return Ok(new SearchdomainSearchesResults() { Searches = searchCache, Success = true }); } + + [HttpGet("GetSettings")] + public ActionResult GetSettings(string searchdomain) + { + Searchdomain searchdomain_; + try + { + searchdomain_ = _domainManager.GetSearchdomain(searchdomain); + } + catch (SearchdomainNotFoundException) + { + _logger.LogError("Unable to retrieve the searchdomain {searchdomain} - it likely does not exist yet", [searchdomain]); + return Ok(new SearchdomainSettingsResults() { Settings = null, Success = false, Message = "Searchdomain not found" }); + } + catch (Exception ex) + { + _logger.LogError("Unable to retrieve the searchdomain {searchdomain} - {ex.Message} - {ex.StackTrace}", [searchdomain, ex.Message, ex.StackTrace]); + return Ok(new SearchdomainSettingsResults() { Settings = null, Success = false, Message = ex.Message }); + } + SearchdomainSettings settings = searchdomain_.settings; + return Ok(new SearchdomainSettingsResults() { Settings = settings, Success = true }); + } } diff --git a/src/Server/Helper/DatabaseHelper.cs b/src/Server/Helper/DatabaseHelper.cs index 7113f08..fc9872f 100644 --- a/src/Server/Helper/DatabaseHelper.cs +++ b/src/Server/Helper/DatabaseHelper.cs @@ -1,6 +1,7 @@ using System.Data.Common; using System.Text; using Server.Exceptions; +using Shared.Models; namespace Server.Helper; @@ -27,12 +28,12 @@ public class DatabaseHelper(ILogger logger) helper.ExecuteSQLNonQuery(query.ToString(), parameters); } - public static int DatabaseInsertSearchdomain(SQLHelper helper, string name) + public static int DatabaseInsertSearchdomain(SQLHelper helper, string name, SearchdomainSettings settings = new()) { Dictionary parameters = new() { { "name", name }, - { "settings", "{}"} // TODO add settings. It's not used yet, but maybe it's needed someday... + { "settings", settings} }; return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO searchdomain (name, settings) VALUES (@name, @settings)", parameters); } diff --git a/src/Server/Searchdomain.cs b/src/Server/Searchdomain.cs index edd5072..053f518 100644 --- a/src/Server/Searchdomain.cs +++ b/src/Server/Searchdomain.cs @@ -14,6 +14,7 @@ public class Searchdomain public AIProvider aIProvider; public string searchdomain; public int id; + public SearchdomainSettings settings; public Dictionary searchCache; // Key: query, Value: Search results for that query (with timestamp) public List entityCache; public List modelsInUse; @@ -23,7 +24,7 @@ public class Searchdomain public SQLHelper helper; private readonly ILogger _logger; - public Searchdomain(string searchdomain, string connectionString, AIProvider aIProvider, Dictionary> embeddingCache, ILogger logger, string provider = "sqlserver", bool runEmpty = false) + public Searchdomain(string searchdomain, string connectionString, AIProvider aIProvider, Dictionary> embeddingCache, ILogger logger, string provider = "sqlserver", bool runEmpty = false, SearchdomainSettings searchdomainSettings = new()) { _connectionString = connectionString; _provider = provider.ToLower(); @@ -33,6 +34,7 @@ public class Searchdomain this._logger = logger; searchCache = []; entityCache = []; + settings = searchdomainSettings; connection = new MySqlConnection(connectionString); connection.Open(); helper = new SQLHelper(connection, connectionString); diff --git a/src/Server/Views/Home/Index.cshtml b/src/Server/Views/Home/Index.cshtml index bb496d5..01bd243 100644 --- a/src/Server/Views/Home/Index.cshtml +++ b/src/Server/Views/Home/Index.cshtml @@ -53,6 +53,7 @@
r.json()); + } + function selectDomain(domainKey) { document.querySelectorAll('.domain-item').forEach(item => { item.classList.remove('active'); @@ -479,6 +485,9 @@ function populateQueriesTable(filterText = '') { if (!queries) return; + let searchdomainConfigPromise = getSearchdomainConfig(getSelectedDomainKey()); + let configElement = document.getElementById('searchdomainConfig'); + const tbody = document.querySelector('#queriesTable tbody'); tbody.innerHTML = ''; @@ -507,6 +516,20 @@ tbody.appendChild(row); }); + + searchdomainConfigPromise.then(searchdomainConfig => { + if (searchdomainConfig != null && searchdomainConfig.Settings != null) + { + configElement.value = JSON.stringify(searchdomainConfig.Settings, null, 2); + } else { + configElement.value = 'Error fetching searchdomain config'; + console.log(searchdomainConfig); + // TODO add toast + console.error('Failed to fetch searchdomain config'); + } + }); + + } function flagSearchdomainAsErroneous(domainKey) { diff --git a/src/Shared/Models/SearchdomainModels.cs b/src/Shared/Models/SearchdomainModels.cs index 47656b6..de9ceac 100644 --- a/src/Shared/Models/SearchdomainModels.cs +++ b/src/Shared/Models/SearchdomainModels.cs @@ -16,4 +16,10 @@ public struct DateTimedSearchResult(DateTime dateTime, List results) public List AccessDateTimes { get; set; } = [dateTime]; [JsonPropertyName("Results")] public List Results { get; set; } = results; -} \ No newline at end of file +} + +public struct SearchdomainSettings(bool cacheReconciliation = false) +{ + [JsonPropertyName("CacheReconciliation")] + public bool CacheReconciliation { get; set; } = cacheReconciliation; +} diff --git a/src/Shared/Models/SearchdomainResults.cs b/src/Shared/Models/SearchdomainResults.cs index 5033753..f0d3ec4 100644 --- a/src/Shared/Models/SearchdomainResults.cs +++ b/src/Shared/Models/SearchdomainResults.cs @@ -54,3 +54,15 @@ public class SearchdomainSearchesResults [JsonPropertyName("Searches")] public required Dictionary Searches { get; set; } } + +public class SearchdomainSettingsResults +{ + [JsonPropertyName("Success")] + public required bool Success { get; set; } + + [JsonPropertyName("Message")] + public string? Message { get; set; } + + [JsonPropertyName("Settings")] + public required SearchdomainSettings? Settings { get; set; } +} \ No newline at end of file