use sqlx::SqlitePool;
use crate::error::{ClawError, ClawResult};
pub async fn validate_schema(pool: &SqlitePool) -> ClawResult<()> {
let required_tables = [
"active_memory",
"session_state",
"tool_output",
"context",
"memories",
"sessions",
];
let rows: Vec<(String,)> =
sqlx::query_as("SELECT name FROM sqlite_master WHERE type = 'table'")
.fetch_all(pool)
.await?;
let existing: std::collections::HashSet<&str> =
rows.iter().map(|(name,)| name.as_str()).collect();
let missing: Vec<&str> = required_tables
.iter()
.copied()
.filter(|t| !existing.contains(t))
.collect();
if missing.is_empty() {
Ok(())
} else {
Err(ClawError::Config(format!(
"schema validation failed — missing tables: {}",
missing.join(", ")
)))
}
}