feat(userlist): enhance GetServerUserListLogic with improved node and tag handling
This commit is contained in:
parent
805fca90e0
commit
61ac829c37
@ -23,7 +23,7 @@ type GetServerUserListLogic struct {
|
|||||||
svcCtx *svc.ServiceContext
|
svcCtx *svc.ServiceContext
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get user list
|
// NewGetServerUserListLogic Get user list
|
||||||
func NewGetServerUserListLogic(ctx *gin.Context, svcCtx *svc.ServiceContext) *GetServerUserListLogic {
|
func NewGetServerUserListLogic(ctx *gin.Context, svcCtx *svc.ServiceContext) *GetServerUserListLogic {
|
||||||
return &GetServerUserListLogic{
|
return &GetServerUserListLogic{
|
||||||
Logger: logger.WithContext(ctx.Request.Context()),
|
Logger: logger.WithContext(ctx.Request.Context()),
|
||||||
|
|||||||
@ -4,8 +4,11 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/perfect-panel/server/internal/model/node"
|
||||||
"github.com/perfect-panel/server/pkg/cache"
|
"github.com/perfect-panel/server/pkg/cache"
|
||||||
|
"github.com/perfect-panel/server/pkg/tool"
|
||||||
"github.com/redis/go-redis/v9"
|
"github.com/redis/go-redis/v9"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
@ -57,7 +60,34 @@ func (m *defaultSubscribeModel) getCacheKeys(data *Subscribe) []string {
|
|||||||
if data == nil {
|
if data == nil {
|
||||||
return []string{}
|
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 {
|
func (m *defaultSubscribeModel) Insert(ctx context.Context, data *Subscribe, tx ...*gorm.DB) error {
|
||||||
|
|||||||
@ -147,14 +147,14 @@ func InSet(field string, values []string) func(db *gorm.DB) *gorm.DB {
|
|||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
conds := db
|
query := db
|
||||||
for i, v := range values {
|
for i, v := range values {
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
conds = conds.Where("FIND_IN_SET(?, "+field+")", v)
|
query = query.Where("FIND_IN_SET(?, "+field+")", v)
|
||||||
} else {
|
} else {
|
||||||
conds = conds.Or("FIND_IN_SET(?, "+field+")", v)
|
query = query.Or("FIND_IN_SET(?, "+field+")", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return conds
|
return query
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user