Skip to content

Commit 228209f

Browse files
committed
feat: add store
1 parent bfe7c5f commit 228209f

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@ data UserGroupStore m a where
3838
UpdateUsers :: UserGroupId -> Vector UserId -> UserGroupStore m ()
3939
RemoveUser :: UserGroupId -> UserId -> UserGroupStore m ()
4040
UpdateUserGroupChannels :: TeamId -> UserGroupId -> Vector ConvId -> UserGroupStore m ()
41+
ListUserGroupChannels :: TeamId -> UserGroupId -> UserGroupStore m (Vector ConvId)
4142

4243
makeSem ''UserGroupStore

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ interpretUserGroupStoreToPostgres =
5454
UpdateUsers gid uids -> updateUsers gid uids
5555
RemoveUser gid uid -> removeUser gid uid
5656
UpdateUserGroupChannels _ gid convIds -> updateUserGroupChannels gid convIds
57+
ListUserGroupChannels _ gid -> listUserGroupChannels gid
5758

5859
updateUsers :: (UserGroupStorePostgresEffectConstraints r) => UserGroupId -> Vector UserId -> Sem r ()
5960
updateUsers gid uids = do
@@ -443,6 +444,28 @@ updateUserGroupChannels gid convIds = do
443444
on conflict (user_group_id) do nothing
444445
|]
445446

447+
listUserGroupChannels ::
448+
forall r.
449+
(UserGroupStorePostgresEffectConstraints r) =>
450+
UserGroupId ->
451+
Sem r (Vector ConvId)
452+
listUserGroupChannels gid = do
453+
pool <- input
454+
eitherErrorOrUnit <- liftIO $ use pool session
455+
either throw pure eitherErrorOrUnit
456+
where
457+
session :: Session (Vector ConvId)
458+
session = statement gid selectStatement
459+
460+
selectStatement :: Statement UserGroupId (Vector ConvId)
461+
selectStatement =
462+
dimap
463+
toUUID
464+
(fmap Id)
465+
[vectorStatement|
466+
select (channel_id :: uuid) from user_group_channel where user_group_id = ($1 :: uuid)
467+
|]
468+
446469
crudUser ::
447470
forall r.
448471
(UserGroupStorePostgresEffectConstraints r) =>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,6 @@ data UserGroupSubsystem m a where
3333
UpdateUsers :: UserId -> UserGroupId -> Vector UserId -> UserGroupSubsystem m ()
3434
RemoveUser :: UserId -> UserGroupId -> UserId -> UserGroupSubsystem m ()
3535
UpdateChannels :: UserId -> UserGroupId -> Vector ConvId -> UserGroupSubsystem m ()
36+
ListChannels :: UserId -> UserGroupId -> UserGroupSubsystem m (Vector ConvId)
3637

3738
makeSem ''UserGroupSubsystem

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ interpretUserGroupSubsystem = interpret $ \case
5353
UpdateUsers updater groupId uids -> updateUsers updater groupId uids
5454
RemoveUser remover groupId removeeId -> removeUser remover groupId removeeId
5555
UpdateChannels remover groupId channelIds -> updateChannels remover groupId channelIds
56+
ListChannels remover groupId -> listChannels remover groupId
5657

5758
data UserGroupSubsystemError
5859
= UserGroupNotATeamAdmin
@@ -350,3 +351,17 @@ updateChannels performer groupId channelIds = do
350351
teamId <- getTeamAsAdmin performer >>= note UserGroupNotATeamAdmin
351352
traverse_ (getTeamConv performer teamId >=> note UserGroupChannelNotFound) channelIds
352353
Store.updateUserGroupChannels teamId groupId channelIds
354+
355+
listChannels ::
356+
( Member UserSubsystem r,
357+
Member Store.UserGroupStore r,
358+
Member (Error UserGroupSubsystemError) r,
359+
Member TeamSubsystem r
360+
) =>
361+
UserId ->
362+
UserGroupId ->
363+
Sem r (Vector ConvId)
364+
listChannels performer groupId = do
365+
void $ getUserGroup performer groupId >>= note UserGroupNotFound
366+
teamId <- getUserTeam performer >>= note UserGroupNotATeamAdmin
367+
Store.listUserGroupChannels teamId groupId

0 commit comments

Comments
 (0)