xmtp_db/encrypted_store/group/
version.rs

1use crate::ConnectionExt;
2
3use super::*;
4
5pub trait QueryGroupVersion {
6    fn set_group_paused(&self, group_id: &[u8], min_version: &str) -> Result<(), StorageError>;
7
8    fn unpause_group(&self, group_id: &[u8]) -> Result<(), StorageError>;
9
10    fn get_group_paused_version(&self, group_id: &[u8]) -> Result<Option<String>, StorageError>;
11}
12
13impl<T> QueryGroupVersion for &T
14where
15    T: QueryGroupVersion,
16{
17    fn set_group_paused(&self, group_id: &[u8], min_version: &str) -> Result<(), StorageError> {
18        (**self).set_group_paused(group_id, min_version)
19    }
20
21    fn unpause_group(&self, group_id: &[u8]) -> Result<(), StorageError> {
22        (**self).unpause_group(group_id)
23    }
24
25    fn get_group_paused_version(&self, group_id: &[u8]) -> Result<Option<String>, StorageError> {
26        (**self).get_group_paused_version(group_id)
27    }
28}
29
30impl<C: ConnectionExt> QueryGroupVersion for DbConnection<C> {
31    fn set_group_paused(&self, group_id: &[u8], min_version: &str) -> Result<(), StorageError> {
32        use crate::schema::groups::dsl;
33
34        self.raw_query_write(|conn| {
35            diesel::update(dsl::groups.filter(dsl::id.eq(group_id)))
36                .set(dsl::paused_for_version.eq(Some(min_version.to_string())))
37                .execute(conn)
38        })?;
39
40        Ok(())
41    }
42
43    fn unpause_group(&self, group_id: &[u8]) -> Result<(), StorageError> {
44        use crate::schema::groups::dsl;
45
46        self.raw_query_write(|conn| {
47            diesel::update(dsl::groups.filter(dsl::id.eq(group_id)))
48                .set(dsl::paused_for_version.eq::<Option<String>>(None))
49                .execute(conn)
50        })?;
51
52        Ok(())
53    }
54
55    fn get_group_paused_version(&self, group_id: &[u8]) -> Result<Option<String>, StorageError> {
56        use crate::schema::groups::dsl;
57
58        let paused_version = self.raw_query_read(|conn| {
59            dsl::groups
60                .select(dsl::paused_for_version)
61                .filter(dsl::id.eq(group_id))
62                .first::<Option<String>>(conn)
63        })?;
64
65        Ok(paused_version)
66    }
67}