fix(model): simplify tag filtering using GORM scopes

This commit is contained in:
Chang lue Tsen 2025-10-03 14:53:52 -04:00
parent 1a6cced814
commit c5be0081ca

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"github.com/perfect-panel/server/pkg/tool" "github.com/perfect-panel/server/pkg/tool"
"gorm.io/gorm"
) )
type customServerLogicModel interface { type customServerLogicModel interface {
@ -85,10 +86,7 @@ func (m *customServerModel) FilterNodeList(ctx context.Context, params *FilterNo
query = query.Where("server_id IN ?", params.ServerId) query = query.Where("server_id IN ?", params.ServerId)
} }
if len(params.Tag) > 0 { if len(params.Tag) > 0 {
query = query.Where("1 = 0") query = query.Scopes(InSet("tags", params.Tag))
for _, tag := range params.Tag {
query = query.Or("FIND_IN_SET(?,tags)", tag)
}
} }
if params.Protocol != "" { if params.Protocol != "" {
query = query.Where("protocol = ?", params.Protocol) query = query.Where("protocol = ?", params.Protocol)
@ -165,3 +163,18 @@ func (m *customServerModel) ClearServerCache(ctx context.Context, serverId int64
} }
return nil return nil
} }
// InSet GORM InSet
func InSet(field string, values []string) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
if len(values) == 0 {
return db
}
query := db.Where("1=0")
for _, v := range values {
query = query.Or("FIND_IN_SET(?, "+field+")", v)
}
return query
}
}