Skip to content

Commit aa9005c

Browse files
authored
Add api to update engagement states in gitlab project. Add api to get engagements by user (#28)
1 parent 26f150c commit aa9005c

4 files changed

Lines changed: 73 additions & 3 deletions

File tree

src/main/java/com/redhat/labs/lodestar/engagements/repository/EngagementRepository.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,22 @@ public List<Engagement> getEngagements(PageFilter pageFilter) {
4242
.page(pageFilter.getPage(), pageFilter.getPageSize()).list();
4343
}
4444

45+
/**
46+
*
47+
* @param email the email id to match (tech lead, EL or customer contact)
48+
* @param engagementIds a list of engagement ids that the user has participated in (from participant service)
49+
* @return A list of engagements that include the email or engagement ids of participant
50+
*/
51+
public List<Engagement> getEngagementsByUser(PageFilter pageFilter, String email, Set<String> engagementIds) {
52+
List<Bson> ors = new ArrayList<>();
53+
54+
ors.add(eq("engagementLeadEmail", email));
55+
ors.add(eq("technicalLeadEmail", email));
56+
ors.add(eq("customerContactEmail", email));
57+
ors.add(in("uuid", engagementIds));
58+
return mongoCollection().find(or(ors)).sort(pageFilter.getBsonSort()).skip(pageFilter.getStartAt()).limit(pageFilter.getPageSize()).into(new ArrayList<>());
59+
}
60+
4561
public List<Engagement> getEngagements(PageFilter pageFilter, Set<String> regions, Set<String> types) {
4662
String query = "";
4763
Map<String, Object> params = new HashMap<>();

src/main/java/com/redhat/labs/lodestar/engagements/resource/EngagementResource.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public Response getEngagements(@BeanParam PageFilter pagingFilter, @QueryParam("
5353
}
5454
return Response.ok(engagements).header(TOTAL_HEADER, total).build(); //no paging yet
5555
}
56+
5657
@GET
5758
@Path("inStates")
5859
public Response getEngagements(@QueryParam("inStates") Set<EngagementState> states) {
@@ -64,7 +65,13 @@ public Response getEngagements(@QueryParam("inStates") Set<EngagementState> stat
6465
return Response.ok(engagements).header(TOTAL_HEADER, total).build();
6566
}
6667

67-
68+
@GET
69+
@Path("byUser/{email}")
70+
public Response getEngagementsForUser(@PathParam("email") String email, @QueryParam("engagementUuids") Set<String> engagementUuids, @BeanParam PageFilter pagingFilter) {
71+
List<Engagement> engagements = engagementService.getEngagementsForUser(pagingFilter, email, engagementUuids);
72+
return Response.ok(engagements).header(TOTAL_HEADER, engagements.size()).build();
73+
}
74+
6875
@GET
6976
@Path("category/{category}")
7077
@Operation(summary = "Gets a list of engagements that have use the category input.")
@@ -170,6 +177,7 @@ public Response updateLastUpdate(@PathParam("uuid") String uuid) {
170177
engagementService.updateLastUpdate(cleanUuid);
171178
return Response.ok().build();
172179
}
180+
173181

174182
@PUT
175183
@Path("refresh")
@@ -184,6 +192,13 @@ public Response refresh(@QueryParam("uuids") Set<String> uuids) {
184192

185193
return Response.ok().header(TOTAL_HEADER, newCount).build();
186194
}
195+
196+
@PUT
197+
@Path("refresh/state")
198+
public Response updateStatesInGitlab() {
199+
engagementService.updateAllEngagementStates();
200+
return Response.ok().build();
201+
}
187202

188203
@GET
189204
@Path("suggest")

src/main/java/com/redhat/labs/lodestar/engagements/service/EngagementService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ void checkLastUpdate() {
109109
}
110110
}
111111

112+
public void updateAllEngagementStates() {
113+
LOGGER.debug("Updating all states in gitlab");
114+
engagementRepository.findAll().stream().forEach(e -> {
115+
e.setCurrentState(e.getState());
116+
bus.publish(UPDATE_STATUS, e);
117+
});
118+
}
119+
112120
public void create(Engagement engagement) {
113121
if(engagement.getUuid() != null) { //This will not be true as long as we persist in lodestar-backend
114122
throw new WebApplicationException("UUID cannot be set before create", Status.BAD_REQUEST);
@@ -270,6 +278,10 @@ public List<Engagement> getEngagements(PageFilter pageFilter, Set<String> region
270278

271279
}
272280

281+
public List<Engagement> getEngagementsForUser(PageFilter pageFilter, String userEmail, Set<String> engagementUuids) {
282+
return engagementRepository.getEngagementsByUser(pageFilter, userEmail, engagementUuids);
283+
}
284+
273285
public long countEngagements(String input, String category, Set<String> regions, Set<String> types, Set<EngagementState> states) {
274286
return engagementRepository.countEngagements(input, category, regions, types, states);
275287
}

src/test/java/com/redhat/labs/lodestar/engagements/resource/EngagementResourceTest.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,23 @@ void testGetEngagementCountByStatus() {
254254

255255
}
256256

257+
@Test
258+
void testGetEngagementByUser() {
259+
String email = "Calem@calm.com";
260+
given().pathParam("email", email).when().get("byUser/{email}")
261+
.then().body("size()", equalTo(0));
262+
263+
List<Engagement> engagements = engagementService.getEngagements();
264+
engagements.forEach(e-> {
265+
e.setEngagementLeadEmail(email);
266+
engagementService.update(e, false);
267+
});
268+
269+
given().pathParam("email", email).when().get("byUser/{email}")
270+
.then().body("size()", equalTo(2));
271+
272+
}
273+
257274
@Test
258275
void testHeadLastUpdate() {
259276
String uuid = "uuid1";
@@ -306,9 +323,14 @@ void testCreateEngagementNoType() {
306323

307324
@Test
308325
void testCreateEngagementBadRequest() {
309-
Engagement engagement = Engagement.builder().customerName("").region("na").type("Residency").build();
326+
Engagement engagement = Engagement.builder().customerName("ab!!!").name("abcd").region("na").type("Residency").build();
310327
String e = new JsonMarshaller().toJson(engagement);
311-
given().contentType(ContentType.JSON).when().body(e).post().then().statusCode(Status.BAD_REQUEST.getStatusCode()).header("Location", nullValue());
328+
given().contentType(ContentType.JSON)
329+
.when().body(e).post()
330+
.then().statusCode(Status.BAD_REQUEST.getStatusCode())
331+
.header("Location", nullValue())
332+
.body("parameter_violations.size()", equalTo(1))
333+
.body("parameter_violations[0].value", equalTo("ab!!!"));
312334
}
313335

314336
@Test
@@ -516,4 +538,9 @@ void testGetWithCategory() {
516538
given().pathParam("category", "philanthropy").queryParam("sort", "name|desc,customerName").when().get("category/{category}")
517539
.then().statusCode(200).body("size()", equalTo(2)).header("x-total-engagements", equalTo("2"));
518540
}
541+
542+
@Test
543+
void testUpdateStates() {
544+
given().when().put("refresh/state").then().statusCode(200);
545+
}
519546
}

0 commit comments

Comments
 (0)