42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
use sqlx::MySqlPool;
|
|
use tracing::info;
|
|
|
|
pub async fn init_db(database_url: &str) -> Result<MySqlPool, sqlx::Error> {
|
|
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)
|
|
}
|