diff --git a/src/Client/Client.cs b/src/Client/Client.cs index 0b9e26c..29537fd 100644 --- a/src/Client/Client.cs +++ b/src/Client/Client.cs @@ -86,18 +86,104 @@ public class Client }), new StringContent(settings, Encoding.UTF8, "application/json")); } - public async Task EntityQueryAsync(string query) + public async Task SearchdomainGetQueriesAsync(string searchdomain) { - return await EntityQueryAsync(searchdomain, query); + Dictionary parameters = new() + { + {"searchdomain", searchdomain} + }; + return await GetUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain", "Queries", apiKey, parameters)); } - public async Task EntityQueryAsync(string searchdomain, string query) + public async Task SearchdomainDeleteQueryAsync(string searchdomain, string query) { - return await PostUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain", "Query", apiKey, new Dictionary() + Dictionary parameters = new() { {"searchdomain", searchdomain}, {"query", query} - }), null); + }; + return await DeleteUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain", "Query", apiKey, parameters)); + } + + public async Task SearchdomainUpdateQueryAsync(string searchdomain, string query, List results) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain}, + {"query", query} + }; + return await PatchUrlAndProcessJson( + GetUrl($"{baseUri}/Searchdomain", "Query", apiKey, parameters), + new StringContent(JsonSerializer.Serialize(results), Encoding.UTF8, "application/json")); + } + + public async Task SearchdomainQueryAsync(string query) + { + return await SearchdomainQueryAsync(searchdomain, query); + } + + public async Task SearchdomainQueryAsync(string searchdomain, string query, int? topN = null, bool returnAttributes = false) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain}, + {"query", query} + }; + if (topN is not null) parameters.Add("topN", ((int)topN).ToString()); + if (returnAttributes) parameters.Add("returnAttributes", returnAttributes.ToString()); + + return await PostUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain", "Query", apiKey, parameters), null); + } + + public async Task SearchdomainGetSettingsAsync(string searchdomain) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain} + }; + return await GetUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain", "Settings", apiKey, parameters)); + } + + public async Task SearchdomainUpdateSettingsAsync(string searchdomain, SearchdomainSettings searchdomainSettings) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain} + }; + StringContent content = new(JsonSerializer.Serialize(searchdomainSettings), Encoding.UTF8, "application/json"); + return await PutUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain", "Settings", apiKey, parameters), content); + } + + public async Task SearchdomainGetQueryCacheSizeAsync(string searchdomain) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain} + }; + return await GetUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain/QueryCache", "Size", apiKey, parameters)); + } + + public async Task SearchdomainClearQueryCache(string searchdomain) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain} + }; + return await PostUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain/QueryCache", "Clear", apiKey, parameters), null); + } + + public async Task SearchdomainGetDatabaseSizeAsync(string searchdomain) + { + Dictionary parameters = new() + { + {"searchdomain", searchdomain} + }; + return await GetUrlAndProcessJson(GetUrl($"{baseUri}/Searchdomain/Database", "Size", apiKey, parameters)); + } + + public async Task ServerGetModelsAsync() + { + return await GetUrlAndProcessJson(GetUrl($"{baseUri}/Server", "Models", apiKey, [])); } public async Task EntityIndexAsync(List jsonEntity) @@ -163,6 +249,16 @@ public class Client return result; } + private static async Task PatchUrlAndProcessJson(string url, HttpContent content) + { + using var client = new HttpClient(); + var response = await client.PatchAsync(url, content); + string responseContent = await response.Content.ReadAsStringAsync(); + var result = JsonSerializer.Deserialize(responseContent) + ?? throw new Exception($"Failed to deserialize JSON to type {typeof(T).Name}"); + return result; + } + private static async Task DeleteUrlAndProcessJson(string url) { using var client = new HttpClient();