@@ -11,6 +11,7 @@ import (
1111 "time"
1212
1313 "github.com/zeebo/errs"
14+ "go.uber.org/zap"
1415
1516 "storj.io/common/storj"
1617 "storj.io/common/uuid"
@@ -263,6 +264,7 @@ func (s *Service) getUsageLimitsAndFreezes(ctx context.Context, userID uuid.UUID
263264
264265// UpdateUser updates a user's information.
265266// Limit updates will cascade to all projects owned by the user.
267+ // Email updates will also update the email in the payment and analytics systems.
266268func (s * Service ) UpdateUser (ctx context.Context , authInfo * AuthInfo , userID uuid.UUID , request UpdateUserRequest ) (* UserAccount , api.HTTPError ) {
267269 var err error
268270 defer mon .Task ()(& ctx )(& err )
@@ -342,9 +344,8 @@ func (s *Service) UpdateUser(ctx context.Context, authInfo *AuthInfo, userID uui
342344 }
343345
344346 err = s .consoleDB .WithTx (ctx , func (ctx context.Context , tx console.DBTx ) error {
345- projectsDB := tx .Projects ()
346-
347- err = tx .Users ().Update (ctx , userID , console.UpdateUserRequest {
347+ usersDB := tx .Users ()
348+ err = usersDB .Update (ctx , userID , console.UpdateUserRequest {
348349 Email : request .Email ,
349350 FullName : request .Name ,
350351 Kind : request .Kind ,
@@ -361,10 +362,25 @@ func (s *Service) UpdateUser(ctx context.Context, authInfo *AuthInfo, userID uui
361362 return err
362363 }
363364
365+ if request .Email != nil && * request .Email != user .Email {
366+ // update email in analytics and payment system
367+ s .analytics .ChangeContactEmail (user .ID , user .Email , * request .Email )
368+ cusID , err := usersDB .GetCustomerID (ctx , user .ID )
369+ if err != nil {
370+ return err
371+ }
372+
373+ if err = s .payments .ChangeCustomerEmail (ctx , user .ID , cusID , * request .Email ); err != nil {
374+ s .log .Error ("Failed to update customer email on stripe" , zap .Stringer ("userId" , user .ID ), zap .Error (err ))
375+ return err
376+ }
377+ }
378+
364379 if request .StorageLimit == nil && request .BandwidthLimit == nil && request .SegmentLimit == nil {
365380 return nil
366381 }
367382
383+ projectsDB := tx .Projects ()
368384 projects , err := projectsDB .GetOwn (ctx , userID )
369385 if err != nil {
370386 return err
0 commit comments