Skip to content

Commit 130d2d7

Browse files
committed
feat: fetch conversation's parent members
1 parent 8e9d608 commit 130d2d7

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

services/galley/src/Galley/Cassandra/Conversation/Members.hs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,10 @@ removeRemoteMembersFromLocalConv cnv victims = do
123123
addPrepQuery Cql.removeRemoteMember (cnv, domain, uid)
124124

125125
members :: ConvId -> Client [LocalMember]
126-
members conv =
127-
fmap (mapMaybe toMember) . retry x1 $
128-
query Cql.selectMembers (params LocalQuorum (Identity conv))
126+
members conv = do
127+
parents <- retry x1 $ query Cql.selectConvParent (params LocalQuorum (Identity conv))
128+
fmap (nubBy ((==) `on` (.id_)) . mapMaybe toMember) . retry x1 $
129+
query Cql.selectMembers (params LocalQuorum (Identity $ conv : mapMaybe runIdentity parents))
129130

130131
allMembers :: Client [LocalMember]
131132
allMembers =
@@ -223,9 +224,10 @@ member ::
223224
ConvId ->
224225
UserId ->
225226
Client (Maybe LocalMember)
226-
member cnv usr =
227+
member cnv usr = do
228+
parents <- retry x1 $ query Cql.selectConvParent (params LocalQuorum (Identity cnv))
227229
(toMember =<<)
228-
<$> retry x1 (query1 Cql.selectMember (params LocalQuorum (cnv, usr)))
230+
<$> retry x1 (query1 Cql.selectMember (params LocalQuorum (cnv : mapMaybe runIdentity parents, usr)))
229231

230232
-- | Set local users as belonging to a remote conversation. This is invoked by a
231233
-- remote galley when users from the current backend are added to conversations

services/galley/src/Galley/Cassandra/Queries.hs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,9 @@ selectConv = "select type, creator, access, access_role, access_roles_v2, name,
241241
isConvDeleted :: PrepQuery R (Identity ConvId) (Identity (Maybe Bool))
242242
isConvDeleted = "select deleted from conversation where conv = ?"
243243

244+
selectConvParent :: PrepQuery R (Identity ConvId) (Identity (Maybe ConvId))
245+
selectConvParent = "select parent_conv from conversation where conv = ?"
246+
244247
insertConv ::
245248
PrepQuery
246249
W
@@ -401,11 +404,11 @@ deleteSubConversation = "DELETE FROM subconversation where conv_id = ? and subco
401404

402405
type MemberStatus = Int32
403406

404-
selectMember :: PrepQuery R (ConvId, UserId) (UserId, Maybe ServiceId, Maybe ProviderId, Maybe MemberStatus, Maybe MutedStatus, Maybe Text, Maybe Bool, Maybe Text, Maybe Bool, Maybe Text, Maybe RoleName)
405-
selectMember = "select user, service, provider, status, otr_muted_status, otr_muted_ref, otr_archived, otr_archived_ref, hidden, hidden_ref, conversation_role from member where conv = ? and user = ?"
407+
selectMember :: PrepQuery R ([ConvId], UserId) (UserId, Maybe ServiceId, Maybe ProviderId, Maybe MemberStatus, Maybe MutedStatus, Maybe Text, Maybe Bool, Maybe Text, Maybe Bool, Maybe Text, Maybe RoleName)
408+
selectMember = "select user, service, provider, status, otr_muted_status, otr_muted_ref, otr_archived, otr_archived_ref, hidden, hidden_ref, conversation_role from member where conv in ? and user = ?"
406409

407-
selectMembers :: PrepQuery R (Identity ConvId) (UserId, Maybe ServiceId, Maybe ProviderId, Maybe MemberStatus, Maybe MutedStatus, Maybe Text, Maybe Bool, Maybe Text, Maybe Bool, Maybe Text, Maybe RoleName)
408-
selectMembers = "select user, service, provider, status, otr_muted_status, otr_muted_ref, otr_archived, otr_archived_ref, hidden, hidden_ref, conversation_role from member where conv = ?"
410+
selectMembers :: PrepQuery R (Identity [ConvId]) (UserId, Maybe ServiceId, Maybe ProviderId, Maybe MemberStatus, Maybe MutedStatus, Maybe Text, Maybe Bool, Maybe Text, Maybe Bool, Maybe Text, Maybe RoleName)
411+
selectMembers = "select user, service, provider, status, otr_muted_status, otr_muted_ref, otr_archived, otr_archived_ref, hidden, hidden_ref, conversation_role from member where conv in ?"
409412

410413
selectAllMembers :: PrepQuery R () (UserId, Maybe ServiceId, Maybe ProviderId, Maybe MemberStatus, Maybe MutedStatus, Maybe Text, Maybe Bool, Maybe Text, Maybe Bool, Maybe Text, Maybe RoleName)
411414
selectAllMembers = "select user, service, provider, status, otr_muted_status, otr_muted_ref, otr_archived, otr_archived_ref, hidden, hidden_ref, conversation_role from member"

0 commit comments

Comments
 (0)