get_online_members now uses db-lib for its back end

This means we've removed a ton of old raw sql code
This commit is contained in:
shockrah 2020-11-16 20:20:37 -08:00
parent b966c61c20
commit 2448e1b200

View File

@ -1,11 +1,13 @@
use chrono::Utc;
use hyper::{Response, Body};
use hyper::{Response, Body, StatusCode};
use hyper::header::HeaderValue;
use mysql_async::{Conn, Pool, error::Error as SqlError};
use mysql_async::prelude::{params, Queryable};
use serde::Serialize;
use db::{UBigInt, BigInt, Integer, VarChar};
use db::member::STATUS_ONLINE;
use db::common::FromDB;
use crate::auth;
#[derive(Serialize)]
@ -58,29 +60,19 @@ pub async fn insert_new_member(p: &Pool, name: VarChar, perms: u64) -> Result<Me
})
}
async fn select_online_default(p: &Pool) -> Result<Vec<(UBigInt, VarChar)>, SqlError> {
let conn = p.get_conn().await?;
let q = format!("SELECT id, name FROM members WHERE status = {} LIMIT 100", STATUS_ONLINE);
let data = conn.prep_exec(&q, ()).await?;
let (_, users) = data.map_and_drop(|row| {
let (id, nickname): (UBigInt, VarChar) = mysql_async::from_row(row);
(id, nickname)
}).await?;
return Ok(users);
}
pub async fn get_online_members(p: &Pool, response: &mut Response<Body>) {
/*
* Json {
* "members": [...],
* "start": 0,
* "count": 100
* }
*/
if let Ok(list) = select_online_default(p).await {
// unwrap_or`ing for serde_json since it shouldn't fail in theory(on paper)
*response.body_mut() = Body::from(serde_json::to_string(&list).unwrap_or("[]".into()));
// TODO: at some point we should provide a way of not querying literally every user in
// existance
// TODO: loggin at some point or something idklol
return match db::channels::Channel::filter(p, STATUS_ONLINE).await {
db::Response::Set(users) => {
response.headers_mut().insert("Content-Type",
HeaderValue::from_static("application/json"));
*response.body_mut() = Body::from(serde_json::to_string(&users).unwrap_or("[]".into()));
},
db::Response::Other(_msg) => *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR,
_ => *response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR
}
println!("fuck bro");
}