From 915ab79c1d2f4b6b22d9d39aba64b9b924265abd Mon Sep 17 00:00:00 2001 From: Rengan Date: Wed, 13 Aug 2025 00:29:28 +0300 Subject: [PATCH 1/6] Achviement --- src/database/player.rs | 44 ++++++++++++++++++++++++++++++++++++----- src/routes/v2/player.rs | 5 +++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/database/player.rs b/src/database/player.rs index 4ef254c..3c54db4 100644 --- a/src/database/player.rs +++ b/src/database/player.rs @@ -370,7 +370,7 @@ pub struct Achievement { pub value: Option, } -pub async fn get_achievements(ckey: &str, pool: &MySqlPool) -> Result, Error> { +pub async fn get_achievements(ckey: &str, achievement_type: Option<&str>, pool: &MySqlPool) -> Result, Error> { let mut connection = pool.acquire().await?; if !player_exists(ckey, &mut connection).await { @@ -378,11 +378,45 @@ pub async fn get_achievements(ckey: &str, pool: &MySqlPool) -> Result")] +#[get("/player/achievements?&")] pub async fn achievements( ckey: &str, + achievement_type: Option<&str>, database: &State, _api_key: ApiKey, ) -> Result, Status> { - match get_achievements(ckey, &database.pool).await { + match get_achievements(ckey, achievement_type, &database.pool).await { Ok(achievements) => Ok(Json::Ok(json!(achievements))), Err(Error::PlayerNotFound) => Err(Status::NotFound), Err(_) => Err(Status::InternalServerError), From 051dff6d8ba3befd0a4b829f28691cf9b67002d2 Mon Sep 17 00:00:00 2001 From: Rengan Date: Wed, 13 Aug 2025 00:33:28 +0300 Subject: [PATCH 2/6] E --- src/database/player.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/database/player.rs b/src/database/player.rs index 3c54db4..4fa2eab 100644 --- a/src/database/player.rs +++ b/src/database/player.rs @@ -373,11 +373,6 @@ pub struct Achievement { pub async fn get_achievements(ckey: &str, achievement_type: Option<&str>, pool: &MySqlPool) -> Result, Error> { let mut connection = pool.acquire().await?; - if !player_exists(ckey, &mut connection).await { - connection.close().await?; - return Err(Error::PlayerNotFound); - } - let mut sql = "SELECT achievement_metadata.*, achievements.value FROM achievements JOIN achievement_metadata ON achievements.achievement_key = achievement_metadata.achievement_key WHERE LOWER(achievements.ckey) = ?".to_string(); if achievement_type.is_some() { From b4d27a888b157668d43273192bf320939e5b14cd Mon Sep 17 00:00:00 2001 From: Rengan Date: Thu, 14 Aug 2025 15:45:59 +0300 Subject: [PATCH 3/6] A --- src/database/player.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/database/player.rs b/src/database/player.rs index 4fa2eab..2332917 100644 --- a/src/database/player.rs +++ b/src/database/player.rs @@ -368,18 +368,20 @@ pub struct Achievement { pub achievement_name: Option, pub achievement_description: Option, pub value: Option, + #[serde(with = "crate::serde::datetime")] + pub timestamp: NaiveDateTime, } pub async fn get_achievements(ckey: &str, achievement_type: Option<&str>, pool: &MySqlPool) -> Result, Error> { let mut connection = pool.acquire().await?; - let mut sql = "SELECT achievement_metadata.*, achievements.value FROM achievements JOIN achievement_metadata ON achievements.achievement_key = achievement_metadata.achievement_key WHERE LOWER(achievements.ckey) = ?".to_string(); + let mut sql = "SELECT achievements.value AS value, achievements.last_updated AS last_updated, achievement_metadata.achievement_key AS achievement_key, achievement_metadata.achievement_version AS achievement_version, achievement_metadata.achievement_type AS achievement_type, achievement_metadata.achievement_name AS achievement_name, achievement_metadata.achievement_description AS achievement_description FROM achievements JOIN achievement_metadata ON achievements.achievement_key = achievement_metadata.achievement_key WHERE LOWER(achievements.ckey) = ?".to_string(); if achievement_type.is_some() { sql.push_str(" AND achievement_metadata.achievement_type = ?"); } - sql.push_str("ORDER BY last_updated DESC"); + sql.push_str(" ORDER BY achievements.last_updated DESC"); let mut query = sqlx::query(&sql).bind(ckey.to_lowercase()); @@ -396,12 +398,13 @@ pub async fn get_achievements(ckey: &str, achievement_type: Option<&str>, pool: let achievement = row?; let achievement = Achievement { - achievement_key: achievement.try_get("achievement_metadata.achievement_key")?, - achievement_version: achievement.try_get("achievement_metadata.achievement_key")?, - achievement_type: achievement.try_get("achievement_metadata.achievement_key")?, - achievement_name: achievement.try_get("achievement_metadata.achievement_key")?, - achievement_description: achievement.try_get("achievement_metadata.achievement_key")?, - value: achievement.try_get("achievements.value")?, + achievement_key: achievement.try_get("achievement_key")?, + achievement_version: achievement.try_get("achievement_version")?, + achievement_type: achievement.try_get("achievement_type")?, + achievement_name: achievement.try_get("achievement_name")?, + achievement_description: achievement.try_get("achievement_description")?, + value: achievement.try_get("value")?, + timestamp: achievement.try_get("last_updated")?, }; achievements.push(achievement); From e701bbb0fd399ed04cbd71a0afe094646b582fbf Mon Sep 17 00:00:00 2001 From: Rengan Date: Thu, 14 Aug 2025 15:54:08 +0300 Subject: [PATCH 4/6] Lintern --- src/database/player.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/database/player.rs b/src/database/player.rs index 2332917..5a71a34 100644 --- a/src/database/player.rs +++ b/src/database/player.rs @@ -372,7 +372,11 @@ pub struct Achievement { pub timestamp: NaiveDateTime, } -pub async fn get_achievements(ckey: &str, achievement_type: Option<&str>, pool: &MySqlPool) -> Result, Error> { +pub async fn get_achievements( + ckey: &str, + achievement_type: Option<&str>, + pool: &MySqlPool +) -> Result, Error> { let mut connection = pool.acquire().await?; let mut sql = "SELECT achievements.value AS value, achievements.last_updated AS last_updated, achievement_metadata.achievement_key AS achievement_key, achievement_metadata.achievement_version AS achievement_version, achievement_metadata.achievement_type AS achievement_type, achievement_metadata.achievement_name AS achievement_name, achievement_metadata.achievement_description AS achievement_description FROM achievements JOIN achievement_metadata ON achievements.achievement_key = achievement_metadata.achievement_key WHERE LOWER(achievements.ckey) = ?".to_string(); From 22e4a86c713a162b555ff72528c7cfd7929ab713 Mon Sep 17 00:00:00 2001 From: Rengan Date: Thu, 14 Aug 2025 15:55:06 +0300 Subject: [PATCH 5/6] , --- src/database/player.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/database/player.rs b/src/database/player.rs index 5a71a34..2c3a711 100644 --- a/src/database/player.rs +++ b/src/database/player.rs @@ -375,7 +375,7 @@ pub struct Achievement { pub async fn get_achievements( ckey: &str, achievement_type: Option<&str>, - pool: &MySqlPool + pool: &MySqlPool, ) -> Result, Error> { let mut connection = pool.acquire().await?; From 4d57dfcd45ac8e3c972464a2c595d6d767e089b9 Mon Sep 17 00:00:00 2001 From: Rengan Date: Thu, 14 Aug 2025 23:31:54 +0300 Subject: [PATCH 6/6] =?UTF-8?q?getlerker=20a.x=20yerine=20x=20diye=20yapma?= =?UTF-8?q?k=20laz=C4=B1mm=C4=B1=C5=9F=20herhalde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/player.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/database/player.rs b/src/database/player.rs index 5061ae4..89b64ca 100644 --- a/src/database/player.rs +++ b/src/database/player.rs @@ -385,13 +385,13 @@ pub async fn get_achievements( ) -> Result, Error> { let mut connection = pool.acquire().await?; - let mut sql = "SELECT achievements.value AS value, achievements.last_updated AS last_updated, achievement_metadata.achievement_key AS achievement_key, achievement_metadata.achievement_version AS achievement_version, achievement_metadata.achievement_type AS achievement_type, achievement_metadata.achievement_name AS achievement_name, achievement_metadata.achievement_description AS achievement_description FROM achievements JOIN achievement_metadata ON achievements.achievement_key = achievement_metadata.achievement_key WHERE LOWER(achievements.ckey) = ?".to_string(); + let mut sql = "SELECT a.value, a.last_updated, m.achievement_key, m.achievement_version, m.achievement_type, m.achievement_name, m.achievement_description FROM achievements a JOIN achievement_metadata m ON a.achievement_key = m.achievement_key WHERE LOWER(a.ckey) = ?".to_string(); if achievement_type.is_some() { - sql.push_str(" AND achievement_metadata.achievement_type = ?"); + sql.push_str(" AND m.achievement_type = ?"); } - sql.push_str(" ORDER BY achievements.last_updated DESC"); + sql.push_str(" ORDER BY a.last_updated DESC"); let mut query = sqlx::query(&sql).bind(ckey.to_lowercase());