From 21194f99d3a1cb6dc867c205330b1ea762af5005 Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Sun, 14 Dec 2025 23:13:34 +0100 Subject: [PATCH] Implemented search result endpoint --- .../Controllers/SearchdomainController.cs | 23 +++++++++++++++++++ src/Server/Models/SearchdomainModels.cs | 19 --------------- src/Server/Searchdomain.cs | 14 ++++------- src/Shared/Models/SearchdomainModels.cs | 19 +++++++++++++++ src/Shared/Models/SearchdomainResults.cs | 11 +++++++++ 5 files changed, 58 insertions(+), 28 deletions(-) delete mode 100644 src/Server/Models/SearchdomainModels.cs create mode 100644 src/Shared/Models/SearchdomainModels.cs diff --git a/src/Server/Controllers/SearchdomainController.cs b/src/Server/Controllers/SearchdomainController.cs index 4b45bbd..564dd88 100644 --- a/src/Server/Controllers/SearchdomainController.cs +++ b/src/Server/Controllers/SearchdomainController.cs @@ -105,4 +105,27 @@ public class SearchdomainController : ControllerBase } return Ok(new SearchdomainUpdateResults(){Success = true}); } + + [HttpGet("GetSearches")] + public ActionResult GetSearches(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 SearchdomainSearchesResults() { Searches = [], 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 SearchdomainSearchesResults() { Searches = [], Success = false, Message = ex.Message }); + } + Dictionary searchCache = searchdomain_.searchCache; + + return Ok(new SearchdomainSearchesResults() { Searches = searchCache, Success = true }); + } } diff --git a/src/Server/Models/SearchdomainModels.cs b/src/Server/Models/SearchdomainModels.cs deleted file mode 100644 index e91a755..0000000 --- a/src/Server/Models/SearchdomainModels.cs +++ /dev/null @@ -1,19 +0,0 @@ -using MySqlX.XDevAPI.Common; - -namespace Server.Models; -public readonly struct ResultItem(float score, string name) -{ - public readonly float Score = score; - public readonly string Name = name; -} - -public struct DateTimedSearchResult -{ - public List accessTimes; - public SearchResult Results; -} - -public readonly struct SearchResult(List results) -{ - public readonly List Results = results; -} \ No newline at end of file diff --git a/src/Server/Searchdomain.cs b/src/Server/Searchdomain.cs index 602f2cc..edd5072 100644 --- a/src/Server/Searchdomain.cs +++ b/src/Server/Searchdomain.cs @@ -3,7 +3,7 @@ using System.Data.Common; using ElmahCore.Mvc.Logger; using MySql.Data.MySqlClient; using Server.Helper; -using Server.Models; +using Shared.Models; namespace Server; @@ -155,8 +155,8 @@ public class Searchdomain { if (searchCache.TryGetValue(query, out DateTimedSearchResult cachedResult)) { - cachedResult.accessTimes.Add(DateTime.Now); - return [.. cachedResult.Results.Results.Select(r => (r.Score, r.Name))]; + cachedResult.AccessDateTimes.Add(DateTime.Now); + return [.. cachedResult.Results.Select(r => (r.Score, r.Name))]; } if (!embeddingCache.TryGetValue(query, out Dictionary? queryEmbeddings)) @@ -188,15 +188,11 @@ public class Searchdomain result.Add((entity.probMethod(datapointProbs), entity.name)); } List<(float, string)> results = [.. result.OrderByDescending(s => s.Item1)]; - SearchResult searchResult = new( + List searchResult = new( [.. results.Select(r => new ResultItem(r.Item1, r.Item2 ))] ); - searchCache[query] = new DateTimedSearchResult - { - accessTimes = [DateTime.Now], - Results = searchResult - }; + searchCache[query] = new DateTimedSearchResult(DateTime.Now, searchResult); return results; } diff --git a/src/Shared/Models/SearchdomainModels.cs b/src/Shared/Models/SearchdomainModels.cs new file mode 100644 index 0000000..47656b6 --- /dev/null +++ b/src/Shared/Models/SearchdomainModels.cs @@ -0,0 +1,19 @@ + +using System.Text.Json.Serialization; + +namespace Shared.Models; +public readonly struct ResultItem(float score, string name) +{ + [JsonPropertyName("Score")] + public readonly float Score { get; } = score; + [JsonPropertyName("Name")] + public readonly string Name { get; } = name; +} + +public struct DateTimedSearchResult(DateTime dateTime, List results) +{ + [JsonPropertyName("AccessDateTimes")] + public List AccessDateTimes { get; set; } = [dateTime]; + [JsonPropertyName("Results")] + public List Results { get; set; } = results; +} \ No newline at end of file diff --git a/src/Shared/Models/SearchdomainResults.cs b/src/Shared/Models/SearchdomainResults.cs index 2ccf500..5033753 100644 --- a/src/Shared/Models/SearchdomainResults.cs +++ b/src/Shared/Models/SearchdomainResults.cs @@ -43,3 +43,14 @@ public class SearchdomainDeleteResults [JsonPropertyName("DeletedEntities")] public required int DeletedEntities { get; set; } } + +public class SearchdomainSearchesResults +{ + [JsonPropertyName("Success")] + public required bool Success { get; set; } + + [JsonPropertyName("Message")] + public string? Message { get; set; } + [JsonPropertyName("Searches")] + public required Dictionary Searches { get; set; } +}