diff --git a/src/game.rs b/src/game.rs index 811f0e0..678350a 100644 --- a/src/game.rs +++ b/src/game.rs @@ -1,4 +1,4 @@ -use crate::{page::new, random_names::get_name_by_uuid, Backend}; +use crate::{page::new, Backend}; use axum::{ extract::{Path, State}, response::{IntoResponse, Redirect, Response}, @@ -41,14 +41,12 @@ async fn index(State(backend): State>, cookies: CookieJar) -> Respo (rank.rank) } @if rank.uuid == client.uuid { (PreEscaped("")) } - @if let Some(name) = rank.name { (name) } @else { - "Anonymous " - (get_name_by_uuid(&rank.uuid))} + (rank.name) @if rank.uuid == client.uuid { (PreEscaped("")) } } span { (rank.amount) - } + } } } } diff --git a/src/model/highscore.rs b/src/model/highscore.rs index d980dec..0d595fd 100644 --- a/src/model/highscore.rs +++ b/src/model/highscore.rs @@ -1,17 +1,40 @@ -use crate::Backend; +use crate::{random_names::get_name_by_uuid, Backend}; -pub(crate) struct Rank { +struct RankDb { pub(crate) rank: i64, pub(crate) name: Option, pub(crate) uuid: String, pub(crate) amount: i64, } +pub(crate) struct Rank { + pub(crate) rank: i64, + pub(crate) name: String, + pub(crate) uuid: String, + pub(crate) amount: i64, +} + +impl From for Rank { + fn from(value: RankDb) -> Self { + let name = match value.name { + Some(name) => name, + None => get_name_by_uuid(&value.uuid).to_string(), + }; + + Self { + rank: value.rank, + name, + uuid: value.uuid, + amount: value.amount, + } + } +} + impl Backend { pub(crate) async fn highscore(&self) -> Vec { match self { Backend::Sqlite(db) => sqlx::query_as!( - Rank, + RankDb, "SELECT RANK() OVER (ORDER BY COUNT(s.client_uuid) DESC) as rank, c.name, @@ -24,7 +47,10 @@ impl Backend { ) .fetch_all(db) .await - .unwrap_or_default(), + .unwrap_or_default() + .into_iter() + .map(|r| r.into()) + .collect(), } } } diff --git a/src/random_names.rs b/src/random_names.rs index 957767d..52238dc 100644 --- a/src/random_names.rs +++ b/src/random_names.rs @@ -470,11 +470,11 @@ const NAMES: [&str; 467] = [ "Yellow", ]; -pub(crate) fn get_name_by_uuid(uuid: &str) -> &str { +pub(crate) fn get_name_by_uuid(uuid: &str) -> String { let mut hasher = DefaultHasher::new(); uuid.hash(&mut hasher); let hash = hasher.finish(); let index = (hash % NAMES.len() as u64) as usize; - NAMES[index] + format!("Anonymous {}", NAMES[index]) }