diff --git a/src/routes/servers/ban_create.rs b/src/routes/servers/ban_create.rs index 8d3fec3c..8e2fc233 100644 --- a/src/routes/servers/ban_create.rs +++ b/src/routes/servers/ban_create.rs @@ -34,11 +34,5 @@ pub async fn req( let member = target.as_member(db, &server.id).await?; // ! FIXME_PERMISSIONS - let ban = ServerBan { - id: member.id, - reason: data.reason, - }; - - db.insert_ban(&ban).await?; - Ok(Json(ban)) + member.ban(db, data.reason).await.map(Json) } diff --git a/src/routes/servers/ban_list.rs b/src/routes/servers/ban_list.rs index 2656322e..cafbfcc7 100644 --- a/src/routes/servers/ban_list.rs +++ b/src/routes/servers/ban_list.rs @@ -6,18 +6,43 @@ use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] struct BannedUser { - _id: String, - username: String, - avatar: Option, + #[serde(rename = "_id")] + pub id: String, + pub username: String, + pub avatar: Option, +} + +#[derive(Serialize, Deserialize)] +pub struct BanListResult { + users: Vec, + bans: Vec, } #[get("//bans")] -pub async fn req(db: &Db, user: User, target: Ref) -> Result>> { +pub async fn req(db: &Db, user: User, target: Ref) -> Result> { let server = target.as_server(db).await?; perms(&user) .server(&server) .throw_permission(db, Permission::BanMembers) .await?; - db.fetch_bans(&server.id).await.map(Json) + let bans = db.fetch_bans(&server.id).await?; + let users = db + .fetch_users( + &bans + .iter() + .map(|x| &x.id.user) + .cloned() + .collect::>(), + ) + .await? + .into_iter() + .map(|x| BannedUser { + id: x.id, + username: x.username, + avatar: x.avatar, + }) + .collect(); + + Ok(Json(BanListResult { users, bans })) }