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

Method ListIssues

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

Source from the content-addressed store, hash-verified

231}
232
233func (s *IssueService) ListIssues(ctx context.Context, req *connect.Request[v1pb.ListIssuesRequest]) (*connect.Response[v1pb.ListIssuesResponse], error) {
234 if req.Msg.PageSize < 0 {
235 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("page size must be non-negative: %d", req.Msg.PageSize))
236 }
237
238 projectID, err := common.GetProjectID(req.Msg.Parent)
239 if err != nil {
240 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("%v", err.Error()))
241 }
242
243 offset, err := parseLimitAndOffset(&pageSize{
244 token: req.Msg.PageToken,
245 limit: int(req.Msg.PageSize),
246 maximum: 1000,
247 })
248 if err != nil {
249 return nil, err
250 }
251 limitPlusOne := offset.limit + 1
252
253 issueFind, issueFilter, err := s.getIssueFind(ctx, req.Msg.Filter, req.Msg.Query, &limitPlusOne, &offset.offset)
254 if err != nil {
255 return nil, err
256 }
257 issueFind.ProjectIDs = []string{projectID}
258
259 orderByKeys, err := store.GetIssueOrders(req.Msg.OrderBy)
260 if err != nil {
261 return nil, connect.NewError(connect.CodeInvalidArgument, err)
262 }
263 issueFind.OrderByKeys = orderByKeys
264
265 issues, err := s.store.ListIssues(ctx, issueFind)
266 if err != nil {
267 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to search issue"))
268 }
269
270 var nextPageToken string
271 if len(issues) == limitPlusOne {
272 if nextPageToken, err = offset.getNextPageToken(); err != nil {
273 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get next page token"))
274 }
275 issues = issues[:offset.limit]
276 }
277
278 converted, err := s.convertToIssues(ctx, issues, issueFilter)
279 if err != nil {
280 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to convert to issue"))
281 }
282 return connect.NewResponse(&v1pb.ListIssuesResponse{
283 Issues: converted,
284 NextPageToken: nextPageToken,
285 }), nil
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 {

Callers

nothing calls this directly

Calls 9

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

Tested by

no test coverage detected