Skip to content

Commit 481d9d3

Browse files
committed
paged results for groups and projects
1 parent bef9d26 commit 481d9d3

File tree

6 files changed

+33
-34
lines changed

6 files changed

+33
-34
lines changed

src/main/java/com/redhat/labs/omp/rest/client/GitLabService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.redhat.labs.omp.models.gitlab.Group;
2424
import com.redhat.labs.omp.models.gitlab.Hook;
2525
import com.redhat.labs.omp.models.gitlab.Project;
26-
import com.redhat.labs.omp.models.gitlab.ProjectSearchResults;
2726
import com.redhat.labs.omp.resources.filter.Logged;
2827

2928
@Path("/api/v4")
@@ -62,7 +61,7 @@ public interface GitLabService {
6261
@Logged
6362
@Path("/groups")
6463
@Produces("application/json")
65-
List<Group> getGroupByName(@QueryParam("search") @Encoded String name);
64+
Response getGroupByName(@QueryParam("search") @Encoded String name, @QueryParam("per_page") int perPage, @QueryParam("page") int page);
6665

6766
@GET
6867
@Logged
@@ -88,7 +87,7 @@ public interface GitLabService {
8887
@Logged
8988
@Path("/projects")
9089
@Produces("application/json")
91-
List<ProjectSearchResults> getProjectByName(@QueryParam("search") @Encoded String name);
90+
Response getProjectByName(@QueryParam("search") @Encoded String name, @QueryParam("per_page") int perPage, @QueryParam("page") int page);
9291

9392
@GET
9493
@Logged

src/main/java/com/redhat/labs/omp/service/GroupService.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55

66
import javax.enterprise.context.ApplicationScoped;
77
import javax.inject.Inject;
8+
import javax.ws.rs.core.GenericType;
9+
import javax.ws.rs.core.Response;
810

11+
import org.eclipse.microprofile.config.inject.ConfigProperty;
912
import org.eclipse.microprofile.rest.client.inject.RestClient;
1013
import org.slf4j.Logger;
1114
import org.slf4j.LoggerFactory;
1215

1316
import com.redhat.labs.exception.UnexpectedGitLabResponseException;
17+
import com.redhat.labs.omp.models.PagedResults;
1418
import com.redhat.labs.omp.models.gitlab.Group;
1519
import com.redhat.labs.omp.rest.client.GitLabService;
1620

@@ -21,21 +25,25 @@ public class GroupService {
2125
@Inject
2226
@RestClient
2327
GitLabService gitLabService;
28+
29+
@ConfigProperty(name = "commit.page.size")
30+
int commitPageSize;
2431

2532
// get a group
2633
public Optional<Group> getGitLabGroupByName(String name, Integer parentId)
2734
throws UnexpectedGitLabResponseException {
2835

2936
Optional<Group> optional = Optional.empty();
30-
31-
List<Group> groupList = gitLabService.getGroupByName(name);
32-
33-
if (null == groupList || groupList.isEmpty()) {
34-
return optional;
37+
38+
PagedResults<Group> page = new PagedResults<>();
39+
40+
while(page.hasMore()) {
41+
Response response = gitLabService.getGroupByName(name, commitPageSize, page.getNumber());
42+
page.update(response, new GenericType<List<Group>>() {});
3543
}
3644

3745
// look for a match between returned name and provided path
38-
for (Group group : groupList) {
46+
for (Group group : page.getResults()) {
3947
if (name.equals(group.getName()) && parentId.equals(group.getParentId())) {
4048
return Optional.of(group);
4149
}

src/main/java/com/redhat/labs/omp/service/ProjectService.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,22 @@ public class ProjectService {
3434
@ConfigProperty(name = "commit.page.size")
3535
int commitPageSize;
3636

37-
// get a project
37+
// get a project - this could be a replaced by a direct call to the project via the path
38+
// but must consider changes to the path for special characters
3839
public Optional<Project> getProjectByName(Integer namespaceId, String name) {
3940

4041
Optional<Project> optional = Optional.empty();
41-
42-
List<ProjectSearchResults> resultList = gitLabService.getProjectByName(name);
43-
44-
if (null == resultList || resultList.isEmpty()) {
45-
return optional;
42+
43+
PagedResults<ProjectSearchResults> page = new PagedResults<>();
44+
45+
while(page.hasMore()) {
46+
Response response = gitLabService.getProjectByName(name, commitPageSize, page.getNumber());
47+
page.update(response, new GenericType<List<ProjectSearchResults>>() {});
4648
}
4749

4850
// look for a project with name that matches the namespace id and the path
49-
for (ProjectSearchResults result : resultList) {
51+
for (ProjectSearchResults result : page.getResults()) {
52+
LOGGER.debug("PSR {} = {} {} = {}", namespaceId, result.getNamespace().getId(), name, result.getPath());
5053
if (namespaceId.equals(result.getNamespace().getId()) && name.equals(result.getPath())) {
5154
return Optional.of(Project.from(result));
5255
}
@@ -55,11 +58,6 @@ public Optional<Project> getProjectByName(Integer namespaceId, String name) {
5558
return optional;
5659

5760
}
58-
59-
//Needed anymore?
60-
public List<ProjectSearchResults> getAllProjectsByName(String name) {
61-
return gitLabService.getProjectByName(name);
62-
}
6361

6462
public List<Project> getProjectsByGroup(int groupId, Boolean includeSubgroups) {
6563

src/test/java/com/redhat/labs/omp/mocks/MockGitLabService.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ public Group updateGroup(Integer groupId, Group group) {
5757
}
5858

5959
@Override
60-
public List<Group> getGroupByName(String name) {
60+
public Response getGroupByName(String name, int pageSize, int page) {
6161

6262
List<Group> groupList = new ArrayList<>();
63+
int pages = 0;
6364

6465
if ("customer3".equalsIgnoreCase(name)) {
6566
groupList.add(Group.builder().id(3).name("customer1").path("customer1").build());
@@ -74,7 +75,7 @@ public List<Group> getGroupByName(String name) {
7475
groupList.add(Group.builder().id(5).name("updated2").path("updated").parentId(3).build());
7576
}
7677

77-
return groupList;
78+
return Response.ok(groupList).header("X-Total-Pages", pages).build();
7879
}
7980

8081
@Override
@@ -84,9 +85,10 @@ public void deleteGroupById(Integer groupId) {
8485
}
8586

8687
@Override
87-
public List<ProjectSearchResults> getProjectByName(String name) {
88+
public Response getProjectByName(String name, int pageSize, int page) {
8889

8990
List<ProjectSearchResults> results = new ArrayList<>();
91+
int pages = 0;
9092

9193
if("iac".contentEquals(name)) {
9294
ProjectSearchResults project = ProjectSearchResults.builder().id(45).name("iac").description("bla").path("iac")
@@ -95,9 +97,10 @@ public List<ProjectSearchResults> getProjectByName(String name) {
9597
project = ProjectSearchResults.builder().id(5).name("iac").description("bla5").path("iac")
9698
.namespace(Namespace.builder().id(5).build()).build();
9799
results.add(project);
100+
pages++;
98101
}
99102

100-
return results;
103+
return Response.ok(results).header("X-Total-Pages", pages).build();
101104

102105
}
103106

src/test/java/com/redhat/labs/omp/service/EngagementServiceTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import static org.junit.jupiter.api.Assertions.assertNotNull;
66
import static org.junit.jupiter.api.Assertions.assertNull;
77
import static org.junit.jupiter.api.Assertions.assertThrows;
8-
import static org.junit.jupiter.api.Assertions.assertTrue;
98

109
import java.util.List;
1110

src/test/java/com/redhat/labs/omp/service/ProjectServiceTest.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import com.redhat.labs.omp.mocks.MockGitLabService;
1515
import com.redhat.labs.omp.models.gitlab.Commit;
1616
import com.redhat.labs.omp.models.gitlab.Project;
17-
import com.redhat.labs.omp.models.gitlab.ProjectSearchResults;
1817

1918
import io.quarkus.test.junit.QuarkusTest;
2019

@@ -78,13 +77,6 @@ class ProjectServiceTest {
7877
assertEquals(Optional.empty(), notFound);
7978
}
8079

81-
@Test void getProjectAllByName() {
82-
List<ProjectSearchResults> found = projectService.getAllProjectsByName("iac");
83-
assertNotNull(found);
84-
assertEquals(2, found.size());
85-
86-
}
87-
8880
@Test void getProjectByPath() {
8981
Optional<Project> found = projectService.getProjectById(66);
9082
assertFalse(found.isPresent());

0 commit comments

Comments
 (0)