feat: channel model implementation (#250)

Co-authored-by: ToastXC <100072983+toastxc@users.noreply.github.com>
This commit is contained in:
Paul Makles
2023-06-04 18:52:49 +01:00
committed by GitHub
parent 3c834d06d4
commit bf3e027067
27 changed files with 1391 additions and 99 deletions

View File

@@ -1,4 +1,4 @@
use revolt_database::Database;
use revolt_database::{util::reference::Reference, Database};
use revolt_quark::{models::User, perms, Db, Error, Permission, Result};
use rocket::State;
use rocket_empty::EmptyResponse;
@@ -12,13 +12,9 @@ pub async fn webhook_delete(
db: &State<Database>,
legacy_db: &Db,
user: User,
webhook_id: String,
webhook_id: Reference,
) -> Result<EmptyResponse> {
let webhook = db
.fetch_webhook(&webhook_id)
.await
.map_err(Error::from_core)?;
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
perms(&user)

View File

@@ -1,4 +1,4 @@
use revolt_database::Database;
use revolt_database::{util::reference::Reference, Database};
use revolt_result::Result;
use rocket::State;
use rocket_empty::EmptyResponse;
@@ -10,10 +10,10 @@ use rocket_empty::EmptyResponse;
#[delete("/<webhook_id>/<token>")]
pub async fn webhook_delete_token(
db: &State<Database>,
webhook_id: String,
webhook_id: Reference,
token: String,
) -> Result<EmptyResponse> {
let webhook = db.fetch_webhook(&webhook_id).await?;
let webhook = webhook_id.as_webhook(db).await?;
webhook.assert_token(&token)?;
webhook.delete(db).await.map(|_| EmptyResponse)
}

View File

@@ -1,4 +1,4 @@
use revolt_database::{Database, PartialWebhook};
use revolt_database::{util::reference::Reference, Database, PartialWebhook};
use revolt_models::v0::{DataEditWebhook, Webhook};
use revolt_quark::{models::User, perms, Db, Error, Permission, Result};
use rocket::{serde::json::Json, State};
@@ -12,7 +12,7 @@ use validator::Validate;
pub async fn webhook_edit(
db: &State<Database>,
legacy_db: &Db,
webhook_id: String,
webhook_id: Reference,
user: User,
data: Json<DataEditWebhook>,
) -> Result<Json<Webhook>> {
@@ -20,11 +20,7 @@ pub async fn webhook_edit(
data.validate()
.map_err(|error| Error::FailedValidation { error })?;
let mut webhook = db
.fetch_webhook(&webhook_id)
.await
.map_err(Error::from_core)?;
let mut webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
perms(&user)

View File

@@ -1,3 +1,4 @@
use revolt_database::util::reference::Reference;
use revolt_database::{Database, PartialWebhook};
use revolt_models::v0::{DataEditWebhook, Webhook};
use revolt_models::validator::Validate;
@@ -11,7 +12,7 @@ use rocket::{serde::json::Json, State};
#[patch("/<webhook_id>/<token>", data = "<data>")]
pub async fn webhook_edit_token(
db: &State<Database>,
webhook_id: String,
webhook_id: Reference,
token: String,
data: Json<DataEditWebhook>,
) -> Result<Json<Webhook>> {
@@ -22,7 +23,7 @@ pub async fn webhook_edit_token(
})
})?;
let mut webhook = db.fetch_webhook(&webhook_id).await?;
let mut webhook = webhook_id.as_webhook(db).await?;
webhook.assert_token(&token)?;
if data.name.is_none() && data.avatar.is_none() && data.remove.is_empty() {

View File

@@ -1,4 +1,4 @@
use revolt_database::Database;
use revolt_database::{util::reference::Reference, Database};
use revolt_quark::{
models::message::{DataMessageSend, Message},
types::push::MessageAuthor,
@@ -17,7 +17,7 @@ use validator::Validate;
pub async fn webhook_execute(
db: &State<Database>,
legacy_db: &Db,
webhook_id: String,
webhook_id: Reference,
token: String,
data: Json<DataMessageSend>,
idempotency: IdempotencyKey,
@@ -26,11 +26,7 @@ pub async fn webhook_execute(
data.validate()
.map_err(|error| Error::FailedValidation { error })?;
let webhook = db
.fetch_webhook(&webhook_id)
.await
.map_err(Error::from_core)?;
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
webhook.assert_token(&token).map_err(Error::from_core)?;
// TODO: webhooks can currently always send masquerades, files, embeds, reactions (interactions)

View File

@@ -1,4 +1,4 @@
use revolt_database::Database;
use revolt_database::{util::reference::Reference, Database};
use revolt_models::v0::Webhook;
use revolt_quark::{
models::{message::SendableEmbed, Message},
@@ -752,16 +752,12 @@ fn convert_event(data: &str, event_name: &str) -> Result<Event> {
pub async fn webhook_execute_github(
db: &State<Database>,
legacy_db: &Db,
webhook_id: String,
webhook_id: Reference,
token: String,
event: EventHeader<'_>,
data: String,
) -> Result<()> {
let webhook = db
.fetch_webhook(&webhook_id)
.await
.map_err(Error::from_core)?;
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
webhook.assert_token(&token).map_err(Error::from_core)?;
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;

View File

@@ -1,4 +1,4 @@
use revolt_database::Database;
use revolt_database::{util::reference::Reference, Database};
use revolt_models::v0::{ResponseWebhook, Webhook};
use revolt_quark::{models::User, perms, Db, Error, Permission, Result};
use rocket::{serde::json::Json, State};
@@ -11,14 +11,10 @@ use rocket::{serde::json::Json, State};
pub async fn webhook_fetch(
db: &State<Database>,
legacy_db: &Db,
webhook_id: String,
webhook_id: Reference,
user: User,
) -> Result<Json<ResponseWebhook>> {
let webhook = db
.fetch_webhook(&webhook_id)
.await
.map_err(Error::from_core)?;
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
perms(&user)

View File

@@ -1,4 +1,4 @@
use revolt_database::Database;
use revolt_database::{util::reference::Reference, Database};
use revolt_models::v0::Webhook;
use revolt_result::Result;
use rocket::{serde::json::Json, State};
@@ -10,10 +10,10 @@ use rocket::{serde::json::Json, State};
#[get("/<webhook_id>/<token>")]
pub async fn webhook_fetch_token(
db: &State<Database>,
webhook_id: String,
webhook_id: Reference,
token: String,
) -> Result<Json<Webhook>> {
let webhook = db.fetch_webhook(&webhook_id).await?;
let webhook = webhook_id.as_webhook(db).await?;
webhook.assert_token(&token)?;
Ok(Json(webhook.into()))
}