diff --git a/json-api/src/main.rs b/json-api/src/main.rs
index 90ea88d..2cdc3cf 100644
--- a/json-api/src/main.rs
+++ b/json-api/src/main.rs
@@ -73,6 +73,7 @@ async fn route_dispatcher(
/* MEMBERS */
(GET, routes::GET_ONLINE_MEMBERS) => members::get_online_members(pool, resp).await,
(GET, routes::GET_MYSELF) => members::get_self(pool, resp, params).await,
+ (GET, routes::GET_MEMBER) => members::get_member(pool, resp, params).await,
(POST, routes::SELF_UPDATE_NICKNAME) => members::post_self_nickname(pool, resp, params).await,
/* OWNER */
(POST, routes::SET_NEW_ADMIN) => admin::new_admin(pool, resp, params).await,
diff --git a/json-api/src/members.rs b/json-api/src/members.rs
index 6761f51..5d2b944 100644
--- a/json-api/src/members.rs
+++ b/json-api/src/members.rs
@@ -72,3 +72,51 @@ pub async fn post_self_nickname(p: &Pool, response: &mut Response
, params:
StatusCode::BAD_REQUEST
}
}
+
+pub async fn get_member(p: &Pool, response: &mut Response, params: HashMap) {
+ let target = qs_param!(params, "member_id", u64);
+
+ *response.status_mut() = if let Some(target) = target{
+ match Member::get(p, target).await {
+ Row(member) => {
+ set_json_body(response, json!({"member": {
+ "id": member.id,
+ "name": member.name,
+ "joindate": member.joindate,
+ "status": member.status,
+ "permissions": member.permissions
+ }}));
+ StatusCode::OK
+ },
+ Empty => StatusCode::NOT_FOUND,
+ Other(_msg) => StatusCode::INTERNAL_SERVER_ERROR,
+ _ => StatusCode::INTERNAL_SERVER_ERROR
+ }
+ } else {
+ StatusCode::BAD_REQUEST
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use crate::testing::get_pool;
+ use crate::testing::hyper_resp;
+ use std::collections::HashMap;
+ use tokio;
+
+ #[tokio::test]
+ async fn get_member_test() {
+ // mostly looking for correct response code here
+ // NOTE: we are assuming that the database we're trying against has
+ // some dummy data in it for us to actually look at
+
+ let p = get_pool();
+ let mut resp = hyper_resp();
+ let mut params: HashMap = HashMap::new();
+ params.insert("member_id".into(), "1".into());
+
+ super::get_member(&p, &mut resp, params).await;
+
+ println!("Response: {:?}", resp);
+ }
+}
diff --git a/json-api/src/routes.rs b/json-api/src/routes.rs
index 71ecc09..f8b7d7d 100644
--- a/json-api/src/routes.rs
+++ b/json-api/src/routes.rs
@@ -15,6 +15,7 @@ pub const MESSAGE_TIME_RANGE: Rstr = "/message/get_range"; // requires @ch
pub const MESSAGE_FROM_ID: Rstr = "/message/from_id"; // requires @channel(id) requires @start(id) @limit(1..1000)
pub const GET_ONLINE_MEMBERS: Rstr = "/members/get_online"; // requires none
+pub const GET_MEMBER: Rstr = "/members/single"; // requires @member_id
pub const GET_MYSELF: Rstr = "/members/me"; // @requires none
pub const SELF_UPDATE_NICKNAME: Rstr= "/members/me/nickname";