MCPcopy Create free account
hub / github.com/bytebase/bytebase / getIssueFind

Method getIssueFind

backend/api/v1/issue_service.go:78–231  ·  view source on GitHub ↗
(
	ctx context.Context,
	filter string,
	query string,
	limit,
	offset *int,
)

Source from the content-addressed store, hash-verified

76}
77
78func (s *IssueService) getIssueFind(
79 ctx context.Context,
80 filter string,
81 query string,
82 limit,
83 offset *int,
84) (*store.FindIssueMessage, *filterIssueMessage, error) {
85 issueFind := &store.FindIssueMessage{
86 Workspace: common.GetWorkspaceIDFromContext(ctx),
87 Limit: limit,
88 Offset: offset,
89 }
90 if query != "" {
91 issueFind.Query = &query
92 }
93 if filter == "" {
94 return issueFind, nil, nil
95 }
96
97 e, err := cel.NewEnv()
98 if err != nil {
99 return nil, nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to create cel env"))
100 }
101 ast, iss := e.Parse(filter)
102 if iss != nil {
103 return nil, nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("failed to parse filter %v, error: %v", filter, iss.String()))
104 }
105
106 filterIssue := &filterIssueMessage{}
107
108 var parseFilter func(expr celast.Expr) (string, error)
109 parseFilter = func(expr celast.Expr) (string, error) {
110 switch expr.Kind() {
111 case celast.CallKind:
112 functionName := expr.AsCall().FunctionName()
113 switch functionName {
114 case celoperators.LogicalAnd:
115 return getSubConditionFromExpr(expr, parseFilter, "AND")
116 case celoperators.Equals:
117 variable, value := getVariableAndValueFromExpr(expr)
118 switch variable {
119 case "status":
120 issueStatus, err := convertToAPIIssueStatus(v1pb.IssueStatus(v1pb.IssueStatus_value[value.(string)]))
121 if err != nil {
122 return "", connect.NewError(connect.CodeInvalidArgument, errors.Errorf("failed to convert to issue status, err: %v", err))
123 }
124 issueFind.StatusList = append(issueFind.StatusList, issueStatus)
125 case "type":
126 issueType, err := convertToAPIIssueType(v1pb.Issue_Type(v1pb.Issue_Type_value[value.(string)]))
127 if err != nil {
128 return "", connect.NewError(connect.CodeInvalidArgument, errors.Errorf("failed to convert to issue type, err: %v", err))
129 }
130 issueFind.Types = &[]storepb.Issue_Type{issueType}
131 case "labels":
132 issueFind.LabelList = append(issueFind.LabelList, value.(string))
133 case "approval_status":
134 approvalStatusValue, ok := v1pb.ApprovalStatus_value[value.(string)]
135 if !ok {

Callers 2

ListIssuesMethod · 0.95
SearchIssuesMethod · 0.95

Calls 10

getUserByIdentifierMethod · 0.95
getSubConditionFromExprFunction · 0.85
convertToAPIIssueStatusFunction · 0.85
convertToAPIIssueTypeFunction · 0.85
convertToAPIRiskLevelFunction · 0.85
ErrorfMethod · 0.80
StringMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected