Skip to content

Commit 71fb9e2

Browse files
committed
2024-10-24 - feedback - external reviewer - server-side
1 parent 936b1bc commit 71fb9e2

File tree

5 files changed

+174
-73
lines changed

5 files changed

+174
-73
lines changed

server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,13 @@
77
import io.micronaut.core.annotation.Nullable;
88
import io.micronaut.core.convert.format.Format;
99
import io.micronaut.http.HttpResponse;
10-
import io.micronaut.http.HttpStatus;
1110
import io.micronaut.http.annotation.*;
1211
import io.micronaut.scheduling.TaskExecutors;
1312
import io.micronaut.scheduling.annotation.ExecuteOn;
1413
import io.micronaut.security.annotation.Secured;
1514
import io.micronaut.security.rules.SecurityRule;
16-
import io.micronaut.security.utils.SecurityService;
1715
import io.micronaut.validation.Validated;
1816
import io.swagger.v3.oas.annotations.tags.Tag;
19-
import jakarta.inject.Inject;
2017
import jakarta.validation.Valid;
2118
import jakarta.validation.constraints.NotNull;
2219

@@ -28,76 +25,52 @@
2825
@Validated
2926
@Controller("/services/feedback/external/recipients")
3027
@ExecuteOn(TaskExecutors.BLOCKING)
31-
@Secured(SecurityRule.IS_ANONYMOUS)
28+
@Secured(SecurityRule.IS_AUTHENTICATED)
3229
@Tag(name = "feedback external recipient")
3330
public class FeedbackExternalRecipientController {
3431

35-
private final FeedbackRequestServices feedbackReqServices;
3632
private final FeedbackExternalRecipientServices feedbackExternalRecipientServices;
3733

38-
public FeedbackExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) {
39-
this.feedbackReqServices = feedbackRequestServices;
34+
public FeedbackExternalRecipientController(FeedbackExternalRecipientServices feedbackExternalRecipientServices) {
4035
this.feedbackExternalRecipientServices = feedbackExternalRecipientServices;
4136
}
4237

43-
@Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}")
44-
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) {
45-
if (externalRecipientId == null) {
46-
throw new BadArgException("Missing required parameter: externalRecipientId");
47-
}
48-
return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds)
49-
.stream()
50-
.map(this::fromEntity)
51-
.toList();
52-
}
53-
5438
/**
55-
* Update a feedback request
39+
* Create a feedback request external recipient
5640
*
57-
* @param requestBody {@link FeedbackRequestUpdateDTO} The updated feedback request
58-
* @return {@link FeedbackRequestResponseDTO}
41+
* @param feedbackExternalRecipientCreateDTO {@link FeedbackExternalRecipientCreateDTO} New feedback-req external recipient to create
42+
* @return {@link FeedbackExternalRecipient}
5943
*/
60-
@Put
61-
public HttpResponse<FeedbackRequestResponseDTO> update(@Body @Valid @NotNull FeedbackRequestUpdateDTO requestBody) {
62-
if (requestBody.getExternalRecipientId() == null) {
63-
throw new BadArgException("Missing required parameter: externalRecipientId");
44+
@RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST)
45+
@Post
46+
public HttpResponse<FeedbackExternalRecipientResponseDTO> save(@Body @Valid @NotNull FeedbackExternalRecipientCreateDTO feedbackExternalRecipientCreateDTO) {
47+
FeedbackExternalRecipient savedFeedbackExternalRecipient;
48+
FeedbackExternalRecipient feedbackExternalRecipientFromDto = fromDTO(feedbackExternalRecipientCreateDTO);
49+
try {
50+
savedFeedbackExternalRecipient = feedbackExternalRecipientServices.save(feedbackExternalRecipientFromDto);
51+
} catch (Exception e) {
52+
throw e;
6453
}
65-
FeedbackRequest savedFeedback = feedbackReqServices.update(requestBody);
66-
return HttpResponse.ok(fromEntity(savedFeedback))
67-
.headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId())));
54+
return HttpResponse.created(fromEntity(savedFeedbackExternalRecipient))
55+
.headers(headers -> headers.location(URI.create("/feedback_external_recipient/" + savedFeedbackExternalRecipient.getId())));
6856
}
6957

70-
/**
71-
* Get feedback request by ID
72-
*
73-
* @param id {@link UUID} ID of the request
74-
* @return {@link FeedbackRequestResponseDTO}
75-
*/
76-
//@Secured(SecurityRule.IS_ANONYMOUS)
77-
@Get("/{id}")
78-
public HttpResponse<FeedbackRequestResponseDTO> getById(UUID id) {
79-
FeedbackRequest feedbackRequest = feedbackReqServices.getById(id);
80-
if (feedbackRequest.getExternalRecipientId() == null) {
81-
throw new BadArgException("Missing required parameter: externalRecipientId");
82-
}
83-
return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(fromEntity(feedbackRequest))
84-
.headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId())));
58+
private FeedbackExternalRecipient fromDTO(FeedbackExternalRecipientCreateDTO dto) {
59+
FeedbackExternalRecipient object = new FeedbackExternalRecipient();
60+
object.setEmail(dto.getEmail());
61+
object.setFirstName(dto.getFirstName());
62+
object.setLastName(dto.getLastName());
63+
object.setCompanyName(dto.getCompanyName());
64+
return object;
8565
}
8666

87-
private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) {
88-
FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO();
89-
dto.setId(feedbackRequest.getId());
90-
dto.setCreatorId(feedbackRequest.getCreatorId());
91-
dto.setRequesteeId(feedbackRequest.getRequesteeId());
92-
dto.setRecipientId(feedbackRequest.getRecipientId());
93-
dto.setTemplateId(feedbackRequest.getTemplateId());
94-
dto.setSendDate(feedbackRequest.getSendDate());
95-
dto.setDueDate(feedbackRequest.getDueDate());
96-
dto.setStatus(feedbackRequest.getStatus());
97-
dto.setSubmitDate(feedbackRequest.getSubmitDate());
98-
dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId());
99-
dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId());
100-
67+
private FeedbackExternalRecipientResponseDTO fromEntity(FeedbackExternalRecipient feedbackExternalRecipient) {
68+
FeedbackExternalRecipientResponseDTO dto = new FeedbackExternalRecipientResponseDTO();
69+
dto.setId(feedbackExternalRecipient.getId());
70+
dto.setEmail(feedbackExternalRecipient.getEmail());
71+
dto.setFirstName(feedbackExternalRecipient.getFirstName());
72+
dto.setLastName(feedbackExternalRecipient.getLastName());
73+
dto.setCompanyName(feedbackExternalRecipient.getCompanyName());
10174
return dto;
10275
}
10376

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.objectcomputing.checkins.services.feedback_external_recipient;
2+
3+
import io.micronaut.core.annotation.Introspected;
4+
import io.micronaut.core.annotation.Nullable;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import jakarta.validation.constraints.NotBlank;
7+
import jakarta.validation.constraints.NotNull;
8+
import lombok.Getter;
9+
import lombok.Setter;
10+
11+
import java.util.UUID;
12+
13+
@Getter
14+
@Setter
15+
@Introspected
16+
public class FeedbackExternalRecipientResponseDTO {
17+
18+
@NotNull
19+
@Schema(description = "id of the feedback-external-recipient")
20+
private UUID id;
21+
22+
@NotBlank
23+
@Schema(description = "email of the feedback-external-recipient")
24+
private String email;
25+
26+
@Nullable
27+
@Schema(description = "first name of the feedback-external-recipient")
28+
private String firstName;
29+
30+
@Nullable
31+
@Schema(description = "last name of the feedback-external-recipient")
32+
private String lastName;
33+
34+
@Nullable
35+
@Schema(description = "company-name of the feedback-external-recipient")
36+
private String companyName;
37+
38+
}

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

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.objectcomputing.checkins.services.feedback_request;
22

3-
import com.nimbusds.jose.proc.SecurityContext;
43
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient;
4+
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientCreateDTO;
5+
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientResponseDTO;
56
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices;
67
import com.objectcomputing.checkins.services.permissions.Permission;
78
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
@@ -16,16 +17,12 @@
1617
import io.micronaut.http.annotation.Post;
1718
import io.micronaut.http.annotation.Put;
1819
import io.micronaut.http.annotation.Status;
19-
import io.micronaut.http.exceptions.HttpStatusException;
2020
import io.micronaut.scheduling.TaskExecutors;
2121
import io.micronaut.scheduling.annotation.ExecuteOn;
2222
import io.micronaut.security.annotation.Secured;
23-
import io.micronaut.security.authentication.Authentication;
2423
import io.micronaut.security.rules.SecurityRule;
25-
import io.micronaut.security.utils.SecurityService;
2624
import io.micronaut.validation.Validated;
2725
import io.swagger.v3.oas.annotations.tags.Tag;
28-
import jakarta.inject.Inject;
2926
import jakarta.validation.Valid;
3027
import jakarta.validation.constraints.NotNull;
3128

@@ -43,8 +40,6 @@ public class FeedbackRequestController {
4340

4441
private final FeedbackRequestServices feedbackReqServices;
4542
private final FeedbackExternalRecipientServices feedbackExternalRecipientServices;
46-
@Inject
47-
SecurityService securityService;
4843

4944
public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) {
5045
this.feedbackReqServices = feedbackReqServices;
@@ -60,13 +55,7 @@ public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, Fe
6055
@RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST)
6156
@Post
6257
public HttpResponse<FeedbackRequestResponseDTO> save(@Body @Valid @NotNull FeedbackRequestCreateDTO requestBody) {
63-
FeedbackRequest savedFeedbackRequest;
64-
FeedbackRequest feedbackRequest = fromDTO(requestBody);
65-
try {
66-
savedFeedbackRequest = feedbackReqServices.save(feedbackRequest);
67-
} catch (Exception e) {
68-
throw e;
69-
}
58+
FeedbackRequest savedFeedbackRequest = feedbackReqServices.save(fromDTO(requestBody));
7059
return HttpResponse.created(fromEntity(savedFeedbackRequest))
7160
.headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedbackRequest.getId())));
7261
}
@@ -144,7 +133,6 @@ private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) {
144133
dto.setSubmitDate(feedbackRequest.getSubmitDate());
145134
dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId());
146135
dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId());
147-
148136
return dto;
149137
}
150138

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.objectcomputing.checkins.services.feedback_request;
2+
3+
import com.objectcomputing.checkins.exceptions.BadArgException;
4+
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices;
5+
import io.micronaut.core.annotation.Nullable;
6+
import io.micronaut.core.convert.format.Format;
7+
import io.micronaut.http.HttpResponse;
8+
import io.micronaut.http.annotation.Body;
9+
import io.micronaut.http.annotation.Controller;
10+
import io.micronaut.http.annotation.Get;
11+
import io.micronaut.http.annotation.Put;
12+
import io.micronaut.scheduling.TaskExecutors;
13+
import io.micronaut.scheduling.annotation.ExecuteOn;
14+
import io.micronaut.security.annotation.Secured;
15+
import io.micronaut.security.rules.SecurityRule;
16+
import io.micronaut.validation.Validated;
17+
import io.swagger.v3.oas.annotations.tags.Tag;
18+
import jakarta.validation.Valid;
19+
import jakarta.validation.constraints.NotNull;
20+
21+
import java.net.URI;
22+
import java.time.LocalDate;
23+
import java.util.List;
24+
import java.util.UUID;
25+
26+
@Validated
27+
@Controller("/services/feedback/requests/external/recipients")
28+
@ExecuteOn(TaskExecutors.BLOCKING)
29+
@Secured(SecurityRule.IS_ANONYMOUS)
30+
@Tag(name = "feedback external recipient")
31+
public class FeedbackRequestExternalRecipientController {
32+
33+
private final FeedbackRequestServices feedbackReqServices;
34+
private final FeedbackExternalRecipientServices feedbackExternalRecipientServices;
35+
36+
public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) {
37+
this.feedbackReqServices = feedbackRequestServices;
38+
this.feedbackExternalRecipientServices = feedbackExternalRecipientServices;
39+
}
40+
41+
@Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}")
42+
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) {
43+
if (externalRecipientId == null) {
44+
throw new BadArgException("Missing required parameter: externalRecipientId");
45+
}
46+
return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds)
47+
.stream()
48+
.map(this::feedbackRequestFromEntity)
49+
.toList();
50+
}
51+
52+
/**
53+
* Update a feedback request
54+
*
55+
* @param requestBody {@link FeedbackRequestUpdateDTO} The updated feedback request
56+
* @return {@link FeedbackRequestResponseDTO}
57+
*/
58+
@Put
59+
public HttpResponse<FeedbackRequestResponseDTO> update(@Body @Valid @NotNull FeedbackRequestUpdateDTO requestBody) {
60+
if (requestBody.getExternalRecipientId() == null) {
61+
throw new BadArgException("Missing required parameter: externalRecipientId");
62+
}
63+
FeedbackRequest savedFeedback = feedbackReqServices.update(requestBody);
64+
return HttpResponse.ok(feedbackRequestFromEntity(savedFeedback))
65+
.headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId())));
66+
}
67+
68+
/**
69+
* Get feedback request by ID
70+
*
71+
* @param id {@link UUID} ID of the request
72+
* @return {@link FeedbackRequestResponseDTO}
73+
*/
74+
//@Secured(SecurityRule.IS_ANONYMOUS)
75+
@Get("/{id}")
76+
public HttpResponse<FeedbackRequestResponseDTO> getById(UUID id) {
77+
FeedbackRequest feedbackRequest = feedbackReqServices.getById(id);
78+
if (feedbackRequest.getExternalRecipientId() == null) {
79+
throw new BadArgException("Missing required parameter: externalRecipientId");
80+
}
81+
return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(feedbackRequestFromEntity(feedbackRequest))
82+
.headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId())));
83+
}
84+
85+
private FeedbackRequestResponseDTO feedbackRequestFromEntity(FeedbackRequest feedbackRequest) {
86+
FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO();
87+
dto.setId(feedbackRequest.getId());
88+
dto.setCreatorId(feedbackRequest.getCreatorId());
89+
dto.setRequesteeId(feedbackRequest.getRequesteeId());
90+
dto.setRecipientId(feedbackRequest.getRecipientId());
91+
dto.setTemplateId(feedbackRequest.getTemplateId());
92+
dto.setSendDate(feedbackRequest.getSendDate());
93+
dto.setDueDate(feedbackRequest.getDueDate());
94+
dto.setStatus(feedbackRequest.getStatus());
95+
dto.setSubmitDate(feedbackRequest.getSubmitDate());
96+
dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId());
97+
dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId());
98+
99+
return dto;
100+
}
101+
102+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class FeedbackRequestControllerTest extends TestContainersSuite implements Membe
5454
HttpClient client;
5555

5656
@Inject
57-
@Client("/services/feedback/external/recipients")
57+
@Client("/services/feedback/requests/external/recipients")
5858
HttpClient clientExternalRecipient;
5959

6060
@Inject

0 commit comments

Comments
 (0)