feat: use new ServerCreate events

This commit is contained in:
Paul Makles
2022-04-09 19:03:25 +01:00
parent 24def22613
commit 10645638a2
3 changed files with 29 additions and 30 deletions

View File

@@ -1,5 +1,5 @@
use revolt_quark::{ use revolt_quark::{
models::{server_member::MemberCompositeKey, Channel, Member, User}, models::{Channel, User},
perms, Db, EmptyResponse, Error, Permission, Ref, Result, perms, Db, EmptyResponse, Error, Permission, Ref, Result,
}; };
@@ -51,15 +51,11 @@ pub async fn invite_bot(
.throw_permission(db, Permission::ManageServer) .throw_permission(db, Permission::ManageServer)
.await?; .await?;
let member = Member { let user = db.fetch_user(&bot.id).await?;
id: MemberCompositeKey { server
server: server.id, .create_member(db, user, None)
user: bot.id, .await
}, .map(|_| EmptyResponse)
..Default::default()
};
db.insert_member(&member).await.map(|_| EmptyResponse)
} }
InviteBotDestination::Group { group } => { InviteBotDestination::Group { group } => {
let channel = db.fetch_channel(&group).await?; let channel = db.fetch_channel(&group).await?;

View File

@@ -69,6 +69,6 @@ pub async fn req(
Ok(Json(NewRoleResponse { Ok(Json(NewRoleResponse {
id: role.create(db, &server.id).await?, id: role.create(db, &server.id).await?,
role: role, role,
})) }))
} }

View File

@@ -1,7 +1,7 @@
use std::collections::HashMap; use std::collections::HashMap;
use revolt_quark::{ use revolt_quark::{
models::{server_member::MemberCompositeKey, Channel, Member, Server, User}, models::{Channel, Server, User},
Db, Error, Result, DEFAULT_PERMISSION_SERVER, Db, Error, Result, DEFAULT_PERMISSION_SERVER,
}; };
@@ -13,7 +13,7 @@ use validator::Validate;
use crate::util::variables::MAX_SERVER_COUNT; use crate::util::variables::MAX_SERVER_COUNT;
/// # Server Data /// # Server Data
#[derive(Validate, Serialize, Deserialize, JsonSchema)] #[derive(Validate, Deserialize, JsonSchema)]
pub struct DataCreateServer { pub struct DataCreateServer {
/// Server name /// Server name
#[validate(length(min = 1, max = 32))] #[validate(length(min = 1, max = 32))]
@@ -26,12 +26,25 @@ pub struct DataCreateServer {
nsfw: Option<bool>, nsfw: Option<bool>,
} }
/// # Create Server Response
#[derive(Validate, Serialize, JsonSchema)]
pub struct CreateServerResponse {
/// Server object
server: Server,
/// Default channels
channels: Vec<Channel>,
}
/// # Create Server /// # Create Server
/// ///
/// Create a new server. /// Create a new server.
#[openapi(tag = "Server Information")] #[openapi(tag = "Server Information")]
#[post("/create", data = "<info>")] #[post("/create", data = "<info>")]
pub async fn req(db: &Db, user: User, info: Json<DataCreateServer>) -> Result<Json<Server>> { pub async fn req(
db: &Db,
user: User,
info: Json<DataCreateServer>,
) -> Result<Json<CreateServerResponse>> {
let info = info.into_inner(); let info = info.into_inner();
info.validate() info.validate()
.map_err(|error| Error::FailedValidation { error })?; .map_err(|error| Error::FailedValidation { error })?;
@@ -67,9 +80,11 @@ pub async fn req(db: &Db, user: User, info: Json<DataCreateServer>) -> Result<Js
nsfw: nsfw.unwrap_or(false), nsfw: nsfw.unwrap_or(false),
}; };
db.insert_channel(&channel).await?;
let server = Server { let server = Server {
id: server_id, id: server_id.clone(),
owner: user.id, owner: user.id.clone(),
name, name,
description, description,
channels: vec![channel_id], channels: vec![channel_id],
@@ -78,18 +93,6 @@ pub async fn req(db: &Db, user: User, info: Json<DataCreateServer>) -> Result<Js
..Default::default() ..Default::default()
}; };
let member = Member { let channels = server.create_member(db, user, Some(vec![channel])).await?;
id: MemberCompositeKey { Ok(Json(CreateServerResponse { server, channels }))
server: server.id.clone(),
user: server.owner.clone(),
},
..Default::default()
};
db.insert_channel(&channel).await?;
server.create(db).await?;
member.create(db).await?;
Ok(Json(server))
} }