Files
DP44/enriched-qwen3-coder-next/DataPRO/WPF.DbAPI.md
2026-04-17 14:55:32 -04:00

129 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
source_files:
- DataPRO/WPF.DbAPI/App.xaml.cs
- DataPRO/WPF.DbAPI/AssemblyInfo.cs
- DataPRO/WPF.DbAPI/MainWindow.xaml.cs
generated_at: "2026-04-16T03:45:15.876106+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "967f69bee832213e"
---
# WPF.DbAPI
## Documentation: `WpfAppCore` Module (WPF.DbAPI)
---
### 1. **Purpose**
This module is a minimal WPF-based diagnostic and testing UI for the `DTS.Core.DbAPIWrapper` database API layer. It provides a simple interactive interface to invoke and inspect asynchronous database queries—specifically `TestSetupsGetAsync` and `DASGetAsync`—and display results (or errors) in JSON format. Its primary role is to validate the behavior of the underlying `DbApiWrapper` during development or integration testing, not to serve as a production UI.
---
### 2. **Public Interface**
The module exposes only one public class: `MainWindow`, which inherits from `System.Windows.Window`. All other classes (`App`, `AssemblyInfo`) are standard WPF infrastructure and do not define custom public APIs.
#### `public partial class MainWindow : Window`
- **Constructor**:
```csharp
public MainWindow()
```
Initializes the WPF window, sets up the UI via `InitializeComponent()`, instantiates a `DbApiWrapper` with fixed connection parameters (`"Burrito-Supreme"`, `"DataPRO"`, empty credentials, and `useSsl: true`, `trustServerCertificate: true`), and performs synchronous authentication using hardcoded credentials (`"Admin"` / `"DTSAdmin"`).
- **`private void Clear()`**
Resets the `errors` and `result` text blocks (UI elements) by setting their `Text` to `string.Empty`.
- **`private void EnableButtons(bool enable)`**
Enables or disables four UI buttons: `testsetupget`, `dasget`, `testId`, and `dasSerial`. Used to prevent user input during async operations.
- **`private async void GetTestSetups_Button_Click(object sender, RoutedEventArgs e)`**
Event handler for the *TestSetups* button.
- Clears UI, disables buttons, sets status text.
- Parses `testId.Text` to an `int?` (`testSetupId`).
- Invokes `_dbApiWrapper.TestSetupsGetAsync(testSetupId)` asynchronously.
- On success:
- Re-enables buttons.
- Displays the first 10 results (from `ts.Item1`) as indented JSON in `result.Text`.
- Appends any errors from `ts.Item2` (a collection of strings) to `errors.Text`.
- On exception: Shows the exception message in a modal `MessageBox`.
- **`private async void GetDAS_Button_Click(object sender, RoutedEventArgs e)`**
Event handler for the *DAS* button.
- Clears UI, disables buttons, sets status text.
- Parses `dasSerial.Text` to `string?` (`dasSerailText`).
- Invokes `_dbApiWrapper.DASGetAsync(dasSerailText)` asynchronously.
- On success:
- Re-enables buttons.
- Displays the first 10 results (from `ds.Item1`) as indented JSON in `result.Text`.
- Shows a `MessageBox` with the error code (`ds.Item2`, an `int`) if non-zero.
- *Note*: No exception handling is present in this handler—unhandled exceptions will crash the UI.
- **`private void Responsive_Button_Click(object sender, RoutedEventArgs e)`**
Event handler for the *Responsive UI* button. Displays a static message `"Responsive UI"` in a `MessageBox`.
---
### 3. **Invariants**
- **Authentication is mandatory and hardcoded**: The `MainWindow` constructor *always* calls `AuthenticateUser("Admin", "DTSAdmin")` immediately after creating the `DbApiWrapper`. No fallback or conditional logic exists.
- **UI thread affinity**: All UI updates (`result.Text`, `errors.Text`, button states) occur on the UI thread (via `async void` handlers), but no explicit `Dispatcher.Invoke` is used—relying on WPFs `async void` continuation behavior.
- **Partial result display**: Only the first 10 items of query results (`Take(10)`) are serialized and shown, regardless of total result size.
- **Error reporting is asymmetric**:
- `TestSetupsGetAsync` returns `(IEnumerable<T>, List<string>)` → errors are a list of strings.
- `DASGetAsync` returns `(IEnumerable<T>, int)` → error is an integer code.
- **No input validation beyond parsing**: Only `int.TryParse` is used for `testId`; `dasSerial.Text` is only checked for `null`/whitespace.
---
### 4. **Dependencies**
#### External Dependencies (via imports):
- `DTS.Core.DbAPIWrapper` → Provides `DbApiWrapper` class with methods:
- `Task<(IEnumerable<T>, List<string>)> TestSetupsGetAsync(int? id)`
- `Task<(IEnumerable<T>, int)> DASGetAsync(string? serial)`
- `System.Text.Json` → Used for JSON serialization (`JsonSerializer.Serialize`).
- `System.Windows` (WPF) → Core UI framework (`Window`, `RoutedEventArgs`, `MessageBox`, etc.).
#### Internal Dependencies:
- `App.xaml` and `MainWindow.xaml` (XAML files) define the UI layout and wire up event handlers (not included in source, but implied by `InitializeComponent()` and handler signatures).
- `AssemblyInfo.cs` configures WPF theme resources (no runtime logic impact beyond resource resolution).
#### What depends on this module?
- None inferred. This is a standalone diagnostic UI. No other modules reference `WpfAppCore`.
---
### 5. **Gotchas**
- **Hardcoded credentials and connection string**:
The `DbApiWrapper` is initialized with hardcoded values (`"Burrito-Supreme"`, `"DataPRO"`, `"Admin"`, `"DTSAdmin"`). This is unsafe for production and suggests this UI is strictly for local testing.
- **Inconsistent error handling**:
- `GetTestSetups_Button_Click` catches exceptions and shows a `MessageBox`.
- `GetDAS_Button_Click` does *not* catch exceptions—any failure in `DASGetAsync` will crash the app.
→ **High risk of unhandled exceptions in the DAS path.**
- **Typo in variable name**:
`dasSerailText` (instead of `dasSerialText`) is used in `GetDAS_Button_Click`. While harmless, it may cause confusion.
- **Misleading status text**:
In `GetDAS_Button_Click`, `result.Text` is set to `"Calling TestSetupsGetAsync"` instead of `"Calling DASGetAsync"`. Likely a copy-paste error.
- **No cancellation support**:
No `CancellationToken` is passed to async methods. Long-running queries may block UI responsiveness despite being `async`.
- **No validation of `testId`/`dasSerial` before calling API**:
Invalid input (e.g., non-numeric `testId`) is silently ignored (`testSetupId = null`), which may lead to unexpected API behavior (e.g., returning all test setups).
- **No logging**: Errors are only shown via `MessageBox.Show`, not persisted.
- **Assumes `Item1` is always non-null**: No null-checks before calling `.Take(10)` or `.Any()` on `ts.Item1`/`ds.Item1`. Could throw `NullReferenceException` if the API returns `null`.
- **No cleanup/disposal**: `DbApiWrapper` is not disposed, even if it implements `IDisposable`.
---
*Documentation generated from provided source files only. No external behavior of `DbApiWrapper` is assumed beyond what is observable in `MainWindow.xaml.cs`.*