@@ -28,10 +28,7 @@ module Wire.API.Team.Member
28
28
invitation ,
29
29
legalHoldStatus ,
30
30
ntmNewTeamMember ,
31
-
32
- -- * TODO(leif): remove after servantification
33
31
teamMemberJson ,
34
- teamMemberListJson ,
35
32
setOptionalPerms ,
36
33
setOptionalPermsMany ,
37
34
@@ -60,29 +57,22 @@ module Wire.API.Team.Member
60
57
TeamMemberDeleteData ,
61
58
newTeamMemberDeleteData ,
62
59
tmdAuthPassword ,
63
-
64
- -- * Swagger
65
- modelTeamMember ,
66
- modelTeamMemberList ,
67
- modelNewTeamMember ,
68
- modelTeamMemberDelete ,
69
60
)
70
61
where
71
62
72
- import Control.Lens (Lens , Lens' , makeLenses , (%~) )
63
+ import Control.Lens (Lens , Lens' , makeLenses , (%~) , (?~) )
73
64
import Data.Aeson (FromJSON (.. ), ToJSON (.. ), Value (.. ))
74
65
import Data.Id (UserId )
75
66
import Data.Json.Util
76
- import Data.LegalHold (UserLegalHoldStatus (.. ), defUserLegalHoldStatus , typeUserLegalHoldStatus )
67
+ import Data.LegalHold (UserLegalHoldStatus (.. ), defUserLegalHoldStatus )
77
68
import Data.Misc (PlainTextPassword (.. ))
78
69
import Data.Proxy
79
70
import Data.Schema
80
- import qualified Data.Swagger.Build.Api as Doc
81
71
import qualified Data.Swagger.Schema as S
82
72
import GHC.TypeLits
83
73
import Imports
84
74
import Wire.API.Arbitrary (Arbitrary , GenericUniform (.. ))
85
- import Wire.API.Team.Permission (Permissions , modelPermissions )
75
+ import Wire.API.Team.Permission (Permissions )
86
76
87
77
data PermissionTag = Required | Optional
88
78
@@ -147,42 +137,26 @@ instance ToSchema TeamMember where
147
137
object " TeamMember" $
148
138
TeamMember
149
139
<$> _newTeamMember .= newTeamMemberSchema
150
- <*> _legalHoldStatus .= (fromMaybe defUserLegalHoldStatus <$> optField " legalhold_status" schema)
140
+ <*> _legalHoldStatus .= (fromMaybe defUserLegalHoldStatus <$> optFieldWithDocModifier " legalhold_status" (description ?~ lhDesc) schema)
151
141
152
142
instance ToSchema (TeamMember' 'Optional) where
153
143
schema =
154
- object " TeamMember" $
144
+ objectWithDocModifier " TeamMember" (description ?~ " team member data " ) $
155
145
TeamMember
156
146
<$> _newTeamMember
157
147
.= ( NewTeamMember
158
- <$> _nUserId .= field " user" schema
159
- <*> _nPermissions .= maybe_ (optField " permissions" schema)
148
+ <$> _nUserId .= fieldWithDocModifier " user" (description ?~ " user ID " ) schema
149
+ <*> _nPermissions .= maybe_ (optFieldWithDocModifier " permissions" (description ?~ permissionsDesc) schema)
160
150
<*> _nInvitation .= invitedSchema'
161
151
)
162
- <*> _legalHoldStatus .= (fromMaybe defUserLegalHoldStatus <$> optField " legalhold_status" schema)
163
-
164
- modelTeamMember :: Doc. Model
165
- modelTeamMember = Doc. defineModel " TeamMember" $ do
166
- Doc. description " team member data"
167
- Doc. property " user" Doc. bytes' $
168
- Doc. description " user ID"
169
- Doc. property " permissions" (Doc. ref modelPermissions) $ do
170
- Doc. description
171
- " The permissions this user has in the given team \
172
- \ (only visible with permission `GetMemberPermissions`)."
173
- Doc. optional -- not optional in the type, but in the json instance. (in
174
- -- servant, we could probably just add a helper type for this.)
175
- -- TODO: even without servant, it would be nicer to introduce
176
- -- a type with optional permissions.
177
- Doc. property " created_at" Doc. dateTime' $ do
178
- Doc. description " Timestamp of invitation creation. Requires created_by."
179
- Doc. optional
180
- Doc. property " created_by" Doc. bytes' $ do
181
- Doc. description " ID of the inviting user. Requires created_at."
182
- Doc. optional
183
- Doc. property " legalhold_status" typeUserLegalHoldStatus $ do
184
- Doc. description " The state of Legal Hold compliance for the member"
185
- Doc. optional
152
+ <*> _legalHoldStatus .= (fromMaybe defUserLegalHoldStatus <$> optFieldWithDocModifier " legalhold_status" (description ?~ lhDesc) schema)
153
+ where
154
+ permissionsDesc =
155
+ " The permissions this user has in the given team \
156
+ \ (only visible with permission `GetMemberPermissions`)."
157
+
158
+ lhDesc :: Text
159
+ lhDesc = " The state of Legal Hold compliance for the member"
186
160
187
161
setPerm :: Bool -> Permissions -> Maybe Permissions
188
162
setPerm True = Just
@@ -230,20 +204,12 @@ deriving via
230
204
newTeamMemberList :: [TeamMember ] -> ListType -> TeamMemberList
231
205
newTeamMemberList = TeamMemberList
232
206
233
- modelTeamMemberList :: Doc. Model
234
- modelTeamMemberList = Doc. defineModel " TeamMemberList" $ do
235
- Doc. description " list of team member"
236
- Doc. property " members" (Doc. unique $ Doc. array (Doc. ref modelTeamMember)) $
237
- Doc. description " the array of team members"
238
- Doc. property " hasMore" Doc. bool' $
239
- Doc. description " true if 'members' doesn't contain all team members"
240
-
241
207
instance ToSchema (TeamMember' tag ) => ToSchema (TeamMemberList' tag ) where
242
208
schema =
243
- object " TeamMemberList" $
209
+ objectWithDocModifier " TeamMemberList" (description ?~ " list of team member " ) $
244
210
TeamMemberList
245
- <$> _teamMembers .= field " members" (array schema)
246
- <*> _teamMemberListType .= field " hasMore" schema
211
+ <$> _teamMembers .= fieldWithDocModifier " members" (description ?~ " the array of team members " ) (array schema)
212
+ <*> _teamMemberListType .= fieldWithDocModifier " hasMore" (description ?~ " true if 'members' doesn't contain all team members " ) schema
247
213
248
214
type HardTruncationLimit = (2000 :: Nat )
249
215
@@ -338,8 +304,8 @@ newTeamMemberSchema =
338
304
339
305
invitedSchema :: ObjectSchemaP SwaggerDoc (Maybe (UserId , UTCTimeMillis )) (Maybe UserId , Maybe UTCTimeMillis )
340
306
invitedSchema =
341
- (,) <$> fmap fst .= optField " created_by" (maybeWithDefault Null schema)
342
- <*> fmap snd .= optField " created_at" (maybeWithDefault Null schema)
307
+ (,) <$> fmap fst .= optFieldWithDocModifier " created_by" (description ?~ " ID of the inviting user. Requires created_at. " ) (maybeWithDefault Null schema)
308
+ <*> fmap snd .= optFieldWithDocModifier " created_at" (description ?~ " Timestamp of invitation creation. Requires created_by. " ) (maybeWithDefault Null schema)
343
309
344
310
invitedSchema' :: ObjectSchema SwaggerDoc (Maybe (UserId , UTCTimeMillis ))
345
311
invitedSchema' = withParser invitedSchema $ \ (invby, invat) ->
@@ -350,14 +316,8 @@ invitedSchema' = withParser invitedSchema $ \(invby, invat) ->
350
316
351
317
instance ToSchema NewTeamMember where
352
318
schema =
353
- object " NewTeamMember" $
354
- field " member" $ unnamed (object " Unnamed" newTeamMemberSchema)
355
-
356
- modelNewTeamMember :: Doc. Model
357
- modelNewTeamMember = Doc. defineModel " NewTeamMember" $ do
358
- Doc. description " Required data when creating new team members"
359
- Doc. property " member" (Doc. ref modelTeamMember) $
360
- Doc. description " the team member to add (the legalhold_status field must be null or missing!)"
319
+ objectWithDocModifier " NewTeamMember" (description ?~ " Required data when creating new team members" ) $
320
+ fieldWithDocModifier " member" (description ?~ " the team member to add (the legalhold_status field must be null or missing!)" ) $ unnamed (object " Unnamed" newTeamMemberSchema)
361
321
362
322
--------------------------------------------------------------------------------
363
323
-- TeamMemberDeleteData
@@ -371,19 +331,12 @@ newtype TeamMemberDeleteData = TeamMemberDeleteData
371
331
372
332
instance ToSchema TeamMemberDeleteData where
373
333
schema =
374
- object " TeamMemberDeleteData" $
375
- TeamMemberDeleteData <$> _tmdAuthPassword .= optField " password" (maybeWithDefault Null schema)
334
+ objectWithDocModifier " TeamMemberDeleteData" (description ?~ " Data for a team member deletion request in case of binding teams. " ) $
335
+ TeamMemberDeleteData <$> _tmdAuthPassword .= optFieldWithDocModifier " password" (description ?~ " The account password to authorise the deletion. " ) (maybeWithDefault Null schema)
376
336
377
337
newTeamMemberDeleteData :: Maybe PlainTextPassword -> TeamMemberDeleteData
378
338
newTeamMemberDeleteData = TeamMemberDeleteData
379
339
380
- -- FUTUREWORK: fix name of model?
381
- modelTeamMemberDelete :: Doc. Model
382
- modelTeamMemberDelete = Doc. defineModel " teamDeleteData" $ do
383
- Doc. description " Data for a team member deletion request in case of binding teams."
384
- Doc. property " password" Doc. string' $
385
- Doc. description " The account password to authorise the deletion."
386
-
387
340
makeLenses ''TeamMember'
388
341
makeLenses ''TeamMemberList'
389
342
makeLenses ''NewTeamMember'
@@ -401,18 +354,12 @@ permissions = newTeamMember . nPermissions
401
354
invitation :: Lens' TeamMember (Maybe (UserId , UTCTimeMillis ))
402
355
invitation = newTeamMember . nInvitation
403
356
404
- -- JSON serialisation utilities (FUTUREWORK(leif): remove after servantification)
405
-
406
357
teamMemberJson :: (TeamMember -> Bool ) -> TeamMember -> Value
407
358
teamMemberJson withPerms = toJSON . setOptionalPerms withPerms
408
359
409
360
setOptionalPerms :: (TeamMember -> Bool ) -> TeamMember -> TeamMember' 'Optional
410
361
setOptionalPerms withPerms m = m & permissions %~ setPerm (withPerms m)
411
362
412
- -- | Show a list of team members using 'teamMemberJson'.
413
- teamMemberListJson :: (TeamMember -> Bool ) -> TeamMemberList -> Value
414
- teamMemberListJson withPerms = toJSON . setOptionalPermsMany withPerms
415
-
416
363
setOptionalPermsMany :: (TeamMember -> Bool ) -> TeamMemberList -> TeamMemberList' 'Optional
417
364
setOptionalPermsMany withPerms l =
418
365
l {_teamMembers = map (setOptionalPerms withPerms) (_teamMembers l)}
0 commit comments