Browse Source

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

- 修改 GetGameShieldDuplicateName 方法,增加 uid 参数以实现更精确的重复名称检查
- 重命名部分方法以提高代码可读性:
  - GetGameShieldNameByAppName -> GetGameShieldNameByDunName
  - GetGameShieldIdByAppName -> GetGameShieldIdByDunName
- 新增 GetGameShieldRuleIdByAppName 方法,用于获取应用名称对应的规则 ID
- 更新相关服务层逻辑,以适应新的接口和方法
fusu 3 tháng trước cách đây
mục cha
commit
e9debc2a88
2 tập tin đã thay đổi với 33 bổ sung15 xóa
  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 {
 	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
 	UpdateGameShield(ctx context.Context, gameShield *model.GameShield) error
 	DeleteGameShield(ctx context.Context, ruleId int) error
 	GetGameShieldIsBuy(ctx context.Context, uid int64) (int64, error)
 	GetGameShieldNextduedate(ctx context.Context, uid int64, productID 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(
@@ -38,9 +39,9 @@ func (r *gameShieldRepository) GetGameShieldById(ctx context.Context, id int64)
 	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
-	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 count, nil
@@ -103,7 +104,7 @@ func (r *gameShieldRepository) GetGameShieldExistingIps(ctx context.Context, ip
 	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
 	if err := r.DB(ctx).Model(&model.GameShield{}).
 		Where("app_name = ?", appName).
@@ -113,7 +114,7 @@ func (r *gameShieldRepository) GetGameShieldNameByAppName(ctx context.Context, a
 	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
 	if err := r.DB(ctx).Model(&model.GameShield{}).
 		Where("id = ?", id).
@@ -122,3 +123,13 @@ func (r *gameShieldRepository) GetGameShieldIdByAppName(ctx context.Context, id
 	}
 	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 {
 		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)
 	if err != nil {
 		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) {
+	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)
 	if err != nil {
 		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) {
+	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)
 	if err != nil {
 		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) {
-	dunName, err := service.gameShieldRepository.GetGameShieldIdByAppName(ctx, int64(id))
+	dunName, err := service.gameShieldRepository.GetGameShieldIdByDunName(ctx, int64(id))
 	if err != nil {
 		return "", err
 	}