Skip to content

Commit 83eb7a1

Browse files
committed
fix: remove O2O Conversations and remove users from others
1 parent 57fbd15 commit 83eb7a1

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

services/galley/src/Galley/ConversationsSubsystem.hs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@ where
66
import Cassandra
77
import Cassandra.Exec
88
import Conduit
9+
import Data.Bifoldable
910
import Data.Id
11+
import Galley.Cassandra.Conversation (deleteConversation)
1012
import Galley.Cassandra.Queries qualified as Cql
1113
import Galley.Cassandra.Store (embedClient)
1214
import Galley.Cassandra.Util (logEffect)
1315
import Imports
1416
import Polysemy
1517
import Polysemy.Input
1618
import Polysemy.TinyLog (TinyLog)
19+
import Wire.API.Conversation (ConvType (..))
1720
import Wire.ConversationsSubsystem
1821
import Wire.Sem.Paging.Cassandra (InternalPage (InternalPage), mkInternalPage)
1922

@@ -35,19 +38,21 @@ closeConversationsFromImpl tid uid =
3538
runConduit $
3639
paginateWithStateC listConversationsIds
3740
.| mapMC performFilter
38-
.| mapM_C performUpdate
41+
.| mapM_C (bimapM_ (mapM_ deleteConversation) performConversationsRemoveUser)
3942
where
4043
listConversationsIds pagingState =
4144
fmap runIdentity <$> paginateWithState Cql.selectUserConvs (paramsPagingState LocalQuorum (Identity uid) 32 pagingState)
42-
performFilter :: [ConvId] -> Client [ConvId]
45+
performFilter :: [ConvId] -> Client ([ConvId], [ConvId])
4346
performFilter convIds = do
4447
page <- paginate conversationsFilter (params LocalQuorum (Identity convIds))
4548
InternalPage (_, _, filteredConvIds) <- mkInternalPage page pure
49+
let extractConv = map (\(convId, _team, _convType) -> convId)
4650
pure $
47-
map (\(convId, _team, _mCreator) -> convId) $
48-
filter (\(_convId, team, mCreator) -> team == Just tid && mCreator == Just uid) filteredConvIds
49-
conversationsFilter :: PrepQuery R (Identity [ConvId]) (ConvId, Maybe TeamId, Maybe UserId)
50-
conversationsFilter = "select conv, team, creator from conversation where conv in ?"
51-
performUpdate convIds = retry x5 $ write conversationsUpdate (params LocalQuorum (Identity convIds))
52-
conversationsUpdate :: PrepQuery W (Identity [ConvId]) ()
53-
conversationsUpdate = "update conversation set deleted = true where conv in ?"
51+
bimap extractConv extractConv $
52+
partition (\(_convId, _team, convType) -> convType == One2OneConv) $
53+
filter (\(_convId, team, _convType) -> team == Just tid) filteredConvIds
54+
conversationsFilter :: PrepQuery R (Identity [ConvId]) (ConvId, Maybe TeamId, ConvType)
55+
conversationsFilter = "select conv, team, type from conversation where conv in ?"
56+
performConversationsRemoveUser convIds = retry x5 $ write conversationsRemoveUser (params LocalQuorum (uid, convIds))
57+
conversationsRemoveUser :: PrepQuery W (UserId, [ConvId]) ()
58+
conversationsRemoveUser = "delete from user where user = ? and conv in ?"

0 commit comments

Comments
 (0)