nekrochan/src/db/local_stats.rs

31 řádky
832 B
Rust

use sqlx::query_as;
use super::models::LocalStats;
use crate::{ctx::Ctx, error::NekrochanError};
impl LocalStats {
pub async fn read(ctx: &Ctx) -> Result<Self, NekrochanError> {
let (post_count,) = query_as(
"SELECT COALESCE(SUM(last_value)::bigint, 0) FROM pg_sequences WHERE sequencename LIKE 'posts_%_id_seq'",
)
.fetch_one(ctx.db())
.await?;
let (file_count, file_size) = query_as(
r#"SELECT COUNT(files), COALESCE(SUM((files->>'size')::bigint)::bigint, 0) FROM (
SELECT jsonb_array_elements(files) AS files FROM overboard
) flatten"#,
)
.fetch_one(ctx.db())
.await?;
let stats = Self {
post_count,
file_count,
file_size,
};
Ok(stats)
}
}