1
0
Fork 0
mirror of https://forgejo.ellis.link/continuwuation/continuwuity.git synced 2025-08-07 15:20:55 +00:00

feat: Add admin command to delete sync tokens from a room

This commit is contained in:
Jade Ellis 2025-05-21 22:24:33 +01:00
parent 5d44653e3a
commit 0d8a8bf02e
No known key found for this signature in database
GPG key ID: 8705A2A3EBF77BD2
3 changed files with 63 additions and 2 deletions

View file

@ -127,3 +127,40 @@ pub async fn get_token_shortstatehash(
.await
.deserialized()
}
/// Delete all sync tokens associated with a room
///
/// This helps clean up the database as these tokens are never otherwise removed
#[implement(Service)]
pub async fn delete_room_tokens(&self, room_id: &RoomId) -> Result<usize> {
use futures::TryStreamExt;
let shortroomid = self.services.short.get_shortroomid(room_id).await?;
// Create a prefix to search by - all entries for this room will start with its
// short ID
let prefix = &[shortroomid];
// Get all keys with this room prefix
let mut count = 0;
// Collect all keys into a Vec first, then delete them
let keys = self
.db
.roomsynctoken_shortstatehash
.keys_prefix_raw(prefix)
.map_ok(|key| {
// Clone the key since we can't store references in the Vec
Vec::from(key)
})
.try_collect::<Vec<_>>()
.await?;
// Delete each key individually
for key in &keys {
self.db.roomsynctoken_shortstatehash.del(key);
count += 1;
}
Ok(count)
}