From f75947a2a08df86516f075d2bbe514796c4c37d8 Mon Sep 17 00:00:00 2001 From: Checksum Date: Mon, 30 Oct 2023 22:40:25 -0500 Subject: [PATCH] perf: more efficient `/` endpoint --- src/routes/gen.rs | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/routes/gen.rs b/src/routes/gen.rs index 7f646d3..74ab2de 100644 --- a/src/routes/gen.rs +++ b/src/routes/gen.rs @@ -14,24 +14,30 @@ pub fn gen_routes(cfg: &mut web::ServiceConfig) { } #[get("/")] -async fn index(data: Data) -> impl Responder { +async fn index(data: Data) -> Result { let version = env!("CARGO_PKG_VERSION"); - let users = sqlx::query_as::<_, User>("SELECT * FROM users") - .fetch_all(&data.pool) - .await - .unwrap(); - - let files = sqlx::query_as::<_, File>("SELECT * FROM files") - .fetch_all(&data.pool) - .await - .unwrap(); - - HttpResponse::Ok().body(format!( - "This server is running Lumen v{}\nServing {} users and {} files", + + let users_count: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM users") + .fetch_one(&data.pool) + .await.expect("Failed to get user count"); + + let files_count: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM files") + .fetch_one(&data.pool) + .await.expect("Failed to get file count"); + + let total_size: i64 = sqlx::query_scalar("SELECT SUM(size) FROM files") + .fetch_one(&data.pool) + .await.expect("Failed to get total file size"); + + let response = format!( + "This server is running Lumen v{}\nServing {} users and {} files totaling {} MiB", version, - users.len(), - files.len() - )) + users_count, + files_count, + total_size / 1024 / 1024 + ); + + Ok(HttpResponse::Ok().body(response)) } #[derive(Serialize, Deserialize)]