github.com/infraboard/keyauth@v0.8.1/apps/endpoint/impl/query.go (about)

     1  package impl
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"go.mongodb.org/mongo-driver/bson"
     7  	"go.mongodb.org/mongo-driver/mongo/options"
     8  
     9  	"github.com/infraboard/keyauth/apps/endpoint"
    10  	"github.com/infraboard/mcube/exception"
    11  )
    12  
    13  func newDescribeEndpointRequest(req *endpoint.DescribeEndpointRequest) (*describeEndpointRequest, error) {
    14  	if err := req.Validate(); err != nil {
    15  		return nil, exception.NewBadRequest(err.Error())
    16  	}
    17  
    18  	return &describeEndpointRequest{req}, nil
    19  }
    20  
    21  type describeEndpointRequest struct {
    22  	*endpoint.DescribeEndpointRequest
    23  }
    24  
    25  func (req *describeEndpointRequest) String() string {
    26  	return fmt.Sprintf("endpoint: %s", req.Id)
    27  }
    28  
    29  func (req *describeEndpointRequest) FindFilter() bson.M {
    30  	filter := bson.M{}
    31  	if req.Id != "" {
    32  		filter["_id"] = req.Id
    33  	}
    34  
    35  	return filter
    36  }
    37  
    38  func newQueryEndpointRequest(req *endpoint.QueryEndpointRequest) *queryEndpointRequest {
    39  	return &queryEndpointRequest{req}
    40  }
    41  
    42  type queryEndpointRequest struct {
    43  	*endpoint.QueryEndpointRequest
    44  }
    45  
    46  func (r *queryEndpointRequest) FindOptions() *options.FindOptions {
    47  	pageSize := int64(r.Page.PageSize)
    48  	skip := int64(r.Page.PageSize) * int64(r.Page.PageNumber-1)
    49  
    50  	opt := &options.FindOptions{
    51  		Sort:  bson.D{{Key: "create_at", Value: -1}},
    52  		Limit: &pageSize,
    53  		Skip:  &skip,
    54  	}
    55  
    56  	return opt
    57  }
    58  
    59  func (r *queryEndpointRequest) FindFilter() bson.M {
    60  	filter := bson.M{}
    61  
    62  	if len(r.ServiceIds) > 0 {
    63  		filter["service_id"] = bson.M{"$in": r.ServiceIds}
    64  	}
    65  	if r.Method != "" {
    66  		filter["entry.method"] = r.Method
    67  	}
    68  	if len(r.Resources) > 0 {
    69  		filter["entry.resource"] = bson.M{"$in": r.Resources}
    70  	}
    71  	if r.Path != "" {
    72  		filter["entry.path"] = bson.M{"$regex": r.Path, "$options": "im"}
    73  	}
    74  	if r.FunctionName != "" {
    75  		filter["entry.function_name"] = r.FunctionName
    76  	}
    77  	switch r.PermissionEnable {
    78  	case endpoint.BoolQuery_TRUE:
    79  		filter["entry.permission_enable"] = true
    80  	case endpoint.BoolQuery_FALSE:
    81  		filter["entry.permission_enable"] = false
    82  	}
    83  
    84  	return filter
    85  }