From a1bdb2bd80186112d6df40a2da5a5a83ba8a6bea Mon Sep 17 00:00:00 2001 From: LinkinStars Date: Thu, 2 Mar 2023 11:03:06 +0800 Subject: [PATCH] feat(plugin): synchronize avatar when bind user --- .../user_external_login_service.go | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/internal/service/user_external_login/user_external_login_service.go b/internal/service/user_external_login/user_external_login_service.go index af27b753..9e1c272d 100644 --- a/internal/service/user_external_login/user_external_login_service.go +++ b/internal/service/user_external_login/user_external_login_service.go @@ -75,7 +75,7 @@ func (us *UserExternalLoginService) ExternalLogin( return nil, err } if exist && oldUserInfo.Status != entity.UserStatusDeleted { - newMailStatus, err := us.activeUser(ctx, oldUserInfo.MailStatus, oldUserInfo.ID) + newMailStatus, err := us.activeUser(ctx, oldUserInfo, externalUserInfo) if err != nil { log.Error(err) } @@ -113,7 +113,7 @@ func (us *UserExternalLoginService) ExternalLogin( } // If user login with external account and email is exist, active user directly. - newMailStatus, err := us.activeUser(ctx, oldUserInfo.MailStatus, oldUserInfo.ID) + newMailStatus, err := us.activeUser(ctx, oldUserInfo, externalUserInfo) if err != nil { log.Error(err) } @@ -176,18 +176,37 @@ func (us *UserExternalLoginService) bindOldUser(ctx context.Context, return err } -func (us *UserExternalLoginService) activeUser(ctx context.Context, oldMailStatus int, userID string) ( +func (us *UserExternalLoginService) activeUser(ctx context.Context, oldUserInfo *entity.User, + externalUserInfo *schema.ExternalLoginUserInfoCache) ( mailStatus int, err error) { - log.Infof("user %s login with external account, try to active email, old status is %d", userID, oldMailStatus) - if oldMailStatus == entity.EmailStatusAvailable { - return oldMailStatus, nil + log.Infof("user %s login with external account, try to active email, old status is %d", + oldUserInfo.ID, oldUserInfo.MailStatus) + + // try to active user email + if oldUserInfo.MailStatus == entity.EmailStatusAvailable { + return oldUserInfo.MailStatus, nil } - err = us.userRepo.UpdateEmailStatus(ctx, userID, entity.EmailStatusAvailable) + err = us.userRepo.UpdateEmailStatus(ctx, oldUserInfo.ID, entity.EmailStatusAvailable) if err != nil { - return oldMailStatus, err + return oldUserInfo.MailStatus, err } - if err = us.userActivity.UserActive(ctx, userID); err != nil { - return oldMailStatus, err + + // try to update user avatar + if len(externalUserInfo.Avatar) > 0 && len(schema.FormatAvatarInfo(oldUserInfo.Avatar)) == 0 { + avatarInfo := &schema.AvatarInfo{ + Type: schema.AvatarTypeCustom, + Custom: externalUserInfo.Avatar, + } + avatar, _ := json.Marshal(avatarInfo) + oldUserInfo.Avatar = string(avatar) + err = us.userRepo.UpdateInfo(ctx, oldUserInfo) + if err != nil { + log.Error(err) + } + } + + if err = us.userActivity.UserActive(ctx, oldUserInfo.ID); err != nil { + return oldUserInfo.MailStatus, err } return entity.EmailStatusAvailable, nil }