From 2448e1b200c67b3bf94fa07bba752b7e5835bedd Mon Sep 17 00:00:00 2001 From: shockrah Date: Mon, 16 Nov 2020 20:20:37 -0800 Subject: [PATCH] get_online_members now uses db-lib for its back end This means we've removed a ton of old raw sql code --- server-api/src/members.rs | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/server-api/src/members.rs b/server-api/src/members.rs index 6dd2302..702a7c0 100644 --- a/server-api/src/members.rs +++ b/server-api/src/members.rs @@ -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 Result, 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) { - /* - * 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"); }