Selaa lähdekoodia

refactor(internal): 重构全局限流相关逻辑

- 在 GlobalLimit 模型中添加 IsDelete 字段,用于软删除
-移除 DeleteGlobalLimitByHostId 方法,改为使用软删除逻辑- 更新 IsGlobalLimitExistByHostId 方法,增加对状态的检查
- 修改 AddGlobalLimit 和 UpdateGlobalLimitByHostId 方法,支持软删除和更新逻辑
fusu 1 kuukausi sitten
vanhempi
sitoutus
e23176dd3d

+ 1 - 0
internal/model/globallimit.go

@@ -12,6 +12,7 @@ type GlobalLimit struct {
 	CdnUid          int
 	GatewayGroupId  int
 	Comment         string
+	IsDelete         int
 	ExpiredAt       int64
 	createdAt       time.Time
 	updatedAt       time.Time

+ 1 - 9
internal/repository/globallimit.go

@@ -14,7 +14,6 @@ type GlobalLimitRepository interface {
 	GetGlobalLimit(ctx context.Context, id int64) (*model.GlobalLimit, error)
 	AddGlobalLimit(ctx context.Context, req *model.GlobalLimit) error
 	UpdateGlobalLimitByHostId(ctx context.Context, req *model.GlobalLimit) error
-	DeleteGlobalLimitByHostId(ctx context.Context, hostId int64) error
 	IsGlobalLimitExistByHostId(ctx context.Context, hostId int64) (bool, error)
 	GetGlobalLimitByHostId(ctx context.Context, hostId int64) (*model.GlobalLimit, error)
 	GetGlobalLimitAllExpired(ctx context.Context,ids []int) ([]v1.GlobalLimitExpiredByHost, error)
@@ -61,16 +60,9 @@ func (r *globalLimitRepository) UpdateGlobalLimitByHostId(ctx context.Context, r
 	return nil
 }
 
-func (r *globalLimitRepository) DeleteGlobalLimitByHostId(ctx context.Context, hostId int64) error {
-	if err := r.DB(ctx).Where("host_id = ?", hostId).Delete(&model.GlobalLimit{}).Error; err != nil {
-		return err
-	}
-	return nil
-}
-
 func (r *globalLimitRepository) IsGlobalLimitExistByHostId(ctx context.Context, hostId int64) (bool, error) {
 	var count int64
-	err := r.DB(ctx).Model(&model.GlobalLimit{}).Where("host_id = ?", hostId).Count(&count).Error
+	err := r.DB(ctx).Model(&model.GlobalLimit{}).Where("host_id = ? AND state = 1", hostId).Count(&count).Error
 
 	if err != nil {
 		return false, err

+ 30 - 0
internal/service/globallimit.go

@@ -337,6 +337,36 @@ func (s *globalLimitService) AddGlobalLimit(ctx context.Context, req v1.GlobalLi
 	if err != nil {
 		return err
 	}
+
+
+
+	// 如果存在实例,恢复
+	oldData,err := s.globalLimitRepository.GetGlobalLimitByHostId(ctx, int64(req.HostId))
+	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+		return err
+	}
+	if oldData.Id != 0 {
+		err = s.globalLimitRepository.UpdateGlobalLimitByHostId(ctx, &model.GlobalLimit{
+			HostId:         req.HostId,
+			Uid:            req.Uid,
+			Name:           require.GlobalLimitName,
+			RuleId: 		int(ruleId),
+			GroupId:        int(groupId),
+			GatewayGroupId: gatewayGroupId,
+			CdnUid:         int(userId),
+			Comment:        req.Comment,
+			ExpiredAt:      expiredAt,
+			IsDelete:       1,
+		})
+		if err != nil {
+			return err
+		}
+		return nil
+	}
+
+
+
+	// 如果不存在实例,创建
 	err = s.globalLimitRepository.AddGlobalLimit(ctx, &model.GlobalLimit{
 		HostId:         req.HostId,
 		Uid:            req.Uid,