ListProjects lists all projects.
(ctx context.Context, req *connect.Request[v1pb.ListProjectsRequest])
| 80 | |
| 81 | // ListProjects lists all projects. |
| 82 | func (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. |
| 134 | func (s *ProjectService) SearchProjects(ctx context.Context, req *connect.Request[v1pb.SearchProjectsRequest]) (*connect.Response[v1pb.SearchProjectsResponse], error) { |
nothing calls this directly
no test coverage detected