@@ -150,13 +150,7 @@ func (s *service) ListProjectsByOrganizationID(organizationID uuid.UUID) ([]mode
150150 return s .projectRepository .GetByOrgID (organizationID )
151151}
152152
153- func (s * service ) ListAllowedProjects (c core.Context ) ([]models.Project , error ) {
154- // get all projects the user has at least read access to
155- rbac := core .GetRBAC (c )
156- projectsIdsStr , err := rbac .GetAllProjectsForUser (core .GetSession (c ).GetUserID ())
157- if err != nil {
158- return nil , echo .NewHTTPError (500 , "could not get projects for user" ).WithInternal (err )
159- }
153+ func (s * service ) projectsForUser (c core.Context , projectsIdsStr []string ) ([]uuid.UUID , * uuid.UUID , error ) {
160154
161155 // extract the project ids from the roles
162156 projectIDs := make (map [uuid.UUID ]struct {})
@@ -172,7 +166,7 @@ func (s *service) ListAllowedProjects(c core.Context) ([]models.Project, error)
172166 if queryParentID != "" {
173167 tmp , err := uuid .Parse (queryParentID )
174168 if err != nil {
175- return nil , err
169+ return nil , nil , err
176170 }
177171
178172 parentID = & tmp
@@ -183,6 +177,50 @@ func (s *service) ListAllowedProjects(c core.Context) ([]models.Project, error)
183177 projectIDsSlice = append (projectIDsSlice , projectID )
184178 }
185179
180+ return projectIDsSlice , parentID , nil
181+ }
182+
183+ func (s * service ) ListAllowedProjectsPaged (c core.Context ) (core.Paged [models.Project ], error ) {
184+
185+ pageInfo := core .GetPageInfo (c )
186+ search := c .QueryParam ("search" )
187+
188+ // get all projects the user has at least read access to
189+ rbac := core .GetRBAC (c )
190+ projectIDs , err := rbac .GetAllProjectsForUser (core .GetSession (c ).GetUserID ())
191+ if err != nil {
192+ return core.Paged [models.Project ]{}, echo .NewHTTPError (500 , "could not get projects for user" ).WithInternal (err )
193+ }
194+
195+ projectsIdsStr := projectIDs
196+
197+ projectIDsSlice , parentID , err := s .projectsForUser (c , projectsIdsStr )
198+ if err != nil {
199+ return core.Paged [models.Project ]{}, err
200+ }
201+
202+ projects , err := s .projectRepository .ListPaged (projectIDsSlice , parentID , core .GetOrg (c ).GetID (), pageInfo , search )
203+
204+ if err != nil {
205+ return core.Paged [models.Project ]{}, err
206+ }
207+
208+ return projects , nil
209+ }
210+
211+ func (s * service ) ListAllowedProjects (c core.Context ) ([]models.Project , error ) {
212+ // get all projects the user has at least read access to
213+ rbac := core .GetRBAC (c )
214+ projectIDs , err := rbac .GetAllProjectsForUser (core .GetSession (c ).GetUserID ())
215+ if err != nil {
216+ return nil , echo .NewHTTPError (500 , "could not get projects for user" ).WithInternal (err )
217+ }
218+
219+ projectIDsSlice , parentID , err := s .projectsForUser (c , projectIDs )
220+ if err != nil {
221+ return nil , err
222+ }
223+
186224 projects , err := s .projectRepository .List (projectIDsSlice , parentID , core .GetOrg (c ).GetID ())
187225
188226 if err != nil {
0 commit comments