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

Method ListProjects

backend/api/v1/project_service.go:82–131  ·  view source on GitHub ↗

ListProjects lists all projects.

(ctx context.Context, req *connect.Request[v1pb.ListProjectsRequest])

Source from the content-addressed store, hash-verified

80
81// ListProjects lists all projects.
82func (s *ProjectService) ListProjects(ctx context.Context, req *connect.Request[v1pb.ListProjectsRequest]) (*connect.Response[v1pb.ListProjectsResponse], error) {
83 offset, err := parseLimitAndOffset(&pageSize{
84 token: req.Msg.PageToken,
85 limit: int(req.Msg.PageSize),
86 maximum: 1000,
87 })
88 if err != nil {
89 return nil, err
90 }
91 limitPlusOne := offset.limit + 1
92
93 find := &store.FindProjectMessage{
94 Workspace: common.GetWorkspaceIDFromContext(ctx),
95 ShowDeleted: req.Msg.ShowDeleted,
96 Limit: &limitPlusOne,
97 Offset: &offset.offset,
98 }
99 filterQ, err := store.GetListProjectFilter(common.GetWorkspaceIDFromContext(ctx), req.Msg.Filter)
100 if err != nil {
101 return nil, connect.NewError(connect.CodeInvalidArgument, err)
102 }
103 find.FilterQ = filterQ
104
105 orderByKeys, err := store.GetProjectOrders(req.Msg.OrderBy)
106 if err != nil {
107 return nil, connect.NewError(connect.CodeInvalidArgument, err)
108 }
109 find.OrderByKeys = orderByKeys
110
111 projects, err := s.store.ListProjects(ctx, find)
112 if err != nil {
113 return nil, connect.NewError(connect.CodeInternal, err)
114 }
115
116 nextPageToken := ""
117 if len(projects) == limitPlusOne {
118 projects = projects[:offset.limit]
119 if nextPageToken, err = offset.getNextPageToken(); err != nil {
120 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to marshal next page token"))
121 }
122 }
123
124 response := &v1pb.ListProjectsResponse{
125 NextPageToken: nextPageToken,
126 }
127 for _, project := range projects {
128 response.Projects = append(response.Projects, convertToProject(project))
129 }
130 return connect.NewResponse(response), nil
131}
132
133// SearchProjects searches all projects on which the user has bb.projects.get permission.
134func (s *ProjectService) SearchProjects(ctx context.Context, req *connect.Request[v1pb.SearchProjectsRequest]) (*connect.Response[v1pb.SearchProjectsResponse], error) {

Callers

nothing calls this directly

Calls 7

GetListProjectFilterFunction · 0.92
GetProjectOrdersFunction · 0.92
parseLimitAndOffsetFunction · 0.85
convertToProjectFunction · 0.85
getNextPageTokenMethod · 0.80
ListProjectsMethod · 0.65

Tested by

no test coverage detected