mod config; mod db; mod models; mod routes; use std::sync::{Arc, Mutex}; use rusqlite::Connection; use config::Config; #[derive(Clone)] pub struct AppState { pub db: Arc>, pub config: Config, } #[tokio::main] async fn main() { tracing_subscriber::fmt::init(); let config = Config::load(); let conn = db::open(&config.database_path).expect("Failed to open database"); let state = AppState { db: Arc::new(Mutex::new(conn)), config: config.clone(), }; let app = routes::router(state); let listener = tokio::net::TcpListener::bind(&config.bind).await.unwrap(); println!("🚀 Action Gateway running at http://{}", config.bind); axum::serve(listener, app).await.unwrap(); }