diff --git a/src/database/key_value/account_data.rs b/src/database/key_value/account_data.rs index 9033ac90..dfabb322 100644 --- a/src/database/key_value/account_data.rs +++ b/src/database/key_value/account_data.rs @@ -12,9 +12,6 @@ use crate::{ }; impl service::account_data::Data for KeyValueDatabase { - /// Places one event in the account data of the user and removes the - /// previous entry. - #[tracing::instrument(skip(self, room_id, user_id, event_type, data))] fn update( &self, room_id: Option<&RoomId>, @@ -65,8 +62,6 @@ impl service::account_data::Data for KeyValueDatabase { Ok(()) } - /// Searches the account data for a specific kind. - #[tracing::instrument(skip(self, room_id, user_id, kind))] fn get( &self, room_id: Option<&RoomId>, @@ -96,8 +91,6 @@ impl service::account_data::Data for KeyValueDatabase { .transpose() } - /// Returns all changes to the account data that happened after `since`. - #[tracing::instrument(skip(self, room_id, user_id, since))] fn changes_since( &self, room_id: Option<&RoomId>, diff --git a/src/service.rs b/src/service.rs index 85e7a302..38d44941 100644 --- a/src/service.rs +++ b/src/service.rs @@ -114,7 +114,7 @@ impl Services { transaction_ids: db, uiaa: uiaa::Service::new(db), users: users::Service::new(db), - account_data: db, + account_data: account_data::Service::new(db), admin: admin::Service::new(), key_backups: db, media: media::Service { diff --git a/src/service/account_data.rs b/src/service/account_data.rs index 4f4b4344..c755ece1 100644 --- a/src/service/account_data.rs +++ b/src/service/account_data.rs @@ -1,5 +1,61 @@ +use std::collections::HashMap; + +use ruma::{ + events::{AnyEphemeralRoomEvent, RoomAccountDataEventType}, + serde::Raw, + RoomId, UserId, +}; + +use crate::Result; + mod data; pub(crate) use data::Data; -pub(crate) type Service = &'static dyn Data; +pub(crate) struct Service { + pub(crate) db: &'static dyn Data, +} + +impl Service { + pub(crate) fn new(db: &'static dyn Data) -> Self { + Self { + db, + } + } + + /// Places one event in the account data of the user and removes the + /// previous entry. + #[tracing::instrument(skip(self, room_id, user_id, event_type, data))] + pub(crate) fn update( + &self, + room_id: Option<&RoomId>, + user_id: &UserId, + event_type: RoomAccountDataEventType, + data: &serde_json::Value, + ) -> Result<()> { + self.db.update(room_id, user_id, event_type, data) + } + + /// Searches the account data for a specific kind. + #[tracing::instrument(skip(self, room_id, user_id, event_type))] + pub(crate) fn get( + &self, + room_id: Option<&RoomId>, + user_id: &UserId, + event_type: RoomAccountDataEventType, + ) -> Result>> { + self.db.get(room_id, user_id, event_type) + } + + /// Returns all changes to the account data that happened after `since`. + #[tracing::instrument(skip(self, room_id, user_id, since))] + pub(crate) fn changes_since( + &self, + room_id: Option<&RoomId>, + user_id: &UserId, + since: u64, + ) -> Result>> + { + self.db.changes_since(room_id, user_id, since) + } +}