db-lib::Member::Update no longer does 2 network hits

Also is a lot more straight forward to use as it basically return Response::Success and Other in case of issue

Member::update_perms now a thing which is again pasted from previously working code and uses Result<_, _> return types so we can ? everywhere
$ Using ? is basically a try so latency should be reduced in this method
This commit is contained in:
shockrah 2020-11-17 22:29:58 -08:00
parent 7c41db0648
commit 56041c1da5

View File

@ -64,33 +64,22 @@ impl FromDB<Member, Integer> for Member {
let q = r#"UPDATE members let q = r#"UPDATE members
SET status = :status, permissions = :perms, name = :name SET status = :status, permissions = :perms, name = :name
WHERE id = :id"#; WHERE id = :id"#;
// TODO: remoev this retarded extra network hit
// technically this is really nice for the user but ultimately it either works or it
// doesn't so like the fucks the point of doing some bs like this
// the next a client queries this they'll get whatever data is in the db
// likewise clients are going likely going to re-get this data since its been updated
// or at least should
if let Ok(conn) = p.get_conn().await { if let Ok(conn) = p.get_conn().await {
match Member::get(p, row.id).await { let query = conn.drop_exec(q, params!{
Response::Row(_) => {
let db_result: Result<Conn, SqlError>
= conn.drop_exec(q, params!{
"id" => row.id, "id" => row.id,
"status" => row.status, "status" => row.status,
"name" => row.name, "name" => row.name,
"perms" => row.permissions "perms" => row.permissions
}).await; }).await;
match db_result {
Ok(_) => return Response::Success, return match query {
Err(_) => return Response::Other(sql_err!("WARN member found | Member::FromDB::update failed - ")) Ok(_) => Response::Success,
} Err(err) => Response::Other(sql_err!(err))
},
Response::Empty => return Response::Empty,
Response::Other(msg) => return Response::Other(msg),
_ => return Response::Other(sql_err!("Member::FromD::update Bro i dont even"))
} }
} }
return Response::Other(no_conn!("Member::FromDB::update"));
return Response::Other(no_conn!("db::Member::update"));
} }
async fn delete(p: &Pool, id: UBigInt) -> Response<Self> { async fn delete(p: &Pool, id: UBigInt) -> Response<Self> {
@ -205,4 +194,18 @@ impl Member {
return Ok(Response::Empty); return Ok(Response::Empty);
} }
pub async fn update_perms(p: &Pool, uid: UBigInt, permissions: UBigInt) -> Result<UBigInt, SqlError> {
//! @return on_sucess Ok(NewPermisionsMask)
//!
let conn = p.get_conn().await?;
conn.drop_exec(
"UPDATE members SET permissions = :perms WHERE id = :id",
params!{
"id" => uid,
"perms" => permissions
}).await?;
Ok(permissions)
}
} }