Skip to content

Commit a414f6e

Browse files
committed
Refactor: TeamMember is much simpler now.
1 parent f52efbe commit a414f6e

File tree

3 files changed

+27
-29
lines changed

3 files changed

+27
-29
lines changed

libs/galley-types/src/Galley/Types/Teams.hs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,13 @@ module Galley.Types.Teams
3232
, userId
3333
, permissions
3434
, invitation
35-
, teamMemberJson
3635

3736
, TeamMemberList
3837
, notTeamMember
3938
, findTeamMember
4039
, isTeamMember
4140
, newTeamMemberList
4241
, teamMembers
43-
, teamMemberListJson
4442

4543
, TeamConversation
4644
, newTeamConversation
@@ -186,7 +184,7 @@ data EventData =
186184
| EdTeamUpdate TeamUpdateData
187185
| EdMemberJoin UserId
188186
| EdMemberLeave UserId
189-
| EdMemberUpdate UserId (Maybe Permissions)
187+
| EdMemberUpdate UserId Permissions
190188
| EdConvCreate ConvId
191189
| EdConvDelete ConvId
192190
deriving (Eq, Show)
@@ -488,14 +486,15 @@ instance FromJSON TeamList where
488486
TeamList <$> o .: "teams"
489487
<*> o .: "has_more"
490488

491-
teamMemberJson :: Bool -> TeamMember -> Value
492-
teamMemberJson withPerms m = object $
493-
[ "user" .= _userId m ] <>
494-
[ "permissions" .= _permissions m | withPerms ] <>
495-
(maybe [] (\inv -> ["invited" .= invJson inv]) (_invitation m))
496-
where
497-
invJson :: (UserId, UTCTimeMillis) -> Value
498-
invJson (by, at) = object [ "by" .= by, "at" .= at ]
489+
instance ToJSON TeamMember where
490+
toJSON m = object $
491+
[ "user" .= _userId m
492+
, "permissions" .= _permissions m
493+
] <>
494+
(maybe [] (\inv -> ["invited" .= invJson inv]) (_invitation m))
495+
where
496+
invJson :: (UserId, UTCTimeMillis) -> Value
497+
invJson (by, at) = object [ "by" .= by, "at" .= at ]
499498

500499
parseTeamMember :: Value -> Parser TeamMember
501500
parseTeamMember = withObject "team-member" $ \o ->
@@ -509,9 +508,8 @@ parseTeamMember = withObject "team-member" $ \o ->
509508
parseInv' = withObject "team-member invitation metadata" $ \o ->
510509
(,) <$> (o .: "by") <*> (o .: "at")
511510

512-
teamMemberListJson :: Bool -> TeamMemberList -> Value
513-
teamMemberListJson withPerm l =
514-
object [ "members" .= map (teamMemberJson withPerm) (_teamMembers l) ]
511+
instance ToJSON TeamMemberList where
512+
toJSON l = object [ "members" .= _teamMembers l ]
515513

516514
instance FromJSON TeamMember where
517515
parseJSON = parseTeamMember
@@ -578,14 +576,14 @@ instance ToJSON BindingNewTeam where
578576
instance ToJSON NonBindingNewTeam where
579577
toJSON (NonBindingNewTeam t) =
580578
object
581-
$ "members" .= (map (teamMemberJson True) . fromRange <$> _newTeamMembers t)
579+
$ "members" .= (fromRange <$> _newTeamMembers t)
582580
# newTeamJson t
583581

584582
deriving instance FromJSON BindingNewTeam
585583
deriving instance FromJSON NonBindingNewTeam
586584

587585
instance ToJSON NewTeamMember where
588-
toJSON t = object ["member" .= teamMemberJson True (_ntmNewTeamMember t)]
586+
toJSON t = object ["member" .= (_ntmNewTeamMember t)]
589587

590588
instance FromJSON NewTeamMember where
591589
parseJSON = withObject "add team member" $ \o ->
@@ -634,8 +632,8 @@ instance FromJSON Event where
634632
instance ToJSON EventData where
635633
toJSON (EdTeamCreate tem) = toJSON tem
636634
toJSON (EdMemberJoin usr) = object ["user" .= usr]
637-
toJSON (EdMemberUpdate usr mPerm) = object $ "user" .= usr
638-
# "permissions" .= mPerm
635+
toJSON (EdMemberUpdate usr perm) = object $ "user" .= usr
636+
# "permissions" .= perm
639637
# []
640638
toJSON (EdMemberLeave usr) = object ["user" .= usr]
641639
toJSON (EdConvCreate cnv) = object ["conv" .= cnv]
@@ -650,7 +648,7 @@ parseEventData MemberJoin (Just j) = do
650648

651649
parseEventData MemberUpdate Nothing = fail "missing event data for type 'team.member-update"
652650
parseEventData MemberUpdate (Just j) = do
653-
let f o = Just <$> (EdMemberUpdate <$> o .: "user" <*> o .:? "permissions")
651+
let f o = Just <$> (EdMemberUpdate <$> o .: "user" <*> o .: "permissions")
654652
withObject "member update data" f j
655653

656654
parseEventData MemberLeave Nothing = fail "missing event data for type 'team.member-leave'"

services/galley/src/Galley/API/Teams.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ getTeamMembers (zusr::: tid ::: _) = do
210210
Nothing -> throwM noTeamMember
211211
Just m -> do
212212
unless (m `hasPermission` GetMemberPermissions) $ throwM accessDenied
213-
pure (json $ teamMemberListJson True (newTeamMemberList mems))
213+
pure (json $ newTeamMemberList mems)
214214

215215
getTeamMember :: UserId ::: TeamId ::: UserId ::: JSON -> Galley Response
216216
getTeamMember (zusr ::: tid ::: uid ::: _) = do
@@ -220,17 +220,17 @@ getTeamMember (zusr ::: tid ::: uid ::: _) = do
220220
Just m -> do
221221
unless (zusr == uid || m `hasPermission` GetMemberPermissions) $ throwM accessDenied
222222
let member = findTeamMember uid mems
223-
maybe (throwM teamMemberNotFound) (pure . json . teamMemberJson True) member
223+
maybe (throwM teamMemberNotFound) (pure . json) member
224224

225225
uncheckedGetTeamMember :: TeamId ::: UserId ::: JSON -> Galley Response
226226
uncheckedGetTeamMember (tid ::: uid ::: _) = do
227227
mem <- Data.teamMember tid uid >>= ifNothing teamMemberNotFound
228-
return . json $ teamMemberJson True mem
228+
return $ json mem
229229

230230
uncheckedGetTeamMembers :: TeamId ::: JSON -> Galley Response
231231
uncheckedGetTeamMembers (tid ::: _) = do
232232
mems <- Data.teamMembers tid
233-
return . json $ teamMemberListJson True (newTeamMemberList mems)
233+
return . json $ newTeamMemberList mems
234234

235235
addTeamMember :: UserId ::: ConnId ::: TeamId ::: Request ::: JSON ::: JSON -> Galley Response
236236
addTeamMember (zusr ::: zcon ::: tid ::: req ::: _) = do
@@ -296,7 +296,7 @@ updateTeamMember (zusr ::: zcon ::: tid ::: req ::: _) = do
296296
(mem ^. userId) == targetId
297297
privileged = filter privilege updatedMembers
298298
mkUpdate = EdMemberUpdate targetId
299-
privilegedUpdate = mkUpdate $ Just targetPermissions
299+
privilegedUpdate = mkUpdate targetPermissions
300300
privilegedRecipients = membersToRecipients Nothing privileged
301301

302302
now <- liftIO getCurrentTime
@@ -482,4 +482,4 @@ getBindingTeamId zusr = withBindingTeam zusr $ pure . json
482482
getBindingTeamMembers :: UserId -> Galley Response
483483
getBindingTeamMembers zusr = withBindingTeam zusr $ \tid -> do
484484
members <- Data.teamMembers tid
485-
pure $ json $ teamMemberListJson True (newTeamMemberList members)
485+
pure . json $ newTeamMemberList members

services/galley/test/integration/API/Teams.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -741,8 +741,8 @@ testUpdateTeamMember g b c a = do
741741
) !!! const 200 === statusCode
742742
member' <- Util.getTeamMember g owner tid (member^.userId)
743743
liftIO $ assertEqual "permissions" (member'^.permissions) (changeMember^.ntmNewTeamMember.permissions)
744-
checkTeamMemberUpdateEvent tid (member^.userId) wsOwner (pure fullPermissions)
745-
checkTeamMemberUpdateEvent tid (member^.userId) wsMember (pure fullPermissions)
744+
checkTeamMemberUpdateEvent tid (member^.userId) wsOwner fullPermissions
745+
checkTeamMemberUpdateEvent tid (member^.userId) wsMember fullPermissions
746746
WS.assertNoEvent timeout [wsOwner, wsMember]
747747
-- Now that the other member has full permissions, it can demote the owner
748748
WS.bracketR2 c (member^.userId) owner $ \(wsMember, wsOwner) -> do
@@ -755,8 +755,8 @@ testUpdateTeamMember g b c a = do
755755
owner' <- Util.getTeamMember g (member^.userId) tid owner
756756
liftIO $ assertEqual "permissions" (owner'^.permissions) (changeOwner^.ntmNewTeamMember.permissions)
757757
-- owner no longer has GetPermissions, but she can still see the update because it's about her!
758-
checkTeamMemberUpdateEvent tid owner wsOwner (pure p)
759-
checkTeamMemberUpdateEvent tid owner wsMember (pure p)
758+
checkTeamMemberUpdateEvent tid owner wsOwner p
759+
checkTeamMemberUpdateEvent tid owner wsMember p
760760
WS.assertNoEvent timeout [wsOwner, wsMember]
761761
assertQueueEmpty a
762762
where

0 commit comments

Comments
 (0)