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

6.9 KiB
Raw Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/WPF.DbAPI/App.xaml.cs
DataPRO/WPF.DbAPI/AssemblyInfo.cs
DataPRO/WPF.DbAPI/MainWindow.xaml.cs
2026-04-16T03:45:15.876106+00:00 Qwen/Qwen3-Coder-Next-FP8 1 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:

    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.