//! Database module for GuruConnect //! //! Handles persistence for machines, sessions, and audit logging. //! Optional - server works without database if DATABASE_URL not set. pub mod machines; pub mod sessions; pub mod events; pub mod support_codes; pub mod users; pub mod releases; use anyhow::Result; use sqlx::postgres::PgPoolOptions; use sqlx::PgPool; use tracing::info; pub use machines::*; pub use sessions::*; pub use events::*; pub use support_codes::*; pub use users::*; pub use releases::*; /// Database connection pool wrapper #[derive(Clone)] pub struct Database { pool: PgPool, } impl Database { /// Initialize database connection pool pub async fn connect(database_url: &str, max_connections: u32) -> Result { info!("Connecting to database..."); let pool = PgPoolOptions::new() .max_connections(max_connections) .connect(database_url) .await?; info!("Database connection established"); Ok(Self { pool }) } /// Run database migrations pub async fn migrate(&self) -> Result<()> { info!("Running database migrations..."); sqlx::migrate!("./migrations").run(&self.pool).await?; info!("Migrations complete"); Ok(()) } /// Get reference to the connection pool pub fn pool(&self) -> &PgPool { &self.pool } }