|
2 | 2 |
|
3 | 3 | import com.objectcomputing.checkins.exceptions.BadArgException; |
4 | 4 | import com.objectcomputing.checkins.security.ImpersonationController; |
| 5 | +import com.objectcomputing.checkins.services.feedback_answer.*; |
5 | 6 | import com.objectcomputing.checkins.services.feedback_answer.question_and_answer.QuestionAndAnswerServices; |
6 | 7 | import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; |
7 | 8 | import com.objectcomputing.checkins.services.memberprofile.*; |
@@ -43,12 +44,18 @@ public class FeedbackRequestExternalRecipientController { |
43 | 44 | private static final Base64.Encoder base64Encoder = Base64.getUrlEncoder(); |
44 | 45 | private final MemberProfileServices memberProfileServices; |
45 | 46 | private final QuestionAndAnswerServices questionAndAnswerServices; |
| 47 | + private final FeedbackAnswerServices feedbackAnswerServices; |
46 | 48 |
|
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 | + ) { |
48 | 54 | this.feedbackReqServices = feedbackRequestServices; |
49 | 55 | this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; |
50 | 56 | this.memberProfileServices = memberProfileServices; |
51 | 57 | this.questionAndAnswerServices = questionAndAnswerServices; |
| 58 | + this.feedbackAnswerServices = feedbackAnswerServices; |
52 | 59 | } |
53 | 60 |
|
54 | 61 | /** |
@@ -231,4 +238,60 @@ public List<QuestionAndAnswerServices.Tuple> getAllQuestionsAndAnswers(@Nullable |
231 | 238 | return questionAndAnswerServices.getAllQuestionsAndAnswers(requestId); |
232 | 239 | } |
233 | 240 |
|
| 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 | + |
234 | 297 | } |
0 commit comments