use revolt_database::util::permissions::DatabasePermissionQuery; use revolt_database::{util::reference::Reference, Channel, Database, User}; use revolt_models::v0; use revolt_permissions::{calculate_server_permissions, ChannelPermission}; use revolt_result::{create_error, Result}; use rocket::serde::json::Json; use rocket::State; use validator::Validate; /// # Create Channel /// /// Create a new Text or Voice channel. #[openapi(tag = "Server Information")] #[post("//channels", data = "")] pub async fn create_server_channel( db: &State, user: User, server: Reference<'_>, data: Json, ) -> Result> { let data = data.into_inner(); data.validate().map_err(|error| { create_error!(FailedValidation { error: error.to_string() }) })?; let mut server = server.as_server(db).await?; let mut query = DatabasePermissionQuery::new(db, &user).server(&server); calculate_server_permissions(&mut query) .await .throw_if_lacking_channel_permission(ChannelPermission::ManageChannel)?; Channel::create_server_channel(db, &mut server, data, true) .await .map(|channel| channel.into()) .map(Json) }