added gpu_score column
This commit is contained in:
@@ -49,6 +49,8 @@ pub struct FullReport {
|
|||||||
pub benchmark: Option<BenchmarkReport>,
|
pub benchmark: Option<BenchmarkReport>,
|
||||||
pub client_version: String,
|
pub client_version: String,
|
||||||
pub signature: String,
|
pub signature: String,
|
||||||
|
#[serde(default)]
|
||||||
|
pub gpu_score: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@@ -92,9 +94,10 @@ async fn submit(
|
|||||||
Ok((StatusCode::CREATED, Json(row.0)))
|
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()?;
|
let mut report: FullReport = serde_json::from_value(data).ok()?;
|
||||||
report.id = Some(id);
|
report.id = Some(id);
|
||||||
|
report.gpu_score = gpu_score;
|
||||||
Some(report)
|
Some(report)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,9 +108,9 @@ async fn get_leaderboard(
|
|||||||
let limit = pagination.limit.unwrap_or(10);
|
let limit = pagination.limit.unwrap_or(10);
|
||||||
let offset = pagination.offset.unwrap_or(0);
|
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#"
|
r#"
|
||||||
SELECT id, data FROM (
|
SELECT id, gpu_score, data FROM (
|
||||||
SELECT DISTINCT ON (mac_address) id, data, score
|
SELECT DISTINCT ON (mac_address) id, data, score
|
||||||
FROM reports
|
FROM reports
|
||||||
ORDER BY mac_address, score DESC
|
ORDER BY mac_address, score DESC
|
||||||
@@ -124,7 +127,7 @@ async fn get_leaderboard(
|
|||||||
|
|
||||||
let results = rows
|
let results = rows
|
||||||
.into_iter()
|
.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();
|
.collect();
|
||||||
|
|
||||||
Ok(Json(results))
|
Ok(Json(results))
|
||||||
@@ -134,15 +137,15 @@ async fn get_report_by_id(
|
|||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
Path(id): Path<i32>,
|
Path(id): Path<i32>,
|
||||||
) -> Result<Json<FullReport>, (StatusCode, String)> {
|
) -> Result<Json<FullReport>, (StatusCode, String)> {
|
||||||
let row: (i32, serde_json::Value) =
|
let row: (i32, i32, serde_json::Value) =
|
||||||
sqlx::query_as("SELECT id, data FROM reports WHERE id = $1")
|
sqlx::query_as("SELECT id, gpu_score, data FROM reports WHERE id = $1")
|
||||||
.bind(id)
|
.bind(id)
|
||||||
.fetch_optional(&state.db)
|
.fetch_optional(&state.db)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))?
|
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))?
|
||||||
.ok_or((StatusCode::NOT_FOUND, "Report not found".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,
|
StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
"Failed to parse stored data".to_string(),
|
"Failed to parse stored data".to_string(),
|
||||||
))?;
|
))?;
|
||||||
@@ -174,6 +177,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
mac_address TEXT NOT NULL,
|
mac_address TEXT NOT NULL,
|
||||||
score BIGINT NOT NULL,
|
score BIGINT NOT NULL,
|
||||||
|
gpu_score INTEGER NOT NULL DEFAULT 0,
|
||||||
timestamp TEXT NOT NULL,
|
timestamp TEXT NOT NULL,
|
||||||
client_version TEXT NOT NULL,
|
client_version TEXT NOT NULL,
|
||||||
signature TEXT,
|
signature TEXT,
|
||||||
|
|||||||
Reference in New Issue
Block a user