// file: kb-app-demo-desktop/src/demo_sql_diag.rs // version: 5 //! SQL diagnostic demo commands. use ts_rs::TS; // rust-rules: derive-import /// Complete SQL diagnostic payload shown by `demo_sql_diag`. #[derive(Clone, Debug, serde::Serialize, TS)] #[serde(rename_all = "camelCase")] #[ts( export, export_to = "../frontend/ts/bindings/kb_app_demo_desktop/demo_sql_diag/DemoSqlDiagPayload.ts" )] pub(crate) struct DemoSqlDiagPayload { /// Configuration file path. pub(crate) config_path: std::string::String, /// Active profile name. pub(crate) active_profile_name: std::string::String, /// Configured database backend. pub(crate) backend: std::string::String, /// Masked PostgreSQL DSN. pub(crate) masked_dsn: std::string::String, /// PostgreSQL current schema. pub(crate) current_schema: std::option::Option, /// PostgreSQL health status. pub(crate) health_status: std::string::String, /// PostgreSQL health message. pub(crate) health_message: std::option::Option, /// Migration status. pub(crate) migration_status: std::string::String, /// Migration diagnostic message. pub(crate) migration_message: std::option::Option, /// PostgreSQL server version when available. pub(crate) server_version: std::option::Option, /// Known raw/core table diagnostics. pub(crate) tables: std::vec::Vec, } /// Loads read-only SQL diagnostics from the active profile. pub(crate) async fn load_demo_sql_diag( state: tauri::State<'_, crate::AppState>, ) -> std::result::Result { let profile = state.active_profile().clone(); let store_result = crate::connect_postgres_store(&profile).await; let store = match store_result { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; let diagnostics_result = store.backend_diagnostics().await; let diagnostics = match diagnostics_result { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error.to_string()), }; let tables_result = store.known_table_diagnostics().await; let tables = match tables_result { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error.to_string()), }; return std::result::Result::Ok(crate::DemoSqlDiagPayload { config_path: state.config_path().to_string(), active_profile_name: profile.name.clone(), backend: profile.database.backend.clone(), masked_dsn: store.options().masked_dsn(), current_schema: diagnostics.descriptor.current_schema, health_status: crate::debug_status(diagnostics.health.status), health_message: diagnostics.health.message, migration_status: crate::debug_status(diagnostics.migrations.status), migration_message: diagnostics.migrations.message, server_version: diagnostics.server_version, tables: crate::table_snapshots_from_pg(tables.as_slice()), }); }