File tree Expand file tree Collapse file tree 13 files changed +105
-8
lines changed
wire-api/src/Wire/API/Routes/Public
test/unit/Wire/MockInterpreters Expand file tree Collapse file tree 13 files changed +105
-8
lines changed Original file line number Diff line number Diff line change
1
+ Implement `channels` and `channelsCount` in `user-groups` endpoints.
Original file line number Diff line number Diff line change @@ -1061,6 +1061,11 @@ getUserGroup user gid = do
1061
1061
req <- baseRequest user Brig Versioned $ joinHttpPath [" user-groups" , gid]
1062
1062
submit " GET" req
1063
1063
1064
+ getUserGroupWithChannels :: (MakesValue user ) => user -> String -> App Response
1065
+ getUserGroupWithChannels user gid = do
1066
+ req <- baseRequest user Brig Versioned $ joinHttpPath [" user-groups" , gid]
1067
+ submit " GET" $ req & addQueryParams [(" include_channels" , " true" )]
1068
+
1064
1069
updateUserGroupChannels :: (MakesValue user ) => user -> String -> [String ] -> App Response
1065
1070
updateUserGroupChannels user gid convIds = do
1066
1071
req <- baseRequest user Brig Versioned $ joinHttpPath [" user-groups" , gid, " channels" ]
Original file line number Diff line number Diff line change @@ -390,8 +390,9 @@ testUserGroupUpdateChannels = do
390
390
updateUserGroupChannels alice gid [convId. id_] >>= assertSuccess
391
391
392
392
-- bobId <- asString $ bob %. "id"
393
- bindResponse (getUserGroup alice gid) $ \ resp -> do
393
+ bindResponse (getUserGroupWithChannels alice gid) $ \ resp -> do
394
394
resp. status `shouldMatchInt` 200
395
+ resp. json %. " channels" `shouldMatch` [object [" id" .= convId. id_, " domain" .= convId. domain]]
395
396
396
397
-- FUTUREWORK: check the actual associated channels
397
398
-- resp.json %. "members" `shouldMatch` [bobId]
Original file line number Diff line number Diff line change @@ -314,7 +314,7 @@ type UserGroupAPI =
314
314
)
315
315
:<|> Named
316
316
" get-user-group"
317
- ( Summary " [STUB] (channels in response not implemented) "
317
+ ( Summary " Fetch a group accessible from the logged-in user "
318
318
:> From 'V10
319
319
:> ZLocalUser
320
320
:> CanThrow 'UserGroupNotFound
@@ -331,7 +331,7 @@ type UserGroupAPI =
331
331
)
332
332
:<|> Named
333
333
" get-user-groups"
334
- ( Summary " [STUB] (channelsCount not implemented) "
334
+ ( Summary " Fetch groups accessible from the logged-in user "
335
335
:> From 'V10
336
336
:> ZLocalUser
337
337
:> " user-groups"
@@ -342,6 +342,7 @@ type UserGroupAPI =
342
342
:> QueryParam' '[Optional , Strict , LastSeenNameDesc ] " last_seen_name" UserGroupName
343
343
:> QueryParam' '[Optional , Strict , LastSeenCreatedAtDesc ] " last_seen_created_at" UTCTimeMillis
344
344
:> QueryParam' '[Optional , Strict , LastSeenIdDesc ] " last_seen_id" UserGroupId
345
+ :> QueryFlag " include_channels"
345
346
:> QueryFlag " include_member_count"
346
347
:> Get '[JSON ] UserGroupPage
347
348
)
Original file line number Diff line number Diff line change @@ -38,5 +38,6 @@ data UserGroupStore m a where
38
38
UpdateUsers :: UserGroupId -> Vector UserId -> UserGroupStore m ()
39
39
RemoveUser :: UserGroupId -> UserId -> UserGroupStore m ()
40
40
UpdateUserGroupChannels :: UserGroupId -> Vector ConvId -> UserGroupStore m ()
41
+ ListUserGroupChannels :: UserGroupId -> UserGroupStore m (Vector ConvId )
41
42
42
43
makeSem ''UserGroupStore
Original file line number Diff line number Diff line change @@ -54,6 +54,7 @@ interpretUserGroupStoreToPostgres =
54
54
UpdateUsers gid uids -> updateUsers gid uids
55
55
RemoveUser gid uid -> removeUser gid uid
56
56
UpdateUserGroupChannels gid convIds -> updateUserGroupChannels gid convIds
57
+ ListUserGroupChannels gid -> listUserGroupChannels gid
57
58
58
59
updateUsers :: (UserGroupStorePostgresEffectConstraints r ) => UserGroupId -> Vector UserId -> Sem r ()
59
60
updateUsers gid uids = do
@@ -441,6 +442,28 @@ updateUserGroupChannels gid convIds = do
441
442
on conflict (user_group_id, conv_id) do nothing
442
443
|]
443
444
445
+ listUserGroupChannels ::
446
+ forall r .
447
+ (UserGroupStorePostgresEffectConstraints r ) =>
448
+ UserGroupId ->
449
+ Sem r (Vector ConvId )
450
+ listUserGroupChannels gid = do
451
+ pool <- input
452
+ eitherErrorOrUnit <- liftIO $ use pool session
453
+ either throw pure eitherErrorOrUnit
454
+ where
455
+ session :: Session (Vector ConvId )
456
+ session = statement gid selectStatement
457
+
458
+ selectStatement :: Statement UserGroupId (Vector ConvId )
459
+ selectStatement =
460
+ dimap
461
+ toUUID
462
+ (fmap Id )
463
+ [vectorStatement |
464
+ select (conv_id :: uuid) from user_group_channel where user_group_id = ($1 :: uuid)
465
+ |]
466
+
444
467
crudUser ::
445
468
forall r .
446
469
(UserGroupStorePostgresEffectConstraints r ) =>
Original file line number Diff line number Diff line change @@ -33,5 +33,6 @@ data UserGroupSubsystem m a where
33
33
UpdateUsers :: UserId -> UserGroupId -> Vector UserId -> UserGroupSubsystem m ()
34
34
RemoveUser :: UserId -> UserGroupId -> UserId -> UserGroupSubsystem m ()
35
35
UpdateChannels :: UserId -> UserGroupId -> Vector ConvId -> UserGroupSubsystem m ()
36
+ ListChannels :: UserId -> UserGroupId -> UserGroupSubsystem m (Vector ConvId )
36
37
37
38
makeSem ''UserGroupSubsystem
Original file line number Diff line number Diff line change @@ -53,6 +53,7 @@ interpretUserGroupSubsystem = interpret $ \case
53
53
UpdateUsers updater groupId uids -> updateUsers updater groupId uids
54
54
RemoveUser remover groupId removeeId -> removeUser remover groupId removeeId
55
55
UpdateChannels performer groupId channelIds -> updateChannels performer groupId channelIds
56
+ ListChannels performer groupId -> listChannels performer groupId
56
57
57
58
data UserGroupSubsystemError
58
59
= UserGroupNotATeamAdmin
@@ -350,3 +351,17 @@ updateChannels performer groupId channelIds = do
350
351
teamId <- getTeamAsAdmin performer >>= note UserGroupNotATeamAdmin
351
352
traverse_ (getTeamConv performer teamId >=> note UserGroupChannelNotFound ) channelIds
352
353
Store. updateUserGroupChannels 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
+ void $ getUserTeam performer >>= note UserGroupNotATeamAdmin
367
+ Store. listUserGroupChannels groupId
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ import Data.Domain (Domain (Domain))
11
11
import Data.Id
12
12
import Data.Json.Util
13
13
import Data.Map qualified as Map
14
- import Data.Qualified ( Qualified ( Qualified ))
14
+ import Data.Qualified
15
15
import Data.Text qualified as T
16
16
import Data.Time.Clock
17
17
import Data.Vector (Vector , fromList )
@@ -65,6 +65,7 @@ userGroupStoreTestInterpreter =
65
65
UpdateUsers gid uids -> updateUsersImpl gid uids
66
66
RemoveUser gid uid -> removeUserImpl gid uid
67
67
UpdateUserGroupChannels gid convIds -> updateUserGroupChannelsImpl gid convIds
68
+ ListUserGroupChannels gid -> listUserGroupChannelsImpl gid
68
69
69
70
updateUsersImpl :: (UserGroupStoreInMemEffectConstraints r ) => UserGroupId -> Vector UserId -> Sem r ()
70
71
updateUsersImpl gid uids = do
@@ -201,6 +202,14 @@ updateUserGroupChannelsImpl gid convIds = do
201
202
202
203
modifyUserGroupsGidOnly gid (Map. alter f)
203
204
205
+ listUserGroupChannelsImpl ::
206
+ (UserGroupStoreInMemEffectConstraints r ) =>
207
+ UserGroupId ->
208
+ Sem r (Vector ConvId )
209
+ listUserGroupChannelsImpl gid =
210
+ foldMap (fmap qUnqualified) . (runIdentity . (. channels) . snd <=< find ((== gid) . snd . fst ) . Map. toList)
211
+ <$> get @ (Map (TeamId , UserGroupId ) UserGroup )
212
+
204
213
----------------------------------------------------------------------
205
214
206
215
modifyUserGroupsGidOnly ::
Original file line number Diff line number Diff line change @@ -104,6 +104,17 @@ CREATE TABLE public.user_group_channel (
104
104
);
105
105
106
106
107
+
108
+ --
109
+ -- Name: user_group_channel; Type: TABLE; Schema: public; Owner: wire-server
110
+ --
111
+
112
+ CREATE TABLE public .user_group_channel (
113
+ user_group_id uuid NOT NULL ,
114
+ conv_id uuid NOT NULL
115
+ );
116
+
117
+
107
118
ALTER TABLE public .user_group_channel OWNER TO " wire-server" ;
108
119
109
120
--
You can’t perform that action at this time.
0 commit comments