Skip to content

Commit 0038286

Browse files
committed
2024-10-23 - feedback - external reviewer - server-side
1 parent f9cc72e commit 0038286

File tree

4 files changed

+95
-16
lines changed

4 files changed

+95
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.objectcomputing.checkins.services.feedback_external_recipient;
2+
3+
import com.objectcomputing.checkins.services.feedback_request.*;
4+
import com.objectcomputing.checkins.services.permissions.Permission;
5+
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
6+
import io.micronaut.core.annotation.Nullable;
7+
import io.micronaut.core.convert.format.Format;
8+
import io.micronaut.http.HttpResponse;
9+
import io.micronaut.http.HttpStatus;
10+
import io.micronaut.http.annotation.*;
11+
import io.micronaut.scheduling.TaskExecutors;
12+
import io.micronaut.scheduling.annotation.ExecuteOn;
13+
import io.micronaut.security.annotation.Secured;
14+
import io.micronaut.security.rules.SecurityRule;
15+
import io.micronaut.security.utils.SecurityService;
16+
import io.micronaut.validation.Validated;
17+
import io.swagger.v3.oas.annotations.tags.Tag;
18+
import jakarta.inject.Inject;
19+
import jakarta.validation.Valid;
20+
import jakarta.validation.constraints.NotNull;
21+
22+
import java.net.URI;
23+
import java.time.LocalDate;
24+
import java.util.List;
25+
import java.util.UUID;
26+
27+
@Validated
28+
@Controller("/services/feedback/external/recipients")
29+
@ExecuteOn(TaskExecutors.BLOCKING)
30+
@Secured(SecurityRule.IS_ANONYMOUS)
31+
@Tag(name = "feedback external recipient")
32+
public class FeedbackExternalRecipientController {
33+
34+
private final FeedbackRequestServices feedbackReqServices;
35+
private final FeedbackExternalRecipientServices feedbackExternalRecipientServices;
36+
37+
public FeedbackExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) {
38+
this.feedbackReqServices = feedbackRequestServices;
39+
this.feedbackExternalRecipientServices = feedbackExternalRecipientServices;
40+
}
41+
42+
@Get("/{?externalRecipientId}")
43+
public List<FeedbackRequestResponseDTO> findByValues(@Nullable UUID externalRecipientId) {
44+
return feedbackReqServices.findByValues(null, null, null, null, null, null, null, null)
45+
.stream()
46+
.map(this::fromEntity)
47+
.toList();
48+
}
49+
50+
private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) {
51+
FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO();
52+
dto.setId(feedbackRequest.getId());
53+
dto.setCreatorId(feedbackRequest.getCreatorId());
54+
dto.setRequesteeId(feedbackRequest.getRequesteeId());
55+
dto.setRecipientId(feedbackRequest.getRecipientId());
56+
dto.setTemplateId(feedbackRequest.getTemplateId());
57+
dto.setSendDate(feedbackRequest.getSendDate());
58+
dto.setDueDate(feedbackRequest.getDueDate());
59+
dto.setStatus(feedbackRequest.getStatus());
60+
dto.setSubmitDate(feedbackRequest.getSubmitDate());
61+
dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId());
62+
dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId());
63+
64+
return dto;
65+
}
66+
67+
}

server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,9 @@ public HttpResponse<FeedbackRequestResponseDTO> getById(UUID id) {
123123
* @return list of {@link FeedbackRequestResponseDTO}
124124
*/
125125
@RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST)
126-
@Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}")
127-
public List<FeedbackRequestResponseDTO> findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List<UUID> requesteeIds) {
128-
return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds)
126+
@Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}")
127+
public List<FeedbackRequestResponseDTO> findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List<UUID> requesteeIds) {
128+
return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, null, requesteeIds)
129129
.stream()
130130
.map(this::fromEntity)
131131
.toList();

server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -347,10 +347,6 @@ public FeedbackRequest getById(UUID id) {
347347

348348
@Override
349349
public List<FeedbackRequest> findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, UUID externalRecipientId, List<UUID> requesteeIds) {
350-
final UUID currentUserId = currentUserServices.getCurrentUser().getId();
351-
if (currentUserId == null) {
352-
throw new PermissionException(NOT_AUTHORIZED_MSG);
353-
}
354350

355351
List<FeedbackRequest> feedbackReqList = new ArrayList<>();
356352
if (requesteeIds != null && !requesteeIds.isEmpty()) {
@@ -363,15 +359,27 @@ public List<FeedbackRequest> findByValues(UUID creatorId, UUID requesteeId, UUID
363359

364360
feedbackReqList = feedbackReqList.stream().filter((FeedbackRequest request) -> {
365361
boolean visible = false;
366-
final UUID recipientIdLocal;
367362
if (currentUserServices.isAdmin()) {
368363
visible = true;
369364
} else if (request != null) {
370-
if (currentUserId.equals(request.getCreatorId())) visible = true;
371-
if (isSupervisor(request.getRequesteeId(), currentUserId)) visible = true;
372-
recipientIdLocal = request.getRecipientId();
373-
if (currentUserId.equals(recipientIdLocal)) visible = true;
374-
if (request.getExternalRecipientId() != null) visible = true;
365+
MemberProfile currentUser;
366+
UUID currentUserId;
367+
368+
try {
369+
currentUser = currentUserServices.getCurrentUser();
370+
currentUserId = currentUser.getId();
371+
} catch (NotFoundException notFoundException) {
372+
currentUser = null;
373+
currentUserId = null;
374+
}
375+
if (currentUserId != null) {
376+
if (currentUserId.equals(request.getCreatorId())) visible = true;
377+
if (isSupervisor(request.getRequesteeId(), currentUserId)) visible = true;
378+
if (currentUserId.equals(request.getRecipientId())) visible = true;
379+
} else {
380+
if (request.getExternalRecipientId() != null) visible = true;
381+
}
382+
375383
}
376384
return visible;
377385
}).toList();

server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ class FeedbackRequestControllerTest extends TestContainersSuite implements Membe
5353
@Client("/services/feedback/requests")
5454
HttpClient client;
5555

56+
@Inject
57+
@Client("/services/feedback/external/recipients")
58+
HttpClient clientExternalRecipient;
59+
5660
@Inject
5761
CheckInsConfiguration checkInsConfiguration;
5862

@@ -1227,9 +1231,9 @@ void testGetByCreatorRecipientIdPermittedToExternalRecipients() {
12271231
FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient);
12281232

12291233
//get feedback request
1230-
final HttpRequest<?> request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId()))
1231-
.basicAuth(recipient.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);
1232-
final HttpResponse<FeedbackRequestResponseDTO> response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class);
1234+
final HttpRequest<?> request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId()));
1235+
//.basicAuth(recipient.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);
1236+
final HttpResponse<FeedbackRequestResponseDTO> response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class);
12331237

12341238
// recipient must be able to get the feedback request
12351239
assertEquals(HttpStatus.OK, response.getStatus());

0 commit comments

Comments
 (0)