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

Method SearchIssues

backend/api/v1/issue_service.go:288–359  ·  view source on GitHub ↗
(ctx context.Context, req *connect.Request[v1pb.SearchIssuesRequest])

Source from the content-addressed store, hash-verified

286}
287
288func (s *IssueService) SearchIssues(ctx context.Context, req *connect.Request[v1pb.SearchIssuesRequest]) (*connect.Response[v1pb.SearchIssuesResponse], error) {
289 if req.Msg.PageSize < 0 {
290 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("page size must be non-negative: %d", req.Msg.PageSize))
291 }
292
293 projectID, err := common.GetProjectID(req.Msg.Parent)
294 if err != nil {
295 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("%v", err.Error()))
296 }
297
298 offset, err := parseLimitAndOffset(&pageSize{
299 token: req.Msg.PageToken,
300 limit: int(req.Msg.PageSize),
301 maximum: 1000,
302 })
303 if err != nil {
304 return nil, err
305 }
306 limitPlusOne := offset.limit + 1
307
308 issueFind, issueFilter, err := s.getIssueFind(ctx, req.Msg.Filter, req.Msg.Query, &limitPlusOne, &offset.offset)
309 if err != nil {
310 return nil, err
311 }
312
313 orderByKeys, err := store.GetIssueOrders(req.Msg.OrderBy)
314 if err != nil {
315 return nil, connect.NewError(connect.CodeInvalidArgument, err)
316 }
317 issueFind.OrderByKeys = orderByKeys
318
319 var projectIDs []string
320 if projectID != "-" {
321 projectIDs = append(projectIDs, projectID)
322 } else {
323 // Cross-project search
324 user, ok := GetUserFromContext(ctx)
325 if !ok {
326 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("user not found"))
327 }
328 projectIDsFilter, err := getProjectIDsSearchFilter(ctx, user, permission.IssuesGet, s.iamManager, s.store)
329 if err != nil {
330 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get projectIDs"))
331 }
332 if projectIDsFilter != nil {
333 projectIDs = *projectIDsFilter
334 }
335 }
336 issueFind.ProjectIDs = projectIDs
337
338 issues, err := s.store.ListIssues(ctx, issueFind)
339 if err != nil {
340 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to search issue"))
341 }
342
343 var nextPageToken string
344 if len(issues) == limitPlusOne {
345 if nextPageToken, err = offset.getNextPageToken(); err != nil {

Callers

nothing calls this directly

Calls 11

getIssueFindMethod · 0.95
convertToIssuesMethod · 0.95
GetProjectIDFunction · 0.92
GetIssueOrdersFunction · 0.92
parseLimitAndOffsetFunction · 0.85
GetUserFromContextFunction · 0.85
ErrorfMethod · 0.80
getNextPageTokenMethod · 0.80
ListIssuesMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected