UserChangeEmailVerify user change email verify code
(ctx context.Context, content string)
| 707 | |
| 708 | // UserChangeEmailVerify user change email verify code |
| 709 | func (us *UserService) UserChangeEmailVerify(ctx context.Context, content string) (resp *schema.UserLoginResp, err error) { |
| 710 | data := &schema.EmailCodeContent{} |
| 711 | err = data.FromJSONString(content) |
| 712 | if err != nil { |
| 713 | return nil, errors.BadRequest(reason.EmailVerifyURLExpired) |
| 714 | } |
| 715 | |
| 716 | _, exist, err := us.userRepo.GetByEmail(ctx, data.Email) |
| 717 | if err != nil { |
| 718 | return nil, err |
| 719 | } |
| 720 | if exist { |
| 721 | return nil, errors.BadRequest(reason.EmailDuplicate) |
| 722 | } |
| 723 | |
| 724 | userInfo, exist, err := us.userRepo.GetByUserID(ctx, data.UserID) |
| 725 | if err != nil { |
| 726 | return nil, err |
| 727 | } |
| 728 | if !exist { |
| 729 | return nil, errors.BadRequest(reason.UserNotFound) |
| 730 | } |
| 731 | err = us.userRepo.UpdateEmail(ctx, data.UserID, data.Email) |
| 732 | if err != nil { |
| 733 | return nil, errors.BadRequest(reason.UserNotFound) |
| 734 | } |
| 735 | err = us.userRepo.UpdateEmailStatus(ctx, data.UserID, entity.EmailStatusAvailable) |
| 736 | if err != nil { |
| 737 | return nil, err |
| 738 | } |
| 739 | // if email status is to be verified, active user as well |
| 740 | if userInfo.MailStatus == entity.EmailStatusToBeVerified { |
| 741 | if err = us.userActivity.UserActive(ctx, userInfo.ID); err != nil { |
| 742 | log.Error(err) |
| 743 | return nil, err |
| 744 | } |
| 745 | } |
| 746 | |
| 747 | roleID, err := us.userRoleService.GetUserRole(ctx, userInfo.ID) |
| 748 | if err != nil { |
| 749 | log.Error(err) |
| 750 | } |
| 751 | |
| 752 | resp = &schema.UserLoginResp{} |
| 753 | resp.ConvertFromUserEntity(userInfo) |
| 754 | resp.Avatar = us.siteInfoService.FormatAvatar(ctx, userInfo.Avatar, userInfo.EMail, userInfo.Status).GetURL() |
| 755 | userCacheInfo := &entity.UserCacheInfo{ |
| 756 | UserID: userInfo.ID, |
| 757 | EmailStatus: entity.EmailStatusAvailable, |
| 758 | UserStatus: userInfo.Status, |
| 759 | RoleID: roleID, |
| 760 | } |
| 761 | resp.AccessToken, resp.VisitToken, err = us.authService.SetUserCacheInfo(ctx, userCacheInfo) |
| 762 | if err != nil { |
| 763 | return nil, err |
| 764 | } |
| 765 | // User verified email will update user email status. So user status cache should be updated. |
| 766 | if err = us.authService.SetUserStatus(ctx, userCacheInfo); err != nil { |
nothing calls this directly
no test coverage detected