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"
"github.com/perfect-panel/server/pkg/tool"
"gorm.io/gorm"
)
type customServerLogicModel interface {
@ -85,10 +86,7 @@ func (m *customServerModel) FilterNodeList(ctx context.Context, params *FilterNo
query = query.Where("server_id IN ?", params.ServerId)
}
if len(params.Tag) > 0 {
query = query.Where("1 = 0")
for _, tag := range params.Tag {
query = query.Or("FIND_IN_SET(?,tags)", tag)
}
query = query.Scopes(InSet("tags", params.Tag))
}
if params.Protocol != "" {
query = query.Where("protocol = ?", params.Protocol)
@ -165,3 +163,18 @@ func (m *customServerModel) ClearServerCache(ctx context.Context, serverId int64
}
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
}
}