Skip to content

Commit 1ee2918

Browse files
committed
2024-11-20 - Feedback submission for ext-recip
1 parent 7e2785d commit 1ee2918

File tree

3 files changed

+84
-8
lines changed

3 files changed

+84
-8
lines changed

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

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.objectcomputing.checkins.exceptions.BadArgException;
44
import com.objectcomputing.checkins.security.ImpersonationController;
5+
import com.objectcomputing.checkins.services.feedback_answer.*;
56
import com.objectcomputing.checkins.services.feedback_answer.question_and_answer.QuestionAndAnswerServices;
67
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices;
78
import com.objectcomputing.checkins.services.memberprofile.*;
@@ -43,12 +44,18 @@ public class FeedbackRequestExternalRecipientController {
4344
private static final Base64.Encoder base64Encoder = Base64.getUrlEncoder();
4445
private final MemberProfileServices memberProfileServices;
4546
private final QuestionAndAnswerServices questionAndAnswerServices;
47+
private final FeedbackAnswerServices feedbackAnswerServices;
4648

47-
public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices, MemberProfileServices memberProfileServices, QuestionAndAnswerServices questionAndAnswerServices) {
49+
public FeedbackRequestExternalRecipientController(
50+
FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices,
51+
MemberProfileServices memberProfileServices, QuestionAndAnswerServices questionAndAnswerServices,
52+
FeedbackAnswerServices feedbackAnswerServices
53+
) {
4854
this.feedbackReqServices = feedbackRequestServices;
4955
this.feedbackExternalRecipientServices = feedbackExternalRecipientServices;
5056
this.memberProfileServices = memberProfileServices;
5157
this.questionAndAnswerServices = questionAndAnswerServices;
58+
this.feedbackAnswerServices = feedbackAnswerServices;
5259
}
5360

5461
/**
@@ -231,4 +238,60 @@ public List<QuestionAndAnswerServices.Tuple> getAllQuestionsAndAnswers(@Nullable
231238
return questionAndAnswerServices.getAllQuestionsAndAnswers(requestId);
232239
}
233240

241+
/**
242+
* Create a feedback answer
243+
*
244+
* @param requestBody {@link FeedbackAnswerCreateDTO} New feedback answer to create
245+
* @return {@link FeedbackAnswerResponseDTO}
246+
*/
247+
@Post("/feedback/answers")
248+
public HttpResponse<FeedbackAnswerResponseDTO> save(@Body @Valid @NotNull FeedbackAnswerCreateDTO requestBody) {
249+
FeedbackAnswer feedbackAnswer = fromDTO(requestBody);
250+
FeedbackRequest feedbackRequest = feedbackReqServices.getById(feedbackAnswer.getRequestId());
251+
if (feedbackRequest.getExternalRecipientId() == null) {
252+
throw new BadArgException("This feedback request is not for an external recipient");
253+
}
254+
FeedbackAnswer savedAnswer = feedbackAnswerServices.save(feedbackAnswer);
255+
return HttpResponse.created(fromEntity(savedAnswer))
256+
.headers(headers -> headers.location(URI.create("/feedback_answer/" + savedAnswer.getId())))
257+
;
258+
}
259+
260+
/**
261+
* Update a feedback answer
262+
*
263+
* @param requestBody {@link FeedbackAnswerUpdateDTO} The updated feedback answer
264+
* @return {@link FeedbackAnswerResponseDTO}
265+
*/
266+
@Put("/feedback/answers")
267+
public HttpResponse<FeedbackAnswerResponseDTO> update(@Body @Valid @NotNull FeedbackAnswerUpdateDTO requestBody) {
268+
FeedbackAnswer feedbackAnswer = feedbackAnswerServices.getById(fromDTO(requestBody).getId());
269+
FeedbackRequest feedbackRequest = feedbackReqServices.getById(feedbackAnswer.getRequestId());
270+
if (feedbackRequest.getExternalRecipientId() == null) {
271+
throw new BadArgException("This feedback request is not for an external recipient");
272+
}
273+
FeedbackAnswer savedAnswer = feedbackAnswerServices.update(feedbackAnswer);
274+
return HttpResponse.ok(fromEntity(savedAnswer))
275+
.headers(headers -> headers.location(URI.create("/feedback_answer/" + savedAnswer.getId())))
276+
;
277+
}
278+
279+
private FeedbackAnswer fromDTO(FeedbackAnswerCreateDTO dto) {
280+
return new FeedbackAnswer(dto.getAnswer(), dto.getQuestionId(), dto.getRequestId(), dto.getSentiment());
281+
}
282+
283+
private FeedbackAnswer fromDTO(FeedbackAnswerUpdateDTO dto) {
284+
return new FeedbackAnswer(dto.getId(), dto.getAnswer(), dto.getSentiment());
285+
}
286+
287+
private FeedbackAnswerResponseDTO fromEntity(FeedbackAnswer feedbackAnswer) {
288+
FeedbackAnswerResponseDTO dto = new FeedbackAnswerResponseDTO();
289+
dto.setId(feedbackAnswer.getId());
290+
dto.setAnswer(feedbackAnswer.getAnswer());
291+
dto.setQuestionId(feedbackAnswer.getQuestionId());
292+
dto.setRequestId(feedbackAnswer.getRequestId());
293+
dto.setSentiment(feedbackAnswer.getSentiment());
294+
return dto;
295+
}
296+
234297
}

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -496,13 +496,22 @@ private boolean isCurrentUserAdminOrOwner(FeedbackRequest feedbackRequest) {
496496
}
497497

498498
private boolean updateSubmitDateIsPermitted(FeedbackRequest feedbackRequest) {
499-
boolean isAdmin = currentUserServices.isAdmin();
500-
UUID currentUserId = currentUserServices.getCurrentUser().getId();
501-
if (isAdmin || (currentUserId.equals(feedbackRequest.getCreatorId()) && feedbackRequest.getSubmitDate() != null)) {
502-
return true;
499+
MemberProfile currentUser;
500+
boolean isAdmin = false;
501+
try {
502+
currentUser = currentUserServices.getCurrentUser();
503+
isAdmin = currentUserServices.isAdmin();
504+
} catch (NotFoundException notFoundException) {
505+
currentUser = null;
506+
503507
}
508+
if (isAdmin) return true;
509+
UUID currentUserId = currentUser != null ? currentUser.getId() : null;
510+
if (((currentUserId != null && currentUserId.equals(feedbackRequest.getCreatorId())) && feedbackRequest.getSubmitDate() != null)) return true;
511+
if (currentUserId != null && currentUserId.equals(feedbackRequest.getRecipientId())) return true;
512+
if (feedbackRequest.getExternalRecipientId() != null) return true;
504513

505-
return currentUserId.equals(feedbackRequest.getRecipientId());
514+
return false;
506515
}
507516

508517
private FeedbackRequest getFromDTO(FeedbackRequestUpdateDTO dto) {

web-ui-external-feedback/src/api/feedback.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { resolve } from './api.js';
22
import { getFeedbackTemplateWithQuestions } from './feedbacktemplate.js';
33

44
const feedbackSuggestionURL = '/services/feedback/suggestions';
5-
const feedbackRequestURL = '/services/feedback/requests';
6-
const answerURL = '/services/feedback/answers';
5+
const feedbackRequestURL = '/';
6+
const answerURL = '/feedback/answers';
77
const questionAndAnswerURL = '/services/feedback/questions-and-answers';
88
const feedbackExternalRecipientsURL = '/services/feedback/external/recipients';
99

@@ -90,6 +90,10 @@ export const createFeedbackRequest = async (feedbackRequest, cookie) => {
9090
};
9191

9292
export const updateFeedbackRequest = async (feedbackRequest, cookie) => {
93+
94+
console.log("feedback.js, updateFeedbackRequest, feedbackRequestURL: ", feedbackRequestURL);
95+
console.log("feedback.js, updateFeedbackRequest, feedbackRequest: ", feedbackRequest);
96+
9397
return resolve({
9498
method: 'PUT',
9599
url: feedbackRequestURL,

0 commit comments

Comments
 (0)