forked from jmug/stoatchat
feat: add parameter to skip offline users on fetch
This commit is contained in:
@@ -6,7 +6,14 @@ use revolt_quark::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use rocket::serde::json::Json;
|
use rocket::serde::json::Json;
|
||||||
use serde::Serialize;
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
/// # Query Parameters
|
||||||
|
#[derive(Deserialize, JsonSchema, FromForm)]
|
||||||
|
pub struct OptionsFetchAllMembers {
|
||||||
|
/// Whether to exclude offline users
|
||||||
|
exclude_offline: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
/// # Member List
|
/// # Member List
|
||||||
///
|
///
|
||||||
@@ -23,8 +30,13 @@ pub struct AllMemberResponse {
|
|||||||
///
|
///
|
||||||
/// Fetch all server members.
|
/// Fetch all server members.
|
||||||
#[openapi(tag = "Server Members")]
|
#[openapi(tag = "Server Members")]
|
||||||
#[get("/<target>/members")]
|
#[get("/<target>/members?<options..>")]
|
||||||
pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<AllMemberResponse>> {
|
pub async fn req(
|
||||||
|
db: &Db,
|
||||||
|
user: User,
|
||||||
|
target: Ref,
|
||||||
|
options: OptionsFetchAllMembers,
|
||||||
|
) -> Result<Json<AllMemberResponse>> {
|
||||||
let server = target.as_server(db).await?;
|
let server = target.as_server(db).await?;
|
||||||
perms(&user).server(&server).calc(db).await?;
|
perms(&user).server(&server).calc(db).await?;
|
||||||
|
|
||||||
@@ -50,5 +62,12 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<AllMemberRespo
|
|||||||
members.sort_by(|a, b| a.id.user.cmp(&b.id.user));
|
members.sort_by(|a, b| a.id.user.cmp(&b.id.user));
|
||||||
users.sort_by(|a, b| a.id.cmp(&b.id));
|
users.sort_by(|a, b| a.id.cmp(&b.id));
|
||||||
|
|
||||||
|
// Optionally, remove all offline user entries.
|
||||||
|
if let Some(true) = options.exclude_offline {
|
||||||
|
let mut iter = users.iter();
|
||||||
|
members.retain(|_| iter.next().unwrap().online.unwrap_or(false));
|
||||||
|
users.retain(|user| user.online.unwrap_or(false));
|
||||||
|
}
|
||||||
|
|
||||||
Ok(Json(AllMemberResponse { members, users }))
|
Ok(Json(AllMemberResponse { members, users }))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user