added gpu_score column

This commit is contained in:
2026-05-07 23:44:03 +02:00
parent bd8ee0afae
commit 92b2217723

View File

@@ -49,6 +49,8 @@ pub struct FullReport {
pub benchmark: Option<BenchmarkReport>,
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<FullReport> {
fn parse_report_row(id: i32, gpu_score: i32, data: serde_json::Value) -> Option<FullReport> {
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<Arc<AppState>>,
Path(id): Path<i32>,
) -> Result<Json<FullReport>, (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,