Servers: Create and delete invites. Create and fetch servers.
This commit is contained in:
@@ -2,6 +2,7 @@ use rocket::Route;
|
||||
|
||||
mod server_create;
|
||||
mod server_delete;
|
||||
mod server_fetch;
|
||||
mod server_edit;
|
||||
|
||||
mod channel_create;
|
||||
@@ -10,6 +11,7 @@ pub fn routes() -> Vec<Route> {
|
||||
routes![
|
||||
server_create::req,
|
||||
server_delete::req,
|
||||
server_fetch::req,
|
||||
server_edit::req,
|
||||
channel_create::req
|
||||
]
|
||||
|
||||
@@ -1,26 +1,42 @@
|
||||
use crate::database::*;
|
||||
use crate::util::result::{Error, Result};
|
||||
use crate::notifications::events::ClientboundNotification;
|
||||
|
||||
use mongodb::bson::doc;
|
||||
|
||||
#[delete("/<target>")]
|
||||
pub async fn req(user: User, target: Ref) -> Result<()> {
|
||||
let target = target.fetch_server().await?;
|
||||
|
||||
/*let perm = permissions::PermissionCalculator::new(&user)
|
||||
.with_channel(&target)
|
||||
.for_channel()
|
||||
let perm = permissions::PermissionCalculator::new(&user)
|
||||
.with_server(&target)
|
||||
.for_server()
|
||||
.await?;
|
||||
|
||||
if !perm.get_view() {
|
||||
Err(Error::MissingPermission)?
|
||||
}*/
|
||||
return Err(Error::MissingPermission);
|
||||
}
|
||||
|
||||
// ! FIXME: either delete server if owner
|
||||
// ! OR leave server if member
|
||||
if user.id == target.owner {
|
||||
target.delete().await
|
||||
} else {
|
||||
get_collection("server_members")
|
||||
.delete_one(
|
||||
doc! {
|
||||
|
||||
// also need to delete server invites
|
||||
// and members
|
||||
// and bans
|
||||
},
|
||||
None
|
||||
)
|
||||
.await
|
||||
.map_err(|_| Error::DatabaseError {
|
||||
operation: "delete_one",
|
||||
with: "server_member"
|
||||
})?;
|
||||
|
||||
target.delete().await
|
||||
ClientboundNotification::ServerMemberLeave {
|
||||
id: target.id.clone(),
|
||||
user: user.id
|
||||
}.publish(target.id);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
20
src/routes/servers/server_fetch.rs
Normal file
20
src/routes/servers/server_fetch.rs
Normal file
@@ -0,0 +1,20 @@
|
||||
use crate::database::*;
|
||||
use crate::util::result::{Error, Result};
|
||||
|
||||
use rocket_contrib::json::JsonValue;
|
||||
|
||||
#[get("/<target>")]
|
||||
pub async fn req(user: User, target: Ref) -> Result<JsonValue> {
|
||||
let target = target.fetch_server().await?;
|
||||
|
||||
let perm = permissions::PermissionCalculator::new(&user)
|
||||
.with_server(&target)
|
||||
.for_server()
|
||||
.await?;
|
||||
|
||||
if !perm.get_view() {
|
||||
Err(Error::MissingPermission)?
|
||||
}
|
||||
|
||||
Ok(json!(target))
|
||||
}
|
||||
Reference in New Issue
Block a user