Explorar el Código

refactor(internal): 重构 GameShield 后端数据格式化逻辑- 修改 FormatterService 接口,简化 FormatBackendData 方法签名
- 更新 GameShield 后端数据结构,将 Domain 字段改为 DunName
- 调整 GetGameShieldBackendByHostId 方法返回值类型
- 优化 GameShield后端数据查询,按 key_sort 降序排序
- 更新相关服务和控制器以适应上述变更

fusu hace 3 meses
padre
commit
61c9890cba

+ 1 - 1
api/v1/GameShield.go

@@ -33,7 +33,7 @@ type GetGameShieldRequiredResponse struct {
 	Backend   string
 	Cookie    string
 	RuleId    int
-	Domain    string
+	DunName   string
 }
 
 type KeyAndFieldResponse struct {

+ 4 - 4
internal/repository/gameshieldbackend.go

@@ -11,7 +11,7 @@ type GameShieldBackendRepository interface {
 	AddGameShieldBackend(ctx context.Context, req *model.GameShieldBackend) error
 	EditGameShieldBackend(ctx context.Context, req *v1.GameShieldBackendRequest) error
 	DeleteGameShieldBackend(ctx context.Context, id int64) error
-	GetGameShieldBackendByHostId(ctx context.Context, hostId int) (*[]model.GameShieldBackend, error)
+	GetGameShieldBackendByHostId(ctx context.Context, hostId int) ([]model.GameShieldBackend, error)
 }
 
 func NewGameShieldBackendRepository(
@@ -55,10 +55,10 @@ func (r *gameShieldBackendRepository) DeleteGameShieldBackend(ctx context.Contex
 	return nil
 }
 
-func (r *gameShieldBackendRepository) GetGameShieldBackendByHostId(ctx context.Context, hostId int) (*[]model.GameShieldBackend, error) {
+func (r *gameShieldBackendRepository) GetGameShieldBackendByHostId(ctx context.Context, hostId int) ([]model.GameShieldBackend, error) {
 	var gameShieldBackend []model.GameShieldBackend
-	if err := r.DB(ctx).Where("host_id = ?", hostId).Find(&gameShieldBackend).Error; err != nil {
+	if err := r.DB(ctx).Where("host_id = ?", hostId).Order("key_sort DESC").Find(&gameShieldBackend).Error; err != nil {
 		return nil, err
 	}
-	return &gameShieldBackend, nil
+	return gameShieldBackend, nil
 }

+ 6 - 7
internal/service/formatter.go

@@ -15,7 +15,7 @@ import (
 )
 
 type FormatterService interface {
-	FormatBackendData(ctx context.Context, req *v1.GameShieldBackendArrayRequest, output map[string]v1.SendGameShieldBackend) (string, int, error)
+	FormatBackendData(ctx context.Context, req *v1.GameShieldBackendArrayRequest, output map[string]v1.SendGameShieldBackend, keyCounter int) (string, error)
 	FormatPort(ctx context.Context, req interface{}) []int
 	OldFormat(ctx context.Context, req *[]model.GameShieldBackend) (map[string]v1.SendGameShieldBackend, error)
 	TidyFormatBackendData(ctx context.Context, req *v1.GameShieldBackendArrayRequest, keyCounter int) (map[string]v1.SendGameShieldBackend, error)
@@ -38,27 +38,26 @@ type formatterService struct {
 	gameShieldPublicIpService GameShieldPublicIpService
 }
 
-func (service *formatterService) FormatBackendData(ctx context.Context, req *v1.GameShieldBackendArrayRequest, oldFormat map[string]v1.SendGameShieldBackend) (string, int, error) {
-	keyCounter := len(oldFormat)
+func (service *formatterService) FormatBackendData(ctx context.Context, req *v1.GameShieldBackendArrayRequest, oldFormat map[string]v1.SendGameShieldBackend, keyCounter int) (string, error) {
 	formData, err := service.TidyFormatBackendData(ctx, req, keyCounter)
 	for _, v := range formData {
 		v.Type = ""
 	}
 	if err != nil {
-		return "", 0, err
+		return "", err
 	}
 	maps.Copy(formData, oldFormat)
 
 	sortedOutput, err := service.Sort(ctx, formData)
 	if err != nil {
-		return "", 0, err
+		return "", err
 	}
 	jsonBytes, err := json.MarshalIndent(sortedOutput, "", " ")
 	if err != nil {
-		return "", 0, err
+		return "", err
 	}
 
-	return string(jsonBytes), keyCounter, nil
+	return string(jsonBytes), nil
 }
 
 func (service *formatterService) FormatPort(ctx context.Context, req interface{}) []int {

+ 10 - 9
internal/service/gameshieldbackend.go

@@ -9,7 +9,6 @@ import (
 	"github.com/spf13/viper"
 	"strconv"
 	"strings"
-	"time"
 )
 
 type GameShieldBackendService interface {
@@ -80,8 +79,11 @@ func (s *gameShieldBackendService) GetGameShieldRequired(ctx context.Context, re
 	if err != nil {
 		return nil, 0, err
 	}
-	OldBackend, err := s.formatter.OldFormat(ctx, oldBackend)
-	res.Backend, count, err = s.formatter.FormatBackendData(ctx, req, OldBackend)
+	if len(oldBackend) != 0 {
+		count = oldBackend[0].KeySort
+	}
+	OldBackend, err := s.formatter.OldFormat(ctx, &oldBackend)
+	res.Backend, err = s.formatter.FormatBackendData(ctx, req, OldBackend, count)
 	if err != nil {
 		return nil, 0, err
 	}
@@ -89,7 +91,7 @@ func (s *gameShieldBackendService) GetGameShieldRequired(ctx context.Context, re
 	if err != nil {
 		return nil, 0, err
 	}
-	res.Domain, err = s.gameShieldRepository.GetHostById(ctx, req.HostId)
+	res.DunName = gameShield.DunName
 	return &res, count, nil
 }
 func (s *gameShieldBackendService) GetGameShieldBackend(ctx context.Context, id int64) (*model.GameShieldBackend, error) {
@@ -105,14 +107,13 @@ func (s *gameShieldBackendService) GameShieldBackend(ctx context.Context, req *v
 	if err != nil {
 		return "", 0, err
 	}
-	tokenUrl := s.Url + "admin/info/rule/edit?&__goadmin_edit_pk=" + strconv.Itoa(require.RuleId) + "_" + require.Domain
+	tokenUrl := s.Url + "admin/info/rule/edit?&__goadmin_edit_pk=" + strconv.Itoa(require.RuleId) + "_" + require.DunName
 	tokens, err := s.crawlerService.GetFormTokens(ctx, tokenUrl, require.Cookie)
 	if err != nil {
 		return "", 0, err
 	}
-	dunName := strconv.Itoa(req.Uid) + "_" + strconv.FormatInt(time.Now().Unix(), 10) + "_" + require.Domain
 	formData := map[string]interface{}{
-		"app_name":             dunName,
+		"app_name":             require.DunName,
 		"gateway_group_id":     4,
 		"backend":              require.Backend,
 		"rule_id":              require.RuleId,
@@ -134,11 +135,11 @@ func (s *gameShieldBackendService) GameShieldBackend(ctx context.Context, req *v
 	if res != "" {
 		return "", 0, fmt.Errorf(res)
 	}
-	KeyAndField, err := s.required.GetKeyAndField(ctx, dunName, "rule_id")
+	KeyAndField, err := s.required.GetKeyAndField(ctx, require.DunName, "rule_id")
 	if err != nil {
 		return "", 0, err
 	}
-	if err := s.gameShieldRepository.UpdateGameShieldByHostId(ctx, &model.GameShield{Id: req.HostId, Key: KeyAndField.Key, DunName: dunName}); err != nil {
+	if err := s.gameShieldRepository.UpdateGameShieldByHostId(ctx, &model.GameShield{Id: req.HostId, Key: KeyAndField.Key}); err != nil {
 		return "", 0, err
 	}
 	return res, count, nil