feat: Add delete external user login info by user ID

This commit is contained in:
Luffy
2024-12-06 14:34:30 +08:00
committed by LinkinStars
parent e7672c109d
commit 2cc7b33380
4 changed files with 23 additions and 1 deletions
+1 -1
View File
@@ -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)
@@ -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) {
@@ -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)
@@ -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)
}