@@ -21,7 +21,7 @@ import (
2121func NewCommand () * cli.Command {
2222 return & cli.Command {
2323 Name : "members" ,
24- Usage : "Commands related to merchant sumup ." ,
24+ Usage : "Commands related to merchant members ." ,
2525 Commands : []* cli.Command {
2626 {
2727 Name : "list" ,
@@ -94,6 +94,44 @@ func NewCommand() *cli.Command {
9494 },
9595 },
9696 },
97+ {
98+ Name : "get" ,
99+ Usage : "Get a member from the merchant account." ,
100+ Action : getMember ,
101+ ArgsUsage : "<member-id>" ,
102+ Flags : []cli.Flag {
103+ & cli.StringFlag {
104+ Name : "merchant-code" ,
105+ Usage : "Merchant code that owns the member. Falls back to context." ,
106+ Sources : cli .EnvVars ("SUMUP_MERCHANT_CODE" ),
107+ },
108+ },
109+ },
110+ {
111+ Name : "update" ,
112+ Usage : "Update a member in the merchant account." ,
113+ Action : updateMember ,
114+ ArgsUsage : "<member-id>" ,
115+ Flags : []cli.Flag {
116+ & cli.StringFlag {
117+ Name : "merchant-code" ,
118+ Usage : "Merchant code that owns the member. Falls back to context." ,
119+ Sources : cli .EnvVars ("SUMUP_MERCHANT_CODE" ),
120+ },
121+ & cli.StringSliceFlag {
122+ Name : "role" ,
123+ Usage : "Roles to assign to the member (repeat flag for multiple roles)." ,
124+ },
125+ & cli.StringFlag {
126+ Name : "nickname" ,
127+ Usage : "Nickname for managed users." ,
128+ },
129+ & cli.StringFlag {
130+ Name : "password" ,
131+ Usage : "Password for managed users." ,
132+ },
133+ },
134+ },
97135 {
98136 Name : "invite" ,
99137 Usage : "Invite a user to become a member of the merchant account." ,
@@ -274,6 +312,97 @@ func inviteMember(ctx context.Context, cmd *cli.Command) error {
274312 return nil
275313}
276314
315+ func getMember (ctx context.Context , cmd * cli.Command ) error {
316+ appCtx , err := app .GetAppContext (cmd )
317+ if err != nil {
318+ return err
319+ }
320+
321+ merchantCode , err := app .GetMerchantCode (cmd , "merchant-code" )
322+ if err != nil {
323+ return err
324+ }
325+
326+ memberID , err := util .RequireSingleArg (cmd , "member ID" )
327+ if err != nil {
328+ return err
329+ }
330+
331+ member , err := appCtx .Client .Members .Get (ctx , merchantCode , memberID )
332+ if err != nil {
333+ return fmt .Errorf ("get member: %w" , err )
334+ }
335+
336+ if appCtx .JSONOutput {
337+ return display .PrintJSON (member )
338+ }
339+
340+ renderMember (member )
341+ return nil
342+ }
343+
344+ func updateMember (ctx context.Context , cmd * cli.Command ) error {
345+ appCtx , err := app .GetAppContext (cmd )
346+ if err != nil {
347+ return err
348+ }
349+
350+ merchantCode , err := app .GetMerchantCode (cmd , "merchant-code" )
351+ if err != nil {
352+ return err
353+ }
354+
355+ memberID , err := util .RequireSingleArg (cmd , "member ID" )
356+ if err != nil {
357+ return err
358+ }
359+
360+ body := sumup.MembersUpdateParams {}
361+ changeCount := 0
362+
363+ if roles := cmd .StringSlice ("role" ); len (roles ) > 0 {
364+ body .Roles = roles
365+ changeCount ++
366+ }
367+
368+ var user * sumup.MembersUpdateParamsUser
369+ if nickname := cmd .String ("nickname" ); nickname != "" {
370+ if user == nil {
371+ user = & sumup.MembersUpdateParamsUser {}
372+ }
373+ user .Nickname = & nickname
374+ changeCount ++
375+ }
376+ if password := cmd .String ("password" ); password != "" {
377+ if user == nil {
378+ user = & sumup.MembersUpdateParamsUser {}
379+ }
380+ p := secret .New (password )
381+ user .Password = & p
382+ changeCount ++
383+ }
384+ if user != nil {
385+ body .User = user
386+ }
387+
388+ if changeCount == 0 {
389+ return fmt .Errorf ("no update fields provided" )
390+ }
391+
392+ member , err := appCtx .Client .Members .Update (ctx , merchantCode , memberID , body )
393+ if err != nil {
394+ return fmt .Errorf ("update member: %w" , err )
395+ }
396+
397+ if appCtx .JSONOutput {
398+ return display .PrintJSON (member )
399+ }
400+
401+ message .Success ("Member updated" )
402+ renderMember (member )
403+ return nil
404+ }
405+
277406func deleteMember (ctx context.Context , cmd * cli.Command ) error {
278407 appCtx , err := app .GetAppContext (cmd )
279408 if err != nil {
@@ -345,3 +474,32 @@ func membershipStatusLabel(status sumup.MembershipStatus) string {
345474 return "Unknown"
346475 }
347476}
477+
478+ func renderMember (member * sumup.Member ) {
479+ if member == nil {
480+ return
481+ }
482+
483+ var createdAt , updatedAt string
484+ createdAt = member .CreatedAt .UTC ().Format (time .RFC3339 )
485+ updatedAt = member .UpdatedAt .UTC ().Format (time .RFC3339 )
486+
487+ details := []attribute.KeyValue {
488+ attribute .ID (member .ID ),
489+ attribute .Attribute ("Email" , attribute .Styled (memberEmail (* member ))),
490+ attribute .Attribute ("Roles" , attribute .Styled (memberRoles (member .Roles ))),
491+ attribute .Attribute ("Status" , attribute .Styled (membershipStatusLabel (member .Status ))),
492+ attribute .Attribute ("Nickname" , attribute .Styled (memberNickname (member ))),
493+ attribute .Attribute ("Created At" , attribute .Styled (createdAt )),
494+ attribute .Attribute ("Updated At" , attribute .Styled (updatedAt )),
495+ }
496+
497+ display .DataList (details )
498+ }
499+
500+ func memberNickname (member * sumup.Member ) string {
501+ if member != nil && member .User != nil && member .User .Nickname != nil && * member .User .Nickname != "" {
502+ return * member .User .Nickname
503+ }
504+ return "-"
505+ }
0 commit comments