use mongodb::bson::doc; use mongodb::{Client, Collection}; use compliance_core::models::*; use super::error::DashboardError; #[derive(Clone, Debug)] pub struct Database { inner: mongodb::Database, } impl Database { pub async fn connect(uri: &str, db_name: &str) -> Result { let client = Client::with_uri_str(uri).await?; let db = client.database(db_name); db.run_command(doc! { "ping": 1 }).await?; tracing::info!("Dashboard connected to MongoDB '{db_name}'"); Ok(Self { inner: db }) } pub fn repositories(&self) -> Collection { self.inner.collection("repositories") } pub fn findings(&self) -> Collection { self.inner.collection("findings") } pub fn scan_runs(&self) -> Collection { self.inner.collection("scan_runs") } pub fn sbom_entries(&self) -> Collection { self.inner.collection("sbom_entries") } pub fn cve_alerts(&self) -> Collection { self.inner.collection("cve_alerts") } pub fn tracker_issues(&self) -> Collection { self.inner.collection("tracker_issues") } }