Browse Source

refactor(internal): 重构 GameShield 相关接口和方法

- 修改 GetGameShieldDuplicateName 方法,增加 uid 参数以实现更精确的重复名称检查
- 重命名部分方法以提高代码可读性:
  - GetGameShieldNameByAppName -> GetGameShieldNameByDunName
  - GetGameShieldIdByAppName -> GetGameShieldIdByDunName
- 新增 GetGameShieldRuleIdByAppName 方法,用于获取应用名称对应的规则 ID
- 更新相关服务层逻辑,以适应新的接口和方法
fusu 3 months ago
parent
commit
e9debc2a88
2 changed files with 33 additions and 15 deletions
  1. 18 7
      internal/repository/gameshield.go
  2. 15 8
      internal/service/gameshield.go

+ 18 - 7
internal/repository/gameshield.go

@@ -7,15 +7,16 @@ import (
 
 
 type GameShieldRepository interface {
 type GameShieldRepository interface {
 	GetGameShieldById(ctx context.Context, id int64) (*model.GameShield, error)
 	GetGameShieldById(ctx context.Context, id int64) (*model.GameShield, error)
-	GetGameShieldDuplicateName(ctx context.Context, appName string) (int64, error)
+	GetGameShieldDuplicateName(ctx context.Context, appName string, uid int) (int64, error)
 	AddGameShield(ctx context.Context, gameShield *model.GameShield) error
 	AddGameShield(ctx context.Context, gameShield *model.GameShield) error
 	UpdateGameShield(ctx context.Context, gameShield *model.GameShield) error
 	UpdateGameShield(ctx context.Context, gameShield *model.GameShield) error
 	DeleteGameShield(ctx context.Context, ruleId int) error
 	DeleteGameShield(ctx context.Context, ruleId int) error
 	GetGameShieldIsBuy(ctx context.Context, uid int64) (int64, error)
 	GetGameShieldIsBuy(ctx context.Context, uid int64) (int64, error)
 	GetGameShieldNextduedate(ctx context.Context, uid int64, productID string) (string, error)
 	GetGameShieldNextduedate(ctx context.Context, uid int64, productID string) (string, error)
 	GetGameShieldExistingIps(ctx context.Context, ip string) ([]string, error)
 	GetGameShieldExistingIps(ctx context.Context, ip string) ([]string, error)
-	GetGameShieldNameByAppName(ctx context.Context, appName string) (string, error)
-	GetGameShieldIdByAppName(ctx context.Context, id int64) (string, error)
+	GetGameShieldNameByDunName(ctx context.Context, appName string) (string, error)
+	GetGameShieldIdByDunName(ctx context.Context, id int64) (string, error)
+	GetGameShieldRuleIdByAppName(ctx context.Context, appName string) (int, error)
 }
 }
 
 
 func NewGameShieldRepository(
 func NewGameShieldRepository(
@@ -38,9 +39,9 @@ func (r *gameShieldRepository) GetGameShieldById(ctx context.Context, id int64)
 	return &res, nil
 	return &res, nil
 }
 }
 
 
-func (r *gameShieldRepository) GetGameShieldDuplicateName(ctx context.Context, appName string) (int64, error) {
+func (r *gameShieldRepository) GetGameShieldDuplicateName(ctx context.Context, appName string, uid int) (int64, error) {
 	var count int64
 	var count int64
-	if err := r.DB(ctx).Model(&model.GameShield{}).Where("app_name = ?", appName).Count(&count).Error; err != nil {
+	if err := r.DB(ctx).Model(&model.GameShield{}).Where("app_name = ?", appName).Where("uid = ?", uid).Count(&count).Error; err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
 	return count, nil
 	return count, nil
@@ -103,7 +104,7 @@ func (r *gameShieldRepository) GetGameShieldExistingIps(ctx context.Context, ip
 	return res, nil
 	return res, nil
 }
 }
 
 
-func (r *gameShieldRepository) GetGameShieldNameByAppName(ctx context.Context, appName string) (string, error) {
+func (r *gameShieldRepository) GetGameShieldNameByDunName(ctx context.Context, appName string) (string, error) {
 	var res string
 	var res string
 	if err := r.DB(ctx).Model(&model.GameShield{}).
 	if err := r.DB(ctx).Model(&model.GameShield{}).
 		Where("app_name = ?", appName).
 		Where("app_name = ?", appName).
@@ -113,7 +114,7 @@ func (r *gameShieldRepository) GetGameShieldNameByAppName(ctx context.Context, a
 	return res, nil
 	return res, nil
 }
 }
 
 
-func (r *gameShieldRepository) GetGameShieldIdByAppName(ctx context.Context, id int64) (string, error) {
+func (r *gameShieldRepository) GetGameShieldIdByDunName(ctx context.Context, id int64) (string, error) {
 	var res string
 	var res string
 	if err := r.DB(ctx).Model(&model.GameShield{}).
 	if err := r.DB(ctx).Model(&model.GameShield{}).
 		Where("id = ?", id).
 		Where("id = ?", id).
@@ -122,3 +123,13 @@ func (r *gameShieldRepository) GetGameShieldIdByAppName(ctx context.Context, id
 	}
 	}
 	return res, nil
 	return res, nil
 }
 }
+
+func (r *gameShieldRepository) GetGameShieldRuleIdByAppName(ctx context.Context, appName string) (int, error) {
+	var res int
+	if err := r.DB(ctx).Model(&model.GameShield{}).
+		Where("app_name = ?", appName).
+		Pluck("rule_id", &res).Error; err != nil {
+		return 0, err
+	}
+	return res, nil
+}

+ 15 - 8
internal/service/gameshield.go

@@ -65,13 +65,6 @@ func (service *gameShieldService) GetGameShieldrequired(ctx context.Context, req
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
-	nameCount, err := service.gameShieldRepository.GetGameShieldDuplicateName(ctx, req.AppName)
-	if err != nil {
-		return nil, err
-	}
-	if nameCount > 0 {
-		return nil, fmt.Errorf("应用名称已存在")
-	}
 	res.Backend, err = service.formatter.FormatBackendData(ctx, req)
 	res.Backend, err = service.formatter.FormatBackendData(ctx, req)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
@@ -84,6 +77,13 @@ func (service *gameShieldService) GetGameShieldrequired(ctx context.Context, req
 }
 }
 
 
 func (service *gameShieldService) SubmitGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error) {
 func (service *gameShieldService) SubmitGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error) {
+	nameCount, err := service.gameShieldRepository.GetGameShieldDuplicateName(ctx, req.AppName, req.Uid)
+	if err != nil {
+		return "", err
+	}
+	if nameCount > 0 {
+		return "", fmt.Errorf("应用名称已存在")
+	}
 	require, err := service.GetGameShieldrequired(ctx, req)
 	require, err := service.GetGameShieldrequired(ctx, req)
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err
@@ -131,6 +131,13 @@ func (service *gameShieldService) SubmitGameShield(ctx context.Context, req *v1.
 }
 }
 
 
 func (service *gameShieldService) EditGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error) {
 func (service *gameShieldService) EditGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error) {
+	ruleId, err := service.gameShieldRepository.GetGameShieldRuleIdByAppName(ctx, req.AppName)
+	if err != nil {
+		return "", err
+	}
+	if ruleId != req.RuleId {
+		return "", fmt.Errorf("应用名称已存在")
+	}
 	require, err := service.GetGameShieldrequired(ctx, req)
 	require, err := service.GetGameShieldrequired(ctx, req)
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err
@@ -203,7 +210,7 @@ func (service *gameShieldService) DeleteGameShield(ctx context.Context, id int)
 }
 }
 
 
 func (service *gameShieldService) GetGameShieldKey(ctx context.Context, id int) (string, error) {
 func (service *gameShieldService) GetGameShieldKey(ctx context.Context, id int) (string, error) {
-	dunName, err := service.gameShieldRepository.GetGameShieldIdByAppName(ctx, int64(id))
+	dunName, err := service.gameShieldRepository.GetGameShieldIdByDunName(ctx, int64(id))
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err
 	}
 	}