From 92b22177230179fbe4e7ff69bcac67239a5ee54f Mon Sep 17 00:00:00 2001 From: eiiko6 Date: Thu, 7 May 2026 23:44:03 +0200 Subject: [PATCH] added gpu_score column --- server/src/main.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index e6b1f1c..bf450ab 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -49,6 +49,8 @@ pub struct FullReport { pub benchmark: Option, pub client_version: String, pub signature: String, + #[serde(default)] + pub gpu_score: i32, } #[derive(Deserialize)] @@ -92,9 +94,10 @@ async fn submit( Ok((StatusCode::CREATED, Json(row.0))) } -fn parse_report_row(id: i32, data: serde_json::Value) -> Option { +fn parse_report_row(id: i32, gpu_score: i32, data: serde_json::Value) -> Option { let mut report: FullReport = serde_json::from_value(data).ok()?; report.id = Some(id); + report.gpu_score = gpu_score; Some(report) } @@ -105,9 +108,9 @@ async fn get_leaderboard( let limit = pagination.limit.unwrap_or(10); let offset = pagination.offset.unwrap_or(0); - let rows: Vec<(i32, serde_json::Value)> = sqlx::query_as( + let rows: Vec<(i32, i32, serde_json::Value)> = sqlx::query_as( r#" - SELECT id, data FROM ( + SELECT id, gpu_score, data FROM ( SELECT DISTINCT ON (mac_address) id, data, score FROM reports ORDER BY mac_address, score DESC @@ -124,7 +127,7 @@ async fn get_leaderboard( let results = rows .into_iter() - .filter_map(|(id, data)| parse_report_row(id, data)) + .filter_map(|(id, gpu_score, data)| parse_report_row(id, gpu_score, data)) .collect(); Ok(Json(results)) @@ -134,15 +137,15 @@ async fn get_report_by_id( State(state): State>, Path(id): Path, ) -> Result, (StatusCode, String)> { - let row: (i32, serde_json::Value) = - sqlx::query_as("SELECT id, data FROM reports WHERE id = $1") + let row: (i32, i32, serde_json::Value) = + sqlx::query_as("SELECT id, gpu_score, data FROM reports WHERE id = $1") .bind(id) .fetch_optional(&state.db) .await .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))? .ok_or((StatusCode::NOT_FOUND, "Report not found".to_string()))?; - let report = parse_report_row(row.0, row.1).ok_or(( + let report = parse_report_row(row.0, row.1, row.2).ok_or(( StatusCode::INTERNAL_SERVER_ERROR, "Failed to parse stored data".to_string(), ))?; @@ -174,6 +177,7 @@ async fn main() -> anyhow::Result<()> { id SERIAL PRIMARY KEY, mac_address TEXT NOT NULL, score BIGINT NOT NULL, + gpu_score INTEGER NOT NULL DEFAULT 0, timestamp TEXT NOT NULL, client_version TEXT NOT NULL, signature TEXT,