diff --git a/src/database/entities/autumn.rs b/src/database/entities/autumn.rs index 8c57250bfdadd26fc5aa33fa6ee44560319bd277..0838f9982776929dda4df528e86dd4f93bab262e 100644 --- a/src/database/entities/autumn.rs +++ b/src/database/entities/autumn.rs @@ -86,4 +86,25 @@ impl File { Err(Error::UnknownAttachment) } } + + pub async fn delete(&self) -> Result<()> { + get_collection("attachments") + .update_one( + doc! { + "_id": &self.id + }, + doc! { + "$set": { + "deleted": true + } + }, + None, + ) + .await + .map(|_| ()) + .map_err(|_| Error::DatabaseError { + operation: "update_one", + with: "attachment", + }) + } } diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 0ef9f01fb9d97225599c777410288376483113a1..35f484d2eae336a4088c8513acbd4473029e821d 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -236,23 +236,7 @@ impl Message { pub async fn delete(&self) -> Result<()> { if let Some(attachment) = &self.attachment { - get_collection("attachments") - .update_one( - doc! { - "_id": &attachment.id - }, - doc! { - "$set": { - "deleted": true - } - }, - None, - ) - .await - .map_err(|_| Error::DatabaseError { - operation: "update_one", - with: "attachment", - })?; + attachment.delete().await?; } get_collection("messages") diff --git a/src/database/migrations/scripts.rs b/src/database/migrations/scripts.rs index 055f2ec70b1e51fdd87b4666b0154af1dbd23772..d926ec09497a16c7e1f6308ba4f35da246c8382e 100644 --- a/src/database/migrations/scripts.rs +++ b/src/database/migrations/scripts.rs @@ -10,7 +10,7 @@ struct MigrationInfo { revision: i32, } -pub const LATEST_REVISION: i32 = 1; +pub const LATEST_REVISION: i32 = 2; pub async fn migrate_database() { let migrations = get_collection("migrations"); diff --git a/src/routes/users/edit_user.rs b/src/routes/users/edit_user.rs index 5dfde797ed2d5135c633dbc84d5352430ce5346d..eace4eb1b832bec04eb0a1447f0b0589d3b674ca 100644 --- a/src/routes/users/edit_user.rs +++ b/src/routes/users/edit_user.rs @@ -67,6 +67,10 @@ pub async fn req(user: User, mut data: Json<Data>, _ignore_id: String) -> Result .publish(user.id.clone()) .await .ok(); + + if let Some(old_avatar) = user.avatar { + old_avatar.delete().await?; + } } Ok(())