use sqlx::MySqlPool; use tracing::info; pub async fn init_db(database_url: &str) -> Result { let pool = MySqlPool::connect(database_url).await?; // Create tables if they don't exist. Simple schema for demo/hackathon use. // Note: MySQL requires separate statements for each CREATE TABLE sqlx::query( r#" CREATE TABLE IF NOT EXISTS files ( id VARCHAR(36) PRIMARY KEY, filename TEXT NOT NULL, path TEXT NOT NULL, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, pending_analysis BOOLEAN DEFAULT TRUE, analysis_status VARCHAR(32) DEFAULT 'Queued' ) "#, ) .execute(&pool) .await?; sqlx::query( r#" CREATE TABLE IF NOT EXISTS queries ( id VARCHAR(36) PRIMARY KEY, status VARCHAR(32) NOT NULL, payload JSON, result JSON, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) "#, ) .execute(&pool) .await?; info!("Database initialized"); Ok(pool) }