* 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
This commit is contained in:
shockrah 2021-05-30 19:49:48 -07:00
parent e754b18687
commit 1884580bf8
2 changed files with 31 additions and 20 deletions

View File

@ -50,24 +50,34 @@ async fn get(pool: &Pool, id: u64) -> SqlResult<Option<Badge>> {
}
}
pub async fn update(pool: &Pool, badge: Badge) -> SqlResult<Option<Badge>> {
async fn badge_update(pool: &Pool, id: u64, query: &'static str, values: mysql_async::Params) -> SqlResult<bool> {
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<bool> {
// 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<bool> {
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<bool> {
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<Vec<Badge>> {

View File

@ -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<u32>, // abridged version of permissiosn
}
pub perms: u64,
}