#![allow(dead_code)]
use serde_json::{Value, json};
use crate::validation;
use crate::{engine, analytics};
pub fn process_analytics(db: &engine::Db, payload: &Value, max_body_size: usize, max_keys_per_request: usize) -> Value {
if let Err(e) = validation::validate_request(payload, max_body_size, max_keys_per_request) {
return json!({ "error": e.to_string() });
}
let query: analytics::AnalyticsQuery = match serde_json::from_value(payload.clone()) {
Ok(q) => q,
Err(e) => return json!({ "error": format!("Invalid analytics query: {}", e) }),
};
let result = match analytics::execute_query(db, &query) {
Ok(res) => res,
Err(e) => return json!({ "error": format!("Analytics execution failed: {}", e) }),
};
json!({
"result": result.result,
"metadata": {
"execution_time_ms": result.metadata.execution_time_ms,
"rows_scanned": result.metadata.rows_scanned
}
})
}