@@ -30,10 +30,11 @@ import (
3030var ErrRuleTemplateNotExist = errors .New (errors .DataNotExist , fmt .Errorf ("rule template not exist" ))
3131
3232type CreateRuleTemplateReqV1 struct {
33- Name string `json:"rule_template_name" valid:"required,name"`
34- Desc string `json:"desc"`
35- DBType string `json:"db_type" valid:"required"`
36- RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
33+ Name string `json:"rule_template_name" valid:"required,name"`
34+ Desc string `json:"desc"`
35+ DBType string `json:"db_type" valid:"required"`
36+ RuleVersion string `json:"rule_version"`
37+ RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
3738}
3839
3940type RuleReqV1 struct {
@@ -176,10 +177,11 @@ func CreateRuleTemplate(c echo.Context) error {
176177 }
177178
178179 ruleTemplate := & model.RuleTemplate {
179- ProjectId : model .ProjectIdForGlobalRuleTemplate ,
180- Name : req .Name ,
181- Desc : req .Desc ,
182- DBType : req .DBType ,
180+ ProjectId : model .ProjectIdForGlobalRuleTemplate ,
181+ Name : req .Name ,
182+ Desc : req .Desc ,
183+ DBType : req .DBType ,
184+ RuleVersion : req .RuleVersion ,
183185 }
184186 templateRules := []model.RuleTemplateRule {}
185187 templateCustomRules := []model.RuleTemplateCustomRule {}
@@ -277,10 +279,11 @@ type GetRuleTemplateResV1 struct {
277279}
278280
279281type RuleTemplateDetailResV1 struct {
280- Name string `json:"rule_template_name"`
281- Desc string `json:"desc"`
282- DBType string `json:"db_type"`
283- RuleList []RuleResV1 `json:"rule_list,omitempty"`
282+ Name string `json:"rule_template_name"`
283+ Desc string `json:"desc"`
284+ DBType string `json:"db_type"`
285+ RuleVersion string `json:"rule_version"`
286+ RuleList []RuleResV1 `json:"rule_list,omitempty"`
284287}
285288
286289func convertRuleTemplateToRes (ctx context.Context , template * model.RuleTemplate ) * RuleTemplateDetailResV1 {
@@ -298,10 +301,11 @@ func convertRuleTemplateToRes(ctx context.Context, template *model.RuleTemplate)
298301 ruleList = append (ruleList , convertCustomRuleToRuleResV1 (r .GetRule ()))
299302 }
300303 return & RuleTemplateDetailResV1 {
301- Name : template .Name ,
302- Desc : template .Desc ,
303- DBType : template .DBType ,
304- RuleList : ruleList ,
304+ Name : template .Name ,
305+ Desc : template .Desc ,
306+ DBType : template .DBType ,
307+ RuleVersion : template .RuleVersion ,
308+ RuleList : ruleList ,
305309 }
306310}
307311
@@ -402,9 +406,10 @@ type GetRuleTemplatesResV1 struct {
402406}
403407
404408type RuleTemplateResV1 struct {
405- Name string `json:"rule_template_name"`
406- Desc string `json:"desc"`
407- DBType string `json:"db_type"`
409+ Name string `json:"rule_template_name"`
410+ Desc string `json:"desc"`
411+ DBType string `json:"db_type"`
412+ RuleVersion string `json:"rule_version"`
408413}
409414
410415// @Summary 全局规则模板列表
@@ -454,9 +459,10 @@ func convertDefaultRuleTemplatesToRes(ctx context.Context, ruleTemplates []*mode
454459 ruleTemplatesReq := make ([]RuleTemplateResV1 , 0 , len (ruleTemplates ))
455460 for _ , ruleTemplate := range ruleTemplates {
456461 ruleTemplateReq := RuleTemplateResV1 {
457- Name : ruleTemplate .Name ,
458- Desc : locale .Bundle .LocalizeMsgByCtx (ctx , locale .DefaultRuleTemplatesDesc ),
459- DBType : ruleTemplate .DBType ,
462+ Name : ruleTemplate .Name ,
463+ Desc : locale .Bundle .LocalizeMsgByCtx (ctx , locale .DefaultRuleTemplatesDesc ),
464+ DBType : ruleTemplate .DBType ,
465+ RuleVersion : ruleTemplate .RuleVersion ,
460466 }
461467 ruleTemplatesReq = append (ruleTemplatesReq , ruleTemplateReq )
462468 }
@@ -467,6 +473,7 @@ type GetRulesReqV1 struct {
467473 FilterDBType string `json:"filter_db_type" query:"filter_db_type"`
468474 FilterGlobalRuleTemplateName string `json:"filter_global_rule_template_name" query:"filter_global_rule_template_name"`
469475 FilterRuleNames string `json:"filter_rule_names" query:"filter_rule_names"`
476+ FilterRuleVersion string `json:"filter_rule_version" query:"filter_rule_version"`
470477 FuzzyKeywordRule string `json:"fuzzy_keyword_rule" query:"fuzzy_keyword_rule"`
471478 Tags string `json:"tags" query:"tags"`
472479}
@@ -591,6 +598,7 @@ func convertRulesToRes(ctx context.Context, rules interface{}) []RuleResV1 {
591598// @Param fuzzy_keyword_rule query string false "fuzzy rule,keyword for desc and annotation"
592599// @Param filter_global_rule_template_name query string false "filter global rule template name"
593600// @Param filter_rule_names query string false "filter rule name list"
601+ // @Param filter_rule_version query string false "filter rule version"
594602// @Param tags query string false "filter tags"
595603// @Success 200 {object} v1.GetRulesResV1
596604// @router /v1/rules [get]
@@ -608,6 +616,7 @@ func GetRules(c echo.Context) error {
608616 "filter_global_rule_template_name" : req .FilterGlobalRuleTemplateName ,
609617 "filter_db_type" : req .FilterDBType ,
610618 "filter_rule_names" : req .FilterRuleNames ,
619+ "filter_rule_version" : req .FilterRuleVersion ,
611620 "fuzzy_keyword_rule" : req .FuzzyKeywordRule ,
612621 "tags" : req .Tags ,
613622 })
@@ -687,6 +696,7 @@ type RuleTemplateTipResV1 struct {
687696 ID string `json:"rule_template_id"`
688697 Name string `json:"rule_template_name"`
689698 DBType string `json:"db_type"`
699+ RuleVersion string `json:"rule_version"`
690700 IsDefaultRuleTemplate bool `json:"is_default_rule_template"`
691701}
692702
@@ -726,6 +736,7 @@ func getRuleTemplateTips(c echo.Context, projectId string, filterDBType string)
726736 ID : roleTemplate .GetIDStr (),
727737 Name : roleTemplate .Name ,
728738 DBType : roleTemplate .DBType ,
739+ RuleVersion : roleTemplate .RuleVersion ,
729740 IsDefaultRuleTemplate : isDefaultRuleTemplate ,
730741 }
731742 ruleTemplateTipsRes = append (ruleTemplateTipsRes , ruleTemplateTipRes )
@@ -776,10 +787,11 @@ func CloneRuleTemplate(c echo.Context) error {
776787 }
777788
778789 ruleTemplate := & model.RuleTemplate {
779- ProjectId : model .ProjectIdForGlobalRuleTemplate ,
780- Name : req .Name ,
781- Desc : req .Desc ,
782- DBType : sourceTpl .DBType ,
790+ ProjectId : model .ProjectIdForGlobalRuleTemplate ,
791+ Name : req .Name ,
792+ Desc : req .Desc ,
793+ DBType : sourceTpl .DBType ,
794+ RuleVersion : sourceTpl .RuleVersion ,
783795 }
784796 err = s .Save (ruleTemplate )
785797 if err != nil {
@@ -814,10 +826,11 @@ func CheckRuleTemplateCanBeBindEachInstance(s *model.Storage, tplName string, in
814826}
815827
816828type CreateProjectRuleTemplateReqV1 struct {
817- Name string `json:"rule_template_name" valid:"required,name"`
818- Desc string `json:"desc"`
819- DBType string `json:"db_type" valid:"required"`
820- RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
829+ Name string `json:"rule_template_name" valid:"required,name"`
830+ Desc string `json:"desc"`
831+ DBType string `json:"db_type" valid:"required"`
832+ RuleVersion string `json:"rule_version"`
833+ RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
821834}
822835
823836// CreateProjectRuleTemplate
@@ -851,10 +864,11 @@ func CreateProjectRuleTemplate(c echo.Context) error {
851864 }
852865
853866 ruleTemplate := & model.RuleTemplate {
854- ProjectId : model .ProjectUID (projectUid ),
855- Name : req .Name ,
856- Desc : req .Desc ,
857- DBType : req .DBType ,
867+ ProjectId : model .ProjectUID (projectUid ),
868+ Name : req .Name ,
869+ Desc : req .Desc ,
870+ DBType : req .DBType ,
871+ RuleVersion : req .RuleVersion ,
858872 }
859873 templateRules := []model.RuleTemplateRule {}
860874 templateCustomRules := []model.RuleTemplateCustomRule {}
@@ -980,10 +994,11 @@ type GetProjectRuleTemplateResV1 struct {
980994}
981995
982996type RuleProjectTemplateDetailResV1 struct {
983- Name string `json:"rule_template_name"`
984- Desc string `json:"desc"`
985- DBType string `json:"db_type"`
986- RuleList []RuleResV1 `json:"rule_list,omitempty"`
997+ Name string `json:"rule_template_name"`
998+ Desc string `json:"desc"`
999+ DBType string `json:"db_type"`
1000+ RuleVersion string `json:"rule_version"`
1001+ RuleList []RuleResV1 `json:"rule_list,omitempty"`
9871002}
9881003
9891004type ProjectRuleTemplateInstance struct {
@@ -1044,10 +1059,11 @@ func convertProjectRuleTemplateToRes(ctx context.Context, template *model.RuleTe
10441059 ruleList = append (ruleList , convertCustomRuleToRuleResV1 (r .GetRule ()))
10451060 }
10461061 return & RuleProjectTemplateDetailResV1 {
1047- Name : template .Name ,
1048- Desc : template .Desc ,
1049- DBType : template .DBType ,
1050- RuleList : ruleList ,
1062+ Name : template .Name ,
1063+ Desc : template .Desc ,
1064+ DBType : template .DBType ,
1065+ RuleVersion : template .RuleVersion ,
1066+ RuleList : ruleList ,
10511067 }
10521068}
10531069
@@ -1244,10 +1260,11 @@ func CloneProjectRuleTemplate(c echo.Context) error {
12441260 // }
12451261
12461262 ruleTemplate := & model.RuleTemplate {
1247- ProjectId : model .ProjectUID (projectUid ),
1248- Name : req .Name ,
1249- Desc : req .Desc ,
1250- DBType : sourceTpl .DBType ,
1263+ ProjectId : model .ProjectUID (projectUid ),
1264+ Name : req .Name ,
1265+ Desc : req .Desc ,
1266+ DBType : sourceTpl .DBType ,
1267+ RuleVersion : sourceTpl .RuleVersion ,
12511268 }
12521269 err = s .Save (ruleTemplate )
12531270 if err != nil {
@@ -1298,10 +1315,11 @@ type ParseProjectRuleTemplateFileResV1 struct {
12981315}
12991316
13001317type ParseProjectRuleTemplateFileResDataV1 struct {
1301- Name string `json:"name"`
1302- Desc string `json:"desc"`
1303- DBType string `json:"db_type"`
1304- RuleList []RuleResV1 `json:"rule_list"`
1318+ Name string `json:"name"`
1319+ Desc string `json:"desc"`
1320+ DBType string `json:"db_type"`
1321+ RuleVersion string `json:"rule_version"`
1322+ RuleList []RuleResV1 `json:"rule_list"`
13051323}
13061324
13071325// ParseProjectRuleTemplateFile parse rule template
@@ -1345,8 +1363,19 @@ var ErrRule = e.New("rule has error")
13451363
13461364func checkRuleList (file * ParseProjectRuleTemplateFileResDataV1 ) (* RuleTemplateExportErr , error ) {
13471365 ruleNameList := make ([]string , 0 , len (file .RuleList ))
1366+ var hasNewRule , hasOldRule bool
13481367 for _ , rule := range file .RuleList {
13491368 ruleNameList = append (ruleNameList , rule .Name )
1369+ if file .DBType == driverV2 .DriverTypeMySQL {
1370+ hasNewRule = hasNewRule || strings .HasPrefix (rule .Name , "SQLE" )
1371+ hasOldRule = hasOldRule || ! strings .HasPrefix (rule .Name , "SQLE" )
1372+ if hasOldRule && hasNewRule {
1373+ return nil , fmt .Errorf ("cannot import rule template that contains both old and new rules" )
1374+ }
1375+ if hasNewRule {
1376+ file .RuleVersion = "v2"
1377+ }
1378+ }
13501379 }
13511380
13521381 s := model .GetStorage ()
0 commit comments