Files
APIPark/module/service/filter.go
T
2024-11-28 18:34:15 +08:00

147 lines
3.3 KiB
Go

package service
import (
"context"
"github.com/APIParkLab/APIPark/service/subscribe"
service_dto "github.com/APIParkLab/APIPark/module/service/dto"
"github.com/eolinker/go-common/auto"
"github.com/APIParkLab/APIPark/service/service"
"github.com/eolinker/eosc/log"
"github.com/eolinker/go-common/utils"
strategy_filter "github.com/APIParkLab/APIPark/strategy-filter"
)
var _ strategy_filter.IRemoteFilter = (*imlAppFilter)(nil)
type imlAppFilter struct {
service service.IServiceService `autowired:""`
subscriberService subscribe.ISubscribeService `autowired:""`
}
func (i *imlAppFilter) Name() string {
return "application"
}
func (i *imlAppFilter) Title() string {
return "consumer"
}
func (i *imlAppFilter) Labels(values ...string) []string {
if len(values) == 0 {
return nil
}
if values[0] == strategy_filter.ValuesALL {
return []string{
"all consumer",
}
}
apps, err := i.service.AppList(context.Background(), values...)
if err != nil {
log.Error(err)
return nil
}
return utils.SliceToSlice(apps, func(a *service.Service) string {
return a.Name
})
}
func (i *imlAppFilter) Type() string {
return strategy_filter.TypeRemote
}
func (i *imlAppFilter) Scopes() []string {
return []string{
strategy_filter.ScopeGlobal,
strategy_filter.ScopeService,
}
}
func (i *imlAppFilter) Option() *strategy_filter.Option {
return &strategy_filter.Option{
Name: i.Name(),
Title: i.Title(),
Type: i.Type(),
}
}
func (i *imlAppFilter) Titles() []strategy_filter.OptionTitle {
return []strategy_filter.OptionTitle{
{
Field: "name",
Title: "consumer",
},
{
Field: "id",
Title: "consumer id",
},
{
Field: "description",
Title: "description",
},
}
}
func (i *imlAppFilter) Key() string {
return "id"
}
func (i *imlAppFilter) Target() string {
return "list"
}
func (i *imlAppFilter) RemoteList(ctx context.Context, keyword string, condition map[string]interface{}, page int, pageSize int) ([]any, int64, error) {
if condition == nil {
condition = make(map[string]interface{})
}
if serviceId, ok := condition["service"]; ok {
// 查询订阅了该服务的消费者
v, ok := serviceId.(string)
if ok {
subscribers, err := i.subscriberService.Subscribers(ctx, v, subscribe.ApplyStatusSubscribe)
if err != nil {
return nil, 0, err
}
if len(subscribers) > 0 {
appIds := utils.SliceToSlice(subscribers, func(s *subscribe.Subscribe) string {
return s.Application
})
condition["uuid"] = appIds
}
}
delete(condition, "service")
}
condition["as_app"] = true
if pageSize == -1 {
// 获取全部
list, err := i.service.Search(ctx, keyword, condition, "update_at")
if err != nil {
return nil, 0, err
}
return utils.SliceToSlice(list, func(s *service.Service) any {
return &service_dto.SimpleAppItem{
Id: s.Id,
Name: s.Name,
Team: auto.UUID(s.Team),
Description: s.Description,
}
}), int64(len(list)), nil
}
list, total, err := i.service.SearchByPage(ctx, keyword, condition, page, pageSize, "update_at")
if err != nil {
return nil, 0, err
}
return utils.SliceToSlice(list, func(s *service.Service) any {
return &service_dto.SimpleAppItem{
Id: s.Id,
Name: s.Name,
Team: auto.UUID(s.Team),
Description: s.Description,
}
}), total, nil
}