From 2cc7b33380f6bd1e18f0fa2131d0bef65d8591dd Mon Sep 17 00:00:00 2001 From: Luffy <52o@qq52o.cn> Date: Fri, 6 Dec 2024 14:34:30 +0800 Subject: [PATCH] feat: Add delete external user login info by user ID --- cmd/wire_gen.go | 2 +- .../user_external_login/user_external_login_repo.go | 10 ++++++++++ internal/service/user_admin/user_backyard.go | 11 +++++++++++ .../user_external_login_service.go | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/cmd/wire_gen.go b/cmd/wire_gen.go index 801c5a776..dc8a0708f 100644 --- a/cmd/wire_gen.go +++ b/cmd/wire_gen.go @@ -228,7 +228,7 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database, revisionController := controller.NewRevisionController(contentRevisionService, rankService) rankController := controller.NewRankController(rankService) userAdminRepo := user.NewUserAdminRepo(dataData, authRepo) - userAdminService := user_admin.NewUserAdminService(userAdminRepo, userRoleRelService, authService, userCommon, userActiveActivityRepo, siteInfoCommonService, emailService, questionRepo, answerRepo, commentCommonRepo) + userAdminService := user_admin.NewUserAdminService(userAdminRepo, userRoleRelService, authService, userCommon, userActiveActivityRepo, siteInfoCommonService, emailService, questionRepo, answerRepo, commentCommonRepo, userExternalLoginRepo) userAdminController := controller_admin.NewUserAdminController(userAdminService) reasonRepo := reason.NewReasonRepo(configService) reasonService := reason2.NewReasonService(reasonRepo) diff --git a/internal/repo/user_external_login/user_external_login_repo.go b/internal/repo/user_external_login/user_external_login_repo.go index 8b78b8b4c..c2d131086 100644 --- a/internal/repo/user_external_login/user_external_login_repo.go +++ b/internal/repo/user_external_login/user_external_login_repo.go @@ -104,6 +104,16 @@ func (ur *userExternalLoginRepo) DeleteUserExternalLogin(ctx context.Context, us return } +// DeleteUserExternalLoginByUserID delete external user login info by user ID +func (ur *userExternalLoginRepo) DeleteUserExternalLoginByUserID(ctx context.Context, userID string) (err error) { + cond := &entity.UserExternalLogin{} + _, err = ur.data.DB.Context(ctx).Where("user_id = ?", userID).Delete(cond) + if err != nil { + err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() + } + return +} + // SetCacheUserExternalLoginInfo cache user info for external login func (ur *userExternalLoginRepo) SetCacheUserExternalLoginInfo( ctx context.Context, key string, info *schema.ExternalLoginUserInfoCache) (err error) { diff --git a/internal/service/user_admin/user_backyard.go b/internal/service/user_admin/user_backyard.go index 52c0d6300..ebe1ea741 100644 --- a/internal/service/user_admin/user_backyard.go +++ b/internal/service/user_admin/user_backyard.go @@ -45,6 +45,7 @@ import ( "github.com/apache/incubator-answer/internal/service/role" "github.com/apache/incubator-answer/internal/service/siteinfo_common" usercommon "github.com/apache/incubator-answer/internal/service/user_common" + "github.com/apache/incubator-answer/internal/service/user_external_login" "github.com/apache/incubator-answer/pkg/checker" "github.com/jinzhu/copier" "github.com/segmentfault/pacman/errors" @@ -76,6 +77,7 @@ type UserAdminService struct { questionCommonRepo questioncommon.QuestionRepo answerCommonRepo answercommon.AnswerRepo commentCommonRepo comment_common.CommentCommonRepo + userExternalLoginRepo user_external_login.UserExternalLoginRepo } // NewUserAdminService new user admin service @@ -90,6 +92,7 @@ func NewUserAdminService( questionCommonRepo questioncommon.QuestionRepo, answerCommonRepo answercommon.AnswerRepo, commentCommonRepo comment_common.CommentCommonRepo, + userExternalLoginRepo user_external_login.UserExternalLoginRepo, ) *UserAdminService { return &UserAdminService{ userRepo: userRepo, @@ -102,6 +105,7 @@ func NewUserAdminService( questionCommonRepo: questionCommonRepo, answerCommonRepo: answerCommonRepo, commentCommonRepo: commentCommonRepo, + userExternalLoginRepo: userExternalLoginRepo, } } @@ -148,6 +152,13 @@ func (us *UserAdminService) UpdateUserStatus(ctx context.Context, req *schema.Up us.removeAllUserCreatedContent(ctx, userInfo.ID) } + if req.IsDeleted() { + err := us.userExternalLoginRepo.DeleteUserExternalLoginByUserID(ctx, userInfo.ID) + if err != nil { + log.Errorf("remove all user external login error: %v", err) + } + } + // if user reputation is zero means this user is inactive, so try to activate this user. if req.IsNormal() && userInfo.Rank == 0 { return us.userActivity.UserActive(ctx, userInfo.ID) 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 e0afbd377..9107fcc0a 100644 --- a/internal/service/user_external_login/user_external_login_service.go +++ b/internal/service/user_external_login/user_external_login_service.go @@ -51,6 +51,7 @@ type UserExternalLoginRepo interface { GetByUserID(ctx context.Context, provider, userID string) (userInfo *entity.UserExternalLogin, exist bool, err error) GetUserExternalLoginList(ctx context.Context, userID string) (resp []*entity.UserExternalLogin, err error) DeleteUserExternalLogin(ctx context.Context, userID, externalID string) (err error) + DeleteUserExternalLoginByUserID(ctx context.Context, userID string) (err error) SetCacheUserExternalLoginInfo(ctx context.Context, key string, info *schema.ExternalLoginUserInfoCache) (err error) GetCacheUserExternalLoginInfo(ctx context.Context, key string) (info *schema.ExternalLoginUserInfoCache, err error) }