forked from jmug/stoatchat
65 lines
1.5 KiB
Rust
65 lines
1.5 KiB
Rust
use crate::{
|
|
events::client::EventV1,
|
|
models::{
|
|
webhook::{Webhook, PartialWebhook, FieldsWebhook}
|
|
},
|
|
Database, Result
|
|
};
|
|
|
|
impl Webhook {
|
|
pub async fn create(&self, db: &Database) -> Result<()> {
|
|
db.insert_webhook(self).await?;
|
|
|
|
// Avoid leaking the token to people who receive the event
|
|
let mut webhook = self.clone();
|
|
webhook.token = None;
|
|
|
|
EventV1::WebhookCreate(webhook)
|
|
.p(self.channel.clone()).await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn delete(&self, db: &Database) -> Result<()> {
|
|
db.delete_webhook(&self.id).await?;
|
|
|
|
EventV1::WebhookDelete { id: self.id.clone() }
|
|
.p(self.channel.clone()).await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn update(
|
|
&mut self,
|
|
db: &Database,
|
|
mut partial: PartialWebhook,
|
|
remove: Vec<FieldsWebhook>
|
|
) -> Result<()> {
|
|
for field in &remove {
|
|
self.remove(field)
|
|
};
|
|
|
|
self.apply_options(partial.clone());
|
|
|
|
db.update_webook(&self.id, &partial, &remove).await?;
|
|
|
|
partial.token = None; // Avoid leaking the token to people who receive the event
|
|
|
|
EventV1::WebhookUpdate {
|
|
id: self.id.clone(),
|
|
data: partial,
|
|
remove
|
|
}
|
|
.p(self.channel.clone())
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn remove(&mut self, field: &FieldsWebhook) {
|
|
match field {
|
|
FieldsWebhook::Avatar => self.avatar = None
|
|
}
|
|
}
|
|
}
|