reintroduce account_data::Service struct

In preparation for adding some additional methods at the service level.

Dropping the tracing spans for the data methods, because two duplicate
spans here seems kinda excessive.
This commit is contained in:
Olivia Lee 2025-03-22 17:53:16 -07:00
parent 868bb44adf
commit fe14300d91
No known key found for this signature in database
GPG key ID: 54D568A15B9CD1F9
3 changed files with 58 additions and 9 deletions

View file

@ -12,9 +12,6 @@ use crate::{
}; };
impl service::account_data::Data for KeyValueDatabase { 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( fn update(
&self, &self,
room_id: Option<&RoomId>, room_id: Option<&RoomId>,
@ -65,8 +62,6 @@ impl service::account_data::Data for KeyValueDatabase {
Ok(()) Ok(())
} }
/// Searches the account data for a specific kind.
#[tracing::instrument(skip(self, room_id, user_id, kind))]
fn get( fn get(
&self, &self,
room_id: Option<&RoomId>, room_id: Option<&RoomId>,
@ -96,8 +91,6 @@ impl service::account_data::Data for KeyValueDatabase {
.transpose() .transpose()
} }
/// Returns all changes to the account data that happened after `since`.
#[tracing::instrument(skip(self, room_id, user_id, since))]
fn changes_since( fn changes_since(
&self, &self,
room_id: Option<&RoomId>, room_id: Option<&RoomId>,

View file

@ -114,7 +114,7 @@ impl Services {
transaction_ids: db, transaction_ids: db,
uiaa: uiaa::Service::new(db), uiaa: uiaa::Service::new(db),
users: users::Service::new(db), users: users::Service::new(db),
account_data: db, account_data: account_data::Service::new(db),
admin: admin::Service::new(), admin: admin::Service::new(),
key_backups: db, key_backups: db,
media: media::Service { media: media::Service {

View file

@ -1,5 +1,61 @@
use std::collections::HashMap;
use ruma::{
events::{AnyEphemeralRoomEvent, RoomAccountDataEventType},
serde::Raw,
RoomId, UserId,
};
use crate::Result;
mod data; mod data;
pub(crate) use data::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<Option<Box<serde_json::value::RawValue>>> {
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<HashMap<RoomAccountDataEventType, Raw<AnyEphemeralRoomEvent>>>
{
self.db.changes_since(room_id, user_id, since)
}
}