feat(userlist): enhance GetServerUserListLogic with improved node and tag handling

This commit is contained in:
Chang lue Tsen 2025-09-04 13:46:24 -04:00
parent 805fca90e0
commit 61ac829c37
3 changed files with 36 additions and 6 deletions

View File

@ -23,7 +23,7 @@ type GetServerUserListLogic struct {
svcCtx *svc.ServiceContext
}
// Get user list
// NewGetServerUserListLogic Get user list
func NewGetServerUserListLogic(ctx *gin.Context, svcCtx *svc.ServiceContext) *GetServerUserListLogic {
return &GetServerUserListLogic{
Logger: logger.WithContext(ctx.Request.Context()),

View File

@ -4,8 +4,11 @@ import (
"context"
"errors"
"fmt"
"strings"
"github.com/perfect-panel/server/internal/model/node"
"github.com/perfect-panel/server/pkg/cache"
"github.com/perfect-panel/server/pkg/tool"
"github.com/redis/go-redis/v9"
"gorm.io/gorm"
)
@ -57,7 +60,34 @@ func (m *defaultSubscribeModel) getCacheKeys(data *Subscribe) []string {
if data == nil {
return []string{}
}
return []string{fmt.Sprintf("%s%v", cacheSubscribeIdPrefix, data.Id)}
var keys []string
if data.Nodes != "" {
var nodes []*node.Node
ids := strings.Split(data.Nodes, ",")
err := m.QueryNoCacheCtx(context.Background(), &nodes, func(conn *gorm.DB, v interface{}) error {
return conn.Model(&node.Node{}).Where("id IN (?)", tool.StringSliceToInt64Slice(ids)).Find(&nodes).Error
})
if err == nil {
for _, n := range nodes {
keys = append(keys, fmt.Sprintf("%s%d", node.ServerUserListCacheKey, n.ServerId))
}
}
}
if data.NodeTags != "" {
var nodes []*node.Node
tags := tool.RemoveDuplicateElements(strings.Split(data.NodeTags, ",")...)
err := m.QueryNoCacheCtx(context.Background(), &nodes, func(conn *gorm.DB, v interface{}) error {
return conn.Model(&node.Node{}).Scopes(InSet("tags", tags)).Find(&nodes).Error
})
if err == nil {
for _, n := range nodes {
keys = append(keys, fmt.Sprintf("%s%d", node.ServerUserListCacheKey, n.ServerId))
}
}
}
return append(keys, fmt.Sprintf("%s%v", cacheSubscribeIdPrefix, data.Id))
}
func (m *defaultSubscribeModel) Insert(ctx context.Context, data *Subscribe, tx ...*gorm.DB) error {

View File

@ -147,14 +147,14 @@ func InSet(field string, values []string) func(db *gorm.DB) *gorm.DB {
return db
}
conds := db
query := db
for i, v := range values {
if i == 0 {
conds = conds.Where("FIND_IN_SET(?, "+field+")", v)
query = query.Where("FIND_IN_SET(?, "+field+")", v)
} else {
conds = conds.Or("FIND_IN_SET(?, "+field+")", v)
query = query.Or("FIND_IN_SET(?, "+field+")", v)
}
}
return conds
return query
}
}