added gpu_score column
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user