use crate::api::ApiClient; use anyhow::Result; use serde_json::Value; /// Generic counter function - can count anything from any table with any conditions /// /// # Examples /// ``` /// // Count all assets /// count_entities(api, "assets", None)?; /// /// // Count available assets /// count_entities(api, "assets", Some(json!({"lending_status": "Available"})))?; /// /// // Count with multiple conditions /// count_entities(api, "assets", Some(json!({ /// "lendable": true, /// "lending_status": "Available" /// })))?; /// ``` pub fn count_entities( api_client: &ApiClient, table: &str, where_conditions: Option, ) -> Result { log::debug!("Counting {} with conditions: {:?}", table, where_conditions); let response = api_client.count(table, where_conditions)?; log::debug!( "Count response: success={}, data={:?}", response.success, response.data ); // Check for database timeout errors if !response.success { if crate::api::ApiClient::is_database_timeout_error(&response.error) { log::warn!("Database timeout detected while counting {}", table); } anyhow::bail!("API error: {:?}", response.error); } Ok(response.data.unwrap_or(0)) }