Files
2024-11-26 23:44:00 +08:00

113 lines
2.3 KiB
Go

package router
import (
"context"
router_dto "github.com/APIParkLab/APIPark/module/router/dto"
"github.com/eolinker/go-common/utils"
"github.com/eolinker/eosc/log"
"github.com/APIParkLab/APIPark/service/api"
strategy_filter "github.com/APIParkLab/APIPark/strategy-filter"
)
var _ strategy_filter.IRemoteFilter = (*imlRouterFilter)(nil)
type imlRouterFilter struct {
service api.IAPIService `autowired:""`
}
func (i *imlRouterFilter) Name() string {
return "api"
}
func (i *imlRouterFilter) Title() string {
return "API"
}
func (i *imlRouterFilter) Labels(values ...string) []string {
list, err := i.service.ListInfo(context.Background(), values...)
if err != nil {
log.Errorf("get api labels error: %v", err)
return nil
}
return utils.SliceToSlice(list, func(a *api.Info) string {
return a.Name
})
}
func (i *imlRouterFilter) Type() string {
return strategy_filter.TypeRemote
}
func (i *imlRouterFilter) Scopes() []string {
return []string{
//strategy_filter.ScopeGlobal,
strategy_filter.ScopeService,
}
}
func (i *imlRouterFilter) Option() *strategy_filter.Option {
return &strategy_filter.Option{
Name: i.Name(),
Title: i.Title(),
Type: i.Type(),
}
}
func (i *imlRouterFilter) Titles() []strategy_filter.OptionTitle {
return []strategy_filter.OptionTitle{
{
Field: "name",
Title: "api name",
},
{
Field: "methods",
Title: "methods",
},
{
Field: "request_path",
Title: "request path",
},
}
}
func (i *imlRouterFilter) Key() string {
return "id"
}
func (i *imlRouterFilter) Target() string {
return "list"
}
func (i *imlRouterFilter) RemoteList(ctx context.Context, keyword string, condition map[string]interface{}, page int, pageSize int) ([]any, int64, error) {
if pageSize == -1 {
// 获取全部
list, err := i.service.Search(ctx, keyword, condition)
if err != nil {
return nil, 0, err
}
return utils.SliceToSlice(list, func(s *api.API) any {
return &router_dto.SimpleItem{
Id: s.UUID,
Path: s.Path,
Methods: s.Method,
}
}), 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 *api.API) any {
return &router_dto.SimpleItem{
Id: s.UUID,
Path: s.Path,
Methods: s.Method,
}
}), total, nil
}