feat: member fetching with roles (#299)

This commit is contained in:
ToastXC
2024-02-06 21:20:35 +08:00
committed by GitHub
parent c451e431cd
commit 41ef76ff3e
9 changed files with 147 additions and 17 deletions

View File

@@ -1,17 +1,25 @@
use revolt_quark::{
models::{Member, User},
perms, Db, Ref, Result,
};
use revolt_quark::models::server_member::MemberResponse;
use revolt_quark::{models::User, perms, Db, Ref, Result};
use rocket::serde::json::Json;
/// # Fetch Member
///
/// Retrieve a member.
#[openapi(tag = "Server Members")]
#[get("/<target>/members/<member>")]
pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<Json<Member>> {
#[get("/<target>/members/<member>?<roles>")]
pub async fn req(
db: &Db,
user: User,
target: Ref,
member: Ref,
roles: Option<bool>,
) -> Result<Json<MemberResponse>> {
let server = target.as_server(db).await?;
perms(&user).server(&server).calc(db).await?;
member.as_member(db, &server.id).await.map(Json)
let member_response: MemberResponse = match roles {
Some(true) => member.as_member_with_roles(db, &server.id).await?.into(),
_ => member.as_member(db, &server.id).await?.into(),
};
Ok(Json(member_response))
}