Skip to content

Commit 5bc773d

Browse files
committed
Remove user from all user groups
1 parent 8089869 commit 5bc773d

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

libs/wire-subsystems/src/Wire/UserGroupStore.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ data UserGroupPageRequest = UserGroupPageRequest
2323

2424
data PaginationState = PaginationSortByName (Maybe (UserGroupName, UserGroupId)) | PaginationSortByCreatedAt (Maybe (UTCTimeMillis, UserGroupId))
2525

26+
userGroupCreatedAtPaginationState :: UserGroup_ f -> (UTCTimeMillis, UserGroupId)
27+
userGroupCreatedAtPaginationState ug = (ug.createdAt, ug.id_)
28+
2629
toSortBy :: PaginationState -> SortBy
2730
toSortBy = \case
2831
PaginationSortByName _ -> SortByName

libs/wire-subsystems/src/Wire/UserGroupSubsystem.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,6 @@ data UserGroupSubsystem m a where
3232
AddUsers :: UserId -> UserGroupId -> Vector UserId -> UserGroupSubsystem m ()
3333
UpdateUsers :: UserId -> UserGroupId -> Vector UserId -> UserGroupSubsystem m ()
3434
RemoveUser :: UserId -> UserGroupId -> UserId -> UserGroupSubsystem m ()
35+
RemoveUserFromAllGroups :: UserId -> TeamId -> UserGroupSubsystem m ()
3536

3637
makeSem ''UserGroupSubsystem

libs/wire-subsystems/src/Wire/UserGroupSubsystem/Interpreter.hs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ interpretUserGroupSubsystem = interpret $ \case
5050
AddUsers adder groupId addeeIds -> addUsers adder groupId addeeIds
5151
UpdateUsers updater groupId uids -> updateUsers updater groupId uids
5252
RemoveUser remover groupId removeeId -> removeUser remover groupId removeeId
53+
RemoveUserFromAllGroups uid tid -> removeUserFromAllGroups uid tid
5354

5455
data UserGroupSubsystemError
5556
= UserGroupNotATeamAdmin
@@ -328,3 +329,38 @@ removeUser remover groupId removeeId = do
328329
pushNotifications
329330
[ mkEvent remover (UserGroupUpdated groupId) admins
330331
]
332+
333+
removeUserFromAllGroups ::
334+
( Member Store.UserGroupStore r,
335+
Member TeamSubsystem r,
336+
Member (Error UserGroupSubsystemError) r
337+
) =>
338+
UserId ->
339+
TeamId ->
340+
Sem r ()
341+
removeUserFromAllGroups uid tid = do
342+
void $ internalGetTeamMember uid tid >>= note UserGroupMemberIsNotInTheSameTeam
343+
nextPage Nothing >>= go
344+
where
345+
go (ug : ugs) = do
346+
Store.removeUser ug.id_ uid
347+
-- when we get to the last item, get a new page
348+
ugs' <- case ugs of
349+
[] -> nextPage (Just ug)
350+
_ -> pure ugs
351+
go ugs'
352+
-- no more items, terminate
353+
go [] = pure ()
354+
355+
nextPage mug =
356+
Store.getUserGroups $
357+
UserGroupPageRequest
358+
{ pageSize = def,
359+
sortOrder = Desc,
360+
paginationState =
361+
PaginationSortByCreatedAt $
362+
fmap Store.userGroupCreatedAtPaginationState mug,
363+
team = tid,
364+
searchString = Nothing,
365+
includeMemberCount = False
366+
}

0 commit comments

Comments
 (0)