From 8bf09d9088cbcb0fdf9cb3238e4734842e02fcd0 Mon Sep 17 00:00:00 2001 From: Nexusls Date: Wed, 9 Apr 2025 10:00:17 +0200 Subject: [PATCH] Add: SearchWindow with Id and string search --- PrototypWPFHAG/Images/pdf-icon.png | Bin 0 -> 10565 bytes PrototypWPFHAG/MainWindow.xaml.cs | 4 +- PrototypWPFHAG/PdfServiceClient.cs | 52 ++++ PrototypWPFHAG/PrototypWPFHAG.csproj | 5 + PrototypWPFHAG/SearchWindow.xaml | 211 ++++++++++++--- PrototypWPFHAG/SearchWindow.xaml.cs | 385 ++++++++++++++++++++++++++- 6 files changed, 606 insertions(+), 51 deletions(-) create mode 100644 PrototypWPFHAG/Images/pdf-icon.png create mode 100644 PrototypWPFHAG/PdfServiceClient.cs diff --git a/PrototypWPFHAG/Images/pdf-icon.png b/PrototypWPFHAG/Images/pdf-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..476c5b5befd5a77a027207007f382832d80e5c48 GIT binary patch literal 10565 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 CR1CcU literal 0 HcmV?d00001 diff --git a/PrototypWPFHAG/MainWindow.xaml.cs b/PrototypWPFHAG/MainWindow.xaml.cs index 17895b2..4365c5e 100644 --- a/PrototypWPFHAG/MainWindow.xaml.cs +++ b/PrototypWPFHAG/MainWindow.xaml.cs @@ -42,7 +42,7 @@ public partial class MainWindow : MetroWindow con.Open(); // Check for correct UserName - string userQuery = "SELECT COUNT(*) FROM \"User\" WHERE \"UserName\" = @username"; + string userQuery = "SELECT COUNT(*) FROM \"users\" WHERE \"username\" = @username"; using (NpgsqlCommand userCmd = new NpgsqlCommand(userQuery, con)) { userCmd.Parameters.AddWithValue("@username", username); @@ -55,7 +55,7 @@ public partial class MainWindow : MetroWindow } // Check for correct Password - string pwQuery = "SELECT COUNT(*) FROM \"User\" WHERE \"UserName\" = @username AND \"Password\" = @password"; + string pwQuery = "SELECT COUNT(*) FROM \"users\" WHERE \"username\" = @username AND \"password\" = @password"; using (NpgsqlCommand pwCmd = new NpgsqlCommand(pwQuery, con)) { pwCmd.Parameters.AddWithValue("@username", username); diff --git a/PrototypWPFHAG/PdfServiceClient.cs b/PrototypWPFHAG/PdfServiceClient.cs new file mode 100644 index 0000000..3ecfb8f --- /dev/null +++ b/PrototypWPFHAG/PdfServiceClient.cs @@ -0,0 +1,52 @@ +using System.Net.Http; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +public class DocumentResponse +{ + [JsonPropertyName("documents")] // Konsistent mit Such-Endpoint + public List Documents { get; set; } +} + +public class PdfServiceClient +{ + private readonly HttpClient _httpClient; + private const string BaseUrl = "http://localhost:8000"; // Microservice-URL + + public PdfServiceClient() + { + _httpClient = new HttpClient + { + BaseAddress = new Uri(BaseUrl), Timeout = TimeSpan.FromSeconds(30) + }; + } + + public async Task GetDocumentContentAsync(int documentId) + { + var response = await _httpClient.GetAsync($"{BaseUrl}/documents/{documentId}/markdown"); + response.EnsureSuccessStatusCode(); + var json = await response.Content.ReadAsStringAsync(); + var result = JsonSerializer.Deserialize(json); + return result.GetProperty("content").GetString(); + } + + public async Task> SearchDocumentsAsync(string query) + { + var response = await _httpClient.GetAsync($"{BaseUrl}/documents/search?query={query}"); + response.EnsureSuccessStatusCode(); + var json = await response.Content.ReadAsStringAsync(); + return JsonSerializer.Deserialize>(json); + } +} + +public class SearchResult +{ + [JsonPropertyName("id")] + public int Id { get; set; } + + [JsonPropertyName("filename")] + public string Filename { get; set; } + [JsonPropertyName("content")] + public string Content { get; set; } +} diff --git a/PrototypWPFHAG/PrototypWPFHAG.csproj b/PrototypWPFHAG/PrototypWPFHAG.csproj index 0422d05..334273d 100644 --- a/PrototypWPFHAG/PrototypWPFHAG.csproj +++ b/PrototypWPFHAG/PrototypWPFHAG.csproj @@ -14,6 +14,7 @@ + @@ -31,4 +32,8 @@ + + + + diff --git a/PrototypWPFHAG/SearchWindow.xaml b/PrototypWPFHAG/SearchWindow.xaml index 72ac88d..a8b50c6 100644 --- a/PrototypWPFHAG/SearchWindow.xaml +++ b/PrototypWPFHAG/SearchWindow.xaml @@ -1,69 +1,204 @@ - + Title="PDF-Verwaltung (Admin)" Height="600" Width="1000" + WindowTitleBrush="FireBrick" + Icon="pack://application:,,,/Images/databaseicon.png"> - + + - - + + + + - - + + - - + + - - - + + + + + + + + + + - -