forked from jmug/stoatchat
chore: detach emojis on delete
This commit is contained in:
@@ -28,6 +28,7 @@ pub async fn delete_emoji(db: &Db, user: User, id: Ref) -> Result<EmptyResponse>
|
||||
.throw_permission(db, Permission::ManageCustomisation)
|
||||
.await?;
|
||||
}
|
||||
EmojiParent::Detached => return Ok(EmptyResponse),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ impl AbstractEmoji for DummyDb {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete an emoji by its id
|
||||
async fn delete_emoji(&self, emoji: &Emoji) -> Result<()> {
|
||||
info!("Delete {emoji:?}");
|
||||
/// Detach an emoji by its id
|
||||
async fn detach_emoji(&self, emoji: &Emoji) -> Result<()> {
|
||||
info!("Detach {emoji:?}");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ impl Emoji {
|
||||
fn parent(&self) -> &str {
|
||||
match &self.parent {
|
||||
EmojiParent::Server { id } => id,
|
||||
EmojiParent::Detached => "",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +31,6 @@ impl Emoji {
|
||||
.p(self.parent().to_string())
|
||||
.await;
|
||||
|
||||
db.mark_attachment_as_deleted(&self.id).await?;
|
||||
db.delete_emoji(&self).await
|
||||
db.detach_emoji(&self).await
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
use bson::Document;
|
||||
|
||||
use crate::models::Emoji;
|
||||
use crate::{AbstractEmoji, Result};
|
||||
use crate::{AbstractEmoji, Error, Result};
|
||||
|
||||
use super::super::MongoDb;
|
||||
|
||||
@@ -42,7 +44,26 @@ impl AbstractEmoji for MongoDb {
|
||||
}
|
||||
|
||||
/// Delete an emoji by its id
|
||||
async fn delete_emoji(&self, emoji: &Emoji) -> Result<()> {
|
||||
self.delete_one_by_id(COL, &emoji.id).await.map(|_| ())
|
||||
async fn detach_emoji(&self, emoji: &Emoji) -> Result<()> {
|
||||
self.col::<Document>(COL)
|
||||
.update_one(
|
||||
doc! {
|
||||
"_id": &emoji.id
|
||||
},
|
||||
doc! {
|
||||
"$set": {
|
||||
"parent": {
|
||||
"type": "Detached"
|
||||
}
|
||||
}
|
||||
},
|
||||
None,
|
||||
)
|
||||
.await
|
||||
.map(|_| ())
|
||||
.map_err(|_| Error::DatabaseError {
|
||||
operation: "update_one",
|
||||
with: "emojis",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ use serde::{Deserialize, Serialize};
|
||||
#[serde(tag = "type")]
|
||||
pub enum EmojiParent {
|
||||
Server { id: String },
|
||||
Detached,
|
||||
}
|
||||
|
||||
/// Representation of an Emoji on Revolt
|
||||
|
||||
@@ -15,6 +15,6 @@ pub trait AbstractEmoji: Sync + Send {
|
||||
/// Insert emoji into database.
|
||||
async fn insert_emoji(&self, emoji: &Emoji) -> Result<()>;
|
||||
|
||||
/// Delete an emoji by its id
|
||||
async fn delete_emoji(&self, emoji: &Emoji) -> Result<()>;
|
||||
/// Detach an emoji by its id
|
||||
async fn detach_emoji(&self, emoji: &Emoji) -> Result<()>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user