Added client library

This commit is contained in:
EzFeDezy
2025-05-10 09:23:28 +02:00
parent 36d126c63f
commit 97afed4a5b
14 changed files with 322 additions and 72 deletions

142
src/Client/Client.cs Normal file
View File

@@ -0,0 +1,142 @@
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Text.Json;
using Models;
using embeddingsearch;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using System.Reflection.Metadata.Ecma335;
namespace Client;
public class Client
{
public string baseUri;
public string apiKey;
public string searchdomain;
public Client(string baseUri, string apiKey = "", string searchdomain = "")
{
this.baseUri = baseUri;
this.apiKey = apiKey;
this.searchdomain = searchdomain;
}
public Client(ILogger<Client> logger, IConfiguration configuration)
{
string? baseUri = configuration.GetSection("Embeddingsearch").GetValue<string>("BaseUri");
string? apiKey = configuration.GetSection("Embeddingsearch").GetValue<string>("ApiKey");
string? searchdomain = configuration.GetSection("Embeddingsearch").GetValue<string>("Searchdomain");
this.baseUri = baseUri ?? "";
this.apiKey = apiKey ?? "";
this.searchdomain = searchdomain ?? "";
}
public async Task<SearchdomainListResults> SearchdomainListAsync()
{
var url = $"{baseUri}/Searchdomain/List?apiKey={HttpUtility.UrlEncode(apiKey)}";
return await GetUrlAndProcessJson<SearchdomainListResults>(url);
}
public async Task<SearchdomainDeleteResults> SearchdomainDeleteAsync()
{
return await SearchdomainDeleteAsync(searchdomain);
}
public async Task<SearchdomainDeleteResults> SearchdomainDeleteAsync(string searchdomain)
{
var url = $"{baseUri}/Searchdomain/Delete?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}";
return await GetUrlAndProcessJson<SearchdomainDeleteResults>(url);
}
public async Task<SearchdomainCreateResults> SearchdomainCreateAsync()
{
return await SearchdomainCreateAsync(searchdomain);
}
public async Task<SearchdomainCreateResults> SearchdomainCreateAsync(string searchdomain)
{
var url = $"{baseUri}/Searchdomain/Create?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}";
return await GetUrlAndProcessJson<SearchdomainCreateResults>(url);
}
public async Task<SearchdomainUpdateResults> SearchdomainUpdateAsync(string newName, string settings = "{}")
{
SearchdomainUpdateResults updateResults = await SearchdomainUpdateAsync(searchdomain, newName, settings);
searchdomain = newName;
return updateResults;
}
public async Task<SearchdomainUpdateResults> SearchdomainUpdateAsync(string searchdomain, string newName, string settings = "{}")
{
var url = $"{baseUri}/Searchdomain/Update?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}&newName={HttpUtility.UrlEncode(newName)}&settings={HttpUtility.UrlEncode(settings)}";
return await GetUrlAndProcessJson<SearchdomainUpdateResults>(url);
}
public async Task<EntityQueryResults> EntityQueryAsync(string query)
{
return await EntityQueryAsync(searchdomain, query);
}
public async Task<EntityQueryResults> EntityQueryAsync(string searchdomain, string query)
{
var url = $"{baseUri}/Entity/Query?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}&query={HttpUtility.UrlEncode(query)}";
return await GetUrlAndProcessJson<EntityQueryResults>(url);
}
public async Task<EntityIndexResult> EntityIndexAsync(List<JSONEntity> jsonEntity)
{
return await EntityIndexAsync(searchdomain, jsonEntity);
}
public async Task<EntityIndexResult> EntityIndexAsync(string searchdomain, List<JSONEntity> jsonEntity)
{
return await EntityIndexAsync(searchdomain, JsonSerializer.Serialize(jsonEntity));
}
public async Task<EntityIndexResult> EntityIndexAsync(string jsonEntity)
{
return await EntityIndexAsync(searchdomain, jsonEntity);
}
public async Task<EntityIndexResult> EntityIndexAsync(string searchdomain, string jsonEntity)
{
var url = $"{baseUri}/Entity/Index?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}&jsonEntity={HttpUtility.UrlEncode(jsonEntity)}";
return await GetUrlAndProcessJson<EntityIndexResult>(url);
}
public async Task<EntityListResults> EntityListAsync(bool returnEmbeddings = false)
{
return await EntityListAsync(searchdomain, returnEmbeddings);
}
public async Task<EntityListResults> EntityListAsync(string searchdomain, bool returnEmbeddings = false)
{
var url = $"{baseUri}/Entity/List?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}&returnEmbeddings={HttpUtility.UrlEncode(returnEmbeddings.ToString())}";
return await GetUrlAndProcessJson<EntityListResults>(url);
}
public async Task<EntityDeleteResults> EntityDeleteAsync(string entityName)
{
return await EntityDeleteAsync(searchdomain, entityName);
}
public async Task<EntityDeleteResults> EntityDeleteAsync(string searchdomain, string entityName)
{
var url = $"{baseUri}/Entity/Delete?apiKey={HttpUtility.UrlEncode(apiKey)}&searchdomain={HttpUtility.UrlEncode(searchdomain)}&entity={HttpUtility.UrlEncode(entityName)}";
return await GetUrlAndProcessJson<EntityDeleteResults>(url);
}
private static async Task<T> GetUrlAndProcessJson<T>(string url)
{
using var client = new HttpClient();
var response = await client.GetAsync(url);
string content = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<T>(content)
?? throw new Exception($"Failed to deserialize JSON to type {typeof(T).Name}");
return result;
}
}