31 řádky
832 B
Rust
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)
|
|
}
|
|
}
|