xmtp_db/encrypted_store/group/
version.rs1use 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}