From 1884580bf850116b4e2ca95be42723866546137b Mon Sep 17 00:00:00 2001 From: shockrah Date: Sun, 30 May 2021 19:49:48 -0700 Subject: [PATCH] * Simplified badge structure + Adding driver code for backend update methods This is basically all the dblib code required for the differing /badge/update/* api handlers to use --- json-api/db/src/badges.rs | 42 ++++++++++++++++++++++++--------------- json-api/db/src/lib.rs | 9 +++++---- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/json-api/db/src/badges.rs b/json-api/db/src/badges.rs index 9535740..777a169 100644 --- a/json-api/db/src/badges.rs +++ b/json-api/db/src/badges.rs @@ -50,24 +50,34 @@ async fn get(pool: &Pool, id: u64) -> SqlResult> { } } -pub async fn update(pool: &Pool, badge: Badge) -> SqlResult> { +async fn badge_update(pool: &Pool, id: u64, query: &'static str, values: mysql_async::Params) -> SqlResult { + if let Some(_) = get(pool, id).await? { + let mut conn = pool.get_conn().await?; + conn.exec_drop(query, values).await?; + Ok(true) + } else { + Ok(false) + } +} + +pub async fn update_perms(pool: &Pool, id: u64, perms: u64) -> SqlResult { // Ok(None) if that badge was not registered anywhere // Ok(Some(Badge)) if that badge was registered - if let Ok(None) = get(pool, badge.id).await { - return Ok(None); - } - - let q = "UPDATE badges SET name = :name, color = :color, permissions = :perms - WHERE id = :id"; - let p = params! { - "id" => badge.id, - "name" => badge.name.clone(), - "color" => badge.color, - "perms" => badge.perms - }; - let mut conn = pool.get_conn().await?; - conn.exec_drop(q, p).await?; - Ok(Some(badge)) + let q = "UPDATE perms SET permissions = :perms WHERE id = :id"; + let p = params!{"id" => id, "perms" => perms}; + return badge_update(pool, id, q, p).await; +} + +pub async fn update_name(pool: &Pool, id: u64, name: &str) -> SqlResult { + let q = "UPDATE badges SET name = :name WHERE id = :id"; + let p = params!{"id" => id, "name" => name}; + return badge_update(pool, id, q, p).await; +} + +pub async fn update_color(pool: &Pool, id: u64, color: u32) -> SqlResult { + let q = "UPDATE badges SET color = :color WHERE id = :id"; + let p = params!{"id" => id, "color" => color}; + return badge_update(pool, id, q, p).await; } pub async fn list(pool: &Pool) -> SqlResult> { diff --git a/json-api/db/src/lib.rs b/json-api/db/src/lib.rs index e74f616..dc84c52 100644 --- a/json-api/db/src/lib.rs +++ b/json-api/db/src/lib.rs @@ -6,6 +6,7 @@ pub mod invites; pub mod channels; pub mod messages; pub mod neighbors; +pub mod badges; pub mod jwt; use std::vec::Vec; @@ -60,7 +61,7 @@ pub struct UserMessage { -#[derive(Serialize)] +#[derive(Clone, Serialize)] pub struct Channel { pub id: UBigInt, pub name: VarChar, @@ -107,7 +108,7 @@ pub struct Neighbor { #[derive(Debug, Serialize, Deserialize)] pub struct Badge { pub name: String, - pub id: u32, + pub id: u64, pub color: u32, - pub perms: Option, // abridged version of permissiosn -} \ No newline at end of file + pub perms: u64, +}