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))
}

View File

@@ -17,6 +17,7 @@ mod permissions_set_default;
mod roles_create;
mod roles_delete;
mod roles_edit;
mod roles_fetch;
mod server_ack;
mod server_create;
mod server_delete;
@@ -42,6 +43,7 @@ pub fn routes() -> (Vec<Route>, OpenApi) {
invites_fetch::req,
roles_create::req,
roles_edit::req,
roles_fetch::req,
roles_delete::req,
permissions_set::req,
permissions_set_default::req,

View File

@@ -0,0 +1,19 @@
use revolt_quark::{models::server::Role, Db, Error, Ref, Result};
use rocket::serde::json::Json;
/// # Fetch Role
///
/// Fetch a role by its id.
#[openapi(tag = "Server Permissions")]
#[get("/<target>/roles/<role_id>")]
pub async fn req(db: &Db, target: Ref, role_id: String) -> Result<Json<Role>> {
let server = target.as_server(db).await?;
let role = server.roles.get(&role_id);
if let Some(role) = role {
Ok(Json(role.clone()))
} else {
Err(Error::NotFound)
}
}