use sea_orm::DbBackend; use sea_orm::FromQueryResult; use sea_orm::{DatabaseConnection, Statement}; use mediarepo_core::error::{RepoError, RepoResult}; #[derive(Debug, FromQueryResult)] pub struct Counts { pub file_count: i64, pub cd_count: i64, pub tag_count: i64, pub namespace_count: i64, pub source_count: i64, pub mapping_count: i64, } pub async fn get_all_counts(db: &DatabaseConnection) -> RepoResult { let counts = Counts::find_by_statement(Statement::from_sql_and_values( DbBackend::Sqlite, r#" SELECT * FROM (SELECT COUNT(*) AS file_count FROM files), (SELECT COUNT(*) AS cd_count FROM content_descriptors), (SELECT COUNT(*) AS tag_count FROM tags), (SELECT COUNT(*) AS namespace_count FROM namespaces), (SELECT COUNT(*) AS source_count FROM sources), (SELECT COUNT(*) AS mapping_count FROM cd_tag_mappings) "#, vec![], )) .one(db) .await? .ok_or_else(|| RepoError::from("could not retrieve metadata from database"))?; Ok(counts) }