From 3908738c5c269f74ef99a2a89e304a0ea0961a8a Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Tue, 21 Jan 2020 16:57:49 -0600 Subject: [PATCH 01/20] got survey response controller to work and fixed template --- .../responses/SurveyResponseController.java | 29 +++++++++++++++++++ .../src/main/resources/emailTemplate.mustache | 17 ++++------- 2 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java new file mode 100644 index 0000000..d66ba29 --- /dev/null +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -0,0 +1,29 @@ +package com.objectcomputing.pulsesurvey.receive.responses; + +import com.objectcomputing.pulsesurvey.send.surveys.SurveysController; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.MediaType; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Produces; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Controller("/happiness") +public class SurveyResponseController { + + private static final Logger LOG = LoggerFactory.getLogger(SurveyResponseController.class); + + @Produces(MediaType.TEXT_PLAIN) + @Get + HttpResponse happiness(String currentEmotion, String surveyKey) { + + LOG.info("Hello, your current emotion is " + currentEmotion + "!" + + " with a key of: " + surveyKey); + + return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + + " with a key of: " + surveyKey); + + } + +} \ No newline at end of file diff --git a/send-surveys/src/main/resources/emailTemplate.mustache b/send-surveys/src/main/resources/emailTemplate.mustache index 69b5751..89ba57b 100644 --- a/send-surveys/src/main/resources/emailTemplate.mustache +++ b/send-surveys/src/main/resources/emailTemplate.mustache @@ -118,35 +118,35 @@
How is your work day?
- + I'm unamused/suspicious @@ -157,12 +157,5 @@ - svgtest.html Displaying svgtest.html. \ No newline at end of file From 8d5965a52e6a237c7b034566b9a49bc8c0e15ad7 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Wed, 22 Jan 2020 15:45:55 -0600 Subject: [PATCH 02/20] added response repo and changed selected field to string --- .../pulsesurvey/model/Response.java | 8 +++---- .../repositories/ResponseRepository.java | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java index c7307f0..6f67e50 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java @@ -15,7 +15,7 @@ public class Response { private UUID responseKey; @Column - private int selected; + private String selected; @Column private DateTimeZone createdOn; @@ -36,11 +36,11 @@ public void setResponseKey(UUID responseKey) { this.responseKey = responseKey; } - public int getSelected() { + public String getSelected() { return selected; } - public void setSelected(int selected) { + public void setSelected(String selected) { this.selected = selected; } @@ -55,7 +55,7 @@ public void setCreatedOn(DateTimeZone createdOn) { public Response() { } - public Response(UUID responseId, UUID responseKey, int selected, DateTimeZone createdOn) { + public Response(UUID responseId, UUID responseKey, String selected, DateTimeZone createdOn) { this.responseId = responseId; this.responseKey = responseKey; this.selected = selected; diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java new file mode 100644 index 0000000..68601fd --- /dev/null +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java @@ -0,0 +1,23 @@ +package com.objectcomputing.pulsesurvey.repositories; + +import com.objectcomputing.pulsesurvey.model.Response; +import com.objectcomputing.pulsesurvey.model.ResponseKey; +import io.micronaut.data.jdbc.annotation.JdbcRepository; +import io.micronaut.data.model.query.builder.sql.Dialect; +import io.micronaut.data.repository.CrudRepository; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.UUID; + +import io.micronaut.data.jdbc.annotation.JdbcRepository; +import io.micronaut.data.model.query.builder.sql.Dialect; +import io.micronaut.data.repository.CrudRepository; + +@JdbcRepository(dialect = Dialect.POSTGRES) +public interface ResponseRepository extends CrudRepository { + + @Override + List saveAll(@Valid @NotNull Iterable entities); +} \ No newline at end of file From 920630368d5621d209f9c990c7b7804cf55e053c Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Thu, 23 Jan 2020 12:15:43 -0600 Subject: [PATCH 03/20] added test for response and fixed response repo to reflect db --- .../pulsesurvey/model/Response.java | 13 ++++- .../responses/SurveyResponseController.java | 1 + .../repositories/ResponseRepository.java | 5 -- .../SurveyResponseControllerTest.java | 50 +++++++++++++++++++ 4 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java index 6f67e50..d975584 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java @@ -1,23 +1,32 @@ package com.objectcomputing.pulsesurvey.model; +import io.micronaut.data.annotation.AutoPopulated; +import io.micronaut.data.annotation.DateCreated; import io.micronaut.data.annotation.Id; import org.joda.time.DateTimeZone; import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; import java.util.UUID; +@Entity +@Table(name = "response") public class Response { @Id + @Column(name="responseid") + @AutoPopulated private UUID responseId; - @Column + @Column(name="responsekey") private UUID responseKey; @Column private String selected; - @Column + @Column(name="createdon") + @DateCreated private DateTimeZone createdOn; public UUID getResponseId() { diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index d66ba29..ab5e2b8 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -25,5 +25,6 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { " with a key of: " + surveyKey); } + } \ No newline at end of file diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java index 68601fd..939cbc9 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java @@ -1,7 +1,6 @@ package com.objectcomputing.pulsesurvey.repositories; import com.objectcomputing.pulsesurvey.model.Response; -import com.objectcomputing.pulsesurvey.model.ResponseKey; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.model.query.builder.sql.Dialect; import io.micronaut.data.repository.CrudRepository; @@ -11,10 +10,6 @@ import java.util.List; import java.util.UUID; -import io.micronaut.data.jdbc.annotation.JdbcRepository; -import io.micronaut.data.model.query.builder.sql.Dialect; -import io.micronaut.data.repository.CrudRepository; - @JdbcRepository(dialect = Dialect.POSTGRES) public interface ResponseRepository extends CrudRepository { diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java new file mode 100644 index 0000000..e5589cf --- /dev/null +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -0,0 +1,50 @@ +package com.objectcomputing.pulsesurvey.receive.responses; + +import com.objectcomputing.pulsesurvey.send.surveys.SurveysControllerTest; +import io.micronaut.core.io.buffer.ByteBuffer; +import io.micronaut.http.HttpRequest; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.HttpStatus; +import io.micronaut.http.client.RxHttpClient; +import io.micronaut.http.client.annotation.Client; +import io.micronaut.test.annotation.MicronautTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junitpioneer.jupiter.SystemPropertyExtension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SystemPropertyExtension.class) +@MicronautTest +class SurveyResponseControllerTest { + + @Inject + @Client("/") + RxHttpClient httpClient; + + @Inject + SurveyResponseController itemUnderTest; + + private static final Logger LOG = LoggerFactory.getLogger(SurveysControllerTest.class); + + @Test + void testHappiness() { + + String currentEmotion = "happy"; + String surveyKey = "123"; + + HttpResponse response = httpClient + .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", currentEmotion, surveyKey))) + .blockingFirst(); + + assertEquals(HttpStatus.OK, response.getStatus()); + response.equals("Hello, your current emotion is " + currentEmotion + "!" + + " with a key of: " + surveyKey); + + } + +} \ No newline at end of file From cf45b6433013f1001ff95829c1fc34d81957384f Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Mon, 27 Jan 2020 13:58:30 -0600 Subject: [PATCH 04/20] added response to response table --- .../pulsesurvey/model/Response.java | 9 +- .../responses/SurveyResponseController.java | 101 +++++++++++++++++- .../repositories/ResponseKeyRepository.java | 14 +++ .../repositories/ResponseRepository.java | 19 +++- .../SurveyResponseControllerTest.java | 40 ++++++- 5 files changed, 174 insertions(+), 9 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java index d975584..771069c 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/Response.java @@ -8,6 +8,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import java.time.LocalDateTime; import java.util.UUID; @Entity @@ -27,7 +28,7 @@ public class Response { @Column(name="createdon") @DateCreated - private DateTimeZone createdOn; + private LocalDateTime createdOn; public UUID getResponseId() { return responseId; @@ -53,18 +54,18 @@ public void setSelected(String selected) { this.selected = selected; } - public DateTimeZone getCreatedOn() { + public LocalDateTime getCreatedOn() { return createdOn; } - public void setCreatedOn(DateTimeZone createdOn) { + public void setCreatedOn(LocalDateTime createdOn) { this.createdOn = createdOn; } public Response() { } - public Response(UUID responseId, UUID responseKey, String selected, DateTimeZone createdOn) { + public Response(UUID responseId, UUID responseKey, String selected, LocalDateTime createdOn) { this.responseId = responseId; this.responseKey = responseKey; this.selected = selected; diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index ab5e2b8..68b5b9b 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -1,6 +1,9 @@ package com.objectcomputing.pulsesurvey.receive.responses; -import com.objectcomputing.pulsesurvey.send.surveys.SurveysController; +import com.objectcomputing.pulsesurvey.model.Response; +import com.objectcomputing.pulsesurvey.model.ResponseKey; +import com.objectcomputing.pulsesurvey.repositories.ResponseKeyRepository; +import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; @@ -9,11 +12,33 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.inject.Inject; +import java.util.Optional; +import java.util.UUID; + @Controller("/happiness") public class SurveyResponseController { private static final Logger LOG = LoggerFactory.getLogger(SurveyResponseController.class); + @Inject + private ResponseRepository responseRepo; + + @Inject + private ResponseKeyRepository responseKeyRepo; + + @Produces(MediaType.TEXT_PLAIN) + @Get("/received") + HttpResponse happinessReceived(String currentEmotion, String surveyKey) { + + LOG.info("Hello, your current emotion is " + currentEmotion + "!" + + " with a key of: " + surveyKey); + + return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + + " with a key of: " + surveyKey); + + } + @Produces(MediaType.TEXT_PLAIN) @Get HttpResponse happiness(String currentEmotion, String surveyKey) { @@ -21,10 +46,82 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { LOG.info("Hello, your current emotion is " + currentEmotion + "!" + " with a key of: " + surveyKey); + // see if key is valid (in the db in responsekey table) + boolean goodKey = false; + goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); +// Optional responseKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); +// if (responseKey.isPresent()) goodKey = true; + + LOG.info("happiness - key is valid? " + goodKey); + + // if yes - store happiness (and comments(?)) + if (goodKey) { + // add record to response table with responsekey and selected and createdon + boolean responseAdded = addResponse(currentEmotion, surveyKey); +// Response response = new Response(); +// response.setResponseKey(UUID.fromString(surveyKey)); +// response.setSelected(currentEmotion); +// responseRepo.save(response); + + // (maybe create usercomments row and fill it in?) + + removeKey(surveyKey); // currently problematic + + // send thank you + sendThankYou("someemailaddressfromsomewhere"); + + } else { + LOG.warn("This key is not valid "); + } + return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + " with a key of: " + surveyKey); } - + + private boolean addResponse(String currentEmotion, String surveyKey) { + + boolean responseAdded = false; + Response response = new Response(); + + response.setResponseKey(UUID.fromString(surveyKey)); + response.setSelected(currentEmotion); + response = responseRepo.save(response); + + LOG.info("Adding response " + currentEmotion + " "); + + if (response.getCreatedOn() != null) responseAdded = true; + + return responseAdded; + } + + private void validateKey(String surveyKey) { + + LOG.info("Validating key" + surveyKey); + + Optional response = responseRepo.findById(UUID.fromString(surveyKey)); + LOG.info("response: " + response.get()); + boolean keyIsInDb = responseRepo.existsById(UUID.fromString(surveyKey)); + LOG.info("key is valid? " + keyIsInDb); + + } + + private void removeKey(String surveyKey) { + + LOG.info("Removing key: " + surveyKey + " from responsekeys"); + + // can't remove this because response has it as a foreign key + + // responseKeyRepo.deleteById(UUID.fromString(surveyKey)); + + } + + private void sendThankYou(String emailAddress) { + + LOG.info("Sending thank you to " + emailAddress); + + + } + } \ No newline at end of file diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java index f079bd3..cb82fb2 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java @@ -1,12 +1,15 @@ package com.objectcomputing.pulsesurvey.repositories; import java.util.List; +import java.util.Optional; import java.util.UUID; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import com.objectcomputing.pulsesurvey.model.Response; import com.objectcomputing.pulsesurvey.model.ResponseKey; +import edu.umd.cs.findbugs.annotations.NonNull; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.model.query.builder.sql.Dialect; import io.micronaut.data.repository.CrudRepository; @@ -16,4 +19,15 @@ public interface ResponseKeyRepository extends CrudRepository @Override List saveAll(@Valid @NotNull Iterable entities); + + @Override + boolean existsById(@NotNull @NonNull UUID id); + + @Override + Optional findById(@NotNull @NonNull UUID id); + + @Override + void deleteById(@NonNull @NotNull UUID id); + + } \ No newline at end of file diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java index 939cbc9..26e6252 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseRepository.java @@ -1,6 +1,7 @@ package com.objectcomputing.pulsesurvey.repositories; import com.objectcomputing.pulsesurvey.model.Response; +import edu.umd.cs.findbugs.annotations.NonNull; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.model.query.builder.sql.Dialect; import io.micronaut.data.repository.CrudRepository; @@ -8,6 +9,7 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Optional; import java.util.UUID; @JdbcRepository(dialect = Dialect.POSTGRES) @@ -15,4 +17,19 @@ public interface ResponseRepository extends CrudRepository { @Override List saveAll(@Valid @NotNull Iterable entities); -} \ No newline at end of file + + @Override + S save(@Valid @NotNull @NonNull S entity); + + @Override + boolean existsById(@NotNull @NonNull UUID id); + + @Override + Optional findById(@NotNull @NonNull UUID id); + + @Override + void deleteById(@NonNull @NotNull UUID id); + + Optional findByResponseKey(@NonNull @NotNull UUID responseKey); + +} diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index e5589cf..92f62f4 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -32,13 +32,49 @@ class SurveyResponseControllerTest { private static final Logger LOG = LoggerFactory.getLogger(SurveysControllerTest.class); @Test - void testHappiness() { + void testHappinessReceived() { String currentEmotion = "happy"; String surveyKey = "123"; HttpResponse response = httpClient - .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", currentEmotion, surveyKey))) + .exchange(HttpRequest.GET(String.format("/happiness/received?currentEmotion=%s&surveyKey=%s", currentEmotion, surveyKey))) + .blockingFirst(); + + assertEquals(HttpStatus.OK, response.getStatus()); + response.equals("Hello, your current emotion is " + currentEmotion + "!" + + " with a key of: " + surveyKey); + + } + + @Test + void testHappinessValidateKey() { + + // mock db + String currentEmotion = "happy"; + String surveyKey = "68fe8990-be83-49ec-b885-17cf1db78001"; + + HttpResponse response = httpClient + .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", + currentEmotion, surveyKey))) + .blockingFirst(); + + assertEquals(HttpStatus.OK, response.getStatus()); +// response.equals("Hello, your current emotion is " + currentEmotion + "!" + +// " with a key of: " + surveyKey); + + } + + @Test + void testHappiness() { + + // mock db + String currentEmotion = "happy"; + String surveyKey = "4975741f-4464-4e49-9165-ddb0359d6b6e"; + + HttpResponse response = httpClient + .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", + currentEmotion, surveyKey))) .blockingFirst(); assertEquals(HttpStatus.OK, response.getStatus()); From 0b60eace885d4577a903df77e431750806132622 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Mon, 27 Jan 2020 15:47:27 -0600 Subject: [PATCH 05/20] responses added to db with unit tests --- .../responses/SurveyResponseController.java | 19 +++--- .../SurveyResponseControllerTest.java | 58 ++++++++++++++----- 2 files changed, 50 insertions(+), 27 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 68b5b9b..934c5a3 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -27,6 +27,10 @@ public class SurveyResponseController { @Inject private ResponseKeyRepository responseKeyRepo; + public void setResponseRepo(ResponseRepository responseRepository) { + this.responseRepo = responseRepository; + } + @Produces(MediaType.TEXT_PLAIN) @Get("/received") HttpResponse happinessReceived(String currentEmotion, String surveyKey) { @@ -46,28 +50,19 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { LOG.info("Hello, your current emotion is " + currentEmotion + "!" + " with a key of: " + surveyKey); - // see if key is valid (in the db in responsekey table) boolean goodKey = false; goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); -// Optional responseKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); -// if (responseKey.isPresent()) goodKey = true; LOG.info("happiness - key is valid? " + goodKey); // if yes - store happiness (and comments(?)) if (goodKey) { - // add record to response table with responsekey and selected and createdon boolean responseAdded = addResponse(currentEmotion, surveyKey); -// Response response = new Response(); -// response.setResponseKey(UUID.fromString(surveyKey)); -// response.setSelected(currentEmotion); -// responseRepo.save(response); // (maybe create usercomments row and fill it in?) removeKey(surveyKey); // currently problematic - // send thank you sendThankYou("someemailaddressfromsomewhere"); } else { @@ -79,7 +74,7 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { } - private boolean addResponse(String currentEmotion, String surveyKey) { + boolean addResponse(String currentEmotion, String surveyKey) { boolean responseAdded = false; Response response = new Response(); @@ -90,7 +85,8 @@ private boolean addResponse(String currentEmotion, String surveyKey) { LOG.info("Adding response " + currentEmotion + " "); - if (response.getCreatedOn() != null) responseAdded = true; +// if (response.getCreatedOn() != null) responseAdded = true; + if (response.getResponseId() != null) responseAdded = true; return responseAdded; } @@ -123,5 +119,4 @@ private void sendThankYou(String emailAddress) { } - } \ No newline at end of file diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index 92f62f4..6949e21 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -1,5 +1,7 @@ package com.objectcomputing.pulsesurvey.receive.responses; +import com.objectcomputing.pulsesurvey.model.Response; +import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; import com.objectcomputing.pulsesurvey.send.surveys.SurveysControllerTest; import io.micronaut.core.io.buffer.ByteBuffer; import io.micronaut.http.HttpRequest; @@ -8,6 +10,7 @@ import io.micronaut.http.client.RxHttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.test.annotation.MicronautTest; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junitpioneer.jupiter.SystemPropertyExtension; @@ -16,7 +19,15 @@ import javax.inject.Inject; +import java.time.LocalDateTime; +import java.time.Month; +import java.util.UUID; + import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.when; @ExtendWith(SystemPropertyExtension.class) @MicronautTest @@ -29,12 +40,20 @@ class SurveyResponseControllerTest { @Inject SurveyResponseController itemUnderTest; + ResponseRepository mockRepository = mock(ResponseRepository.class); + private static final Logger LOG = LoggerFactory.getLogger(SurveysControllerTest.class); + @BeforeEach + void setupTest() { + itemUnderTest.setResponseRepo(mockRepository); + reset(mockRepository); + } + @Test void testHappinessReceived() { - String currentEmotion = "happy"; + String currentEmotion = "happyTest"; String surveyKey = "123"; HttpResponse response = httpClient @@ -48,29 +67,38 @@ void testHappinessReceived() { } @Test - void testHappinessValidateKey() { + void testHappinessAddResponse() { - // mock db - String currentEmotion = "happy"; - String surveyKey = "68fe8990-be83-49ec-b885-17cf1db78001"; + String currentEmotion = "happyTest"; + String surveyKey = "12345678-9123-4567-abcd-123456789abc"; + String fakeResponseKey = "98765432-9876-9876-9876-987654321234"; - HttpResponse response = httpClient - .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", - currentEmotion, surveyKey))) - .blockingFirst(); + Response fakeResponse = new Response(); + fakeResponse.setResponseId(UUID.fromString(fakeResponseKey)); + fakeResponse.setResponseKey(UUID.fromString(surveyKey)); + fakeResponse.setSelected(currentEmotion); + fakeResponse.setCreatedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); - assertEquals(HttpStatus.OK, response.getStatus()); -// response.equals("Hello, your current emotion is " + currentEmotion + "!" + -// " with a key of: " + surveyKey); + when(mockRepository.save(any())).thenReturn(fakeResponse); + + assertTrue(itemUnderTest.addResponse(currentEmotion, surveyKey)); } @Test void testHappiness() { - // mock db - String currentEmotion = "happy"; - String surveyKey = "4975741f-4464-4e49-9165-ddb0359d6b6e"; + String currentEmotion = "happyTest"; + String surveyKey = "12345678-9123-4567-abcd-123456789abc"; + String fakeResponseKey = "98765432-9876-9876-9876-987654321234"; + + Response fakeResponse = new Response(); + fakeResponse.setResponseId(UUID.fromString(fakeResponseKey)); + fakeResponse.setResponseKey(UUID.fromString(surveyKey)); + fakeResponse.setSelected(currentEmotion); + fakeResponse.setCreatedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); + + when(mockRepository.save(any())).thenReturn(fakeResponse); HttpResponse response = httpClient .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", From 6431f8de0f2c85305b064d12382e835e7cec6827 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Wed, 29 Jan 2020 09:39:38 -0600 Subject: [PATCH 06/20] added used field to db with corresponding code --- .../pulsesurvey/model/ResponseKey.java | 14 +++++++++++++- .../send/surveys/SurveysController.java | 2 +- .../responses/SurveyResponseControllerTest.java | 2 +- .../send/surveys/SurveysControllerTest.java | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java index 3cbb0d0..6865436 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java @@ -24,6 +24,9 @@ public class ResponseKey { @DateCreated private LocalDateTime issuedOn; + @Column(name="used") + private boolean used; + public UUID getResponseKey() { return responseKey; } @@ -40,11 +43,20 @@ public void setIssuedOn(LocalDateTime issuedOn) { this.issuedOn = issuedOn; } + public boolean isUsed() { return used; } + + public void setUsed(boolean used) { this.used = used; } + public ResponseKey() { } - public ResponseKey(UUID responseKey, LocalDateTime issuedOn) { + public ResponseKey(boolean used) { + this.used = used; + } + + public ResponseKey(UUID responseKey, LocalDateTime issuedOn, boolean used) { this.responseKey = responseKey; this.issuedOn = issuedOn; + this.used = used; } } diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java index 35d9a1b..bcbd7bd 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java @@ -130,7 +130,7 @@ List generateAndSaveKeys(int howManyKeys) { List keys = new ArrayList(); for (int i = 0; i < howManyKeys; i++) { - keys.add(new ResponseKey()); + keys.add(new ResponseKey(false)); } LOG.info("Storing empty keys."); List returned = responseKeyRepo.saveAll(keys); diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index 6949e21..61a8039 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -91,7 +91,7 @@ void testHappiness() { String currentEmotion = "happyTest"; String surveyKey = "12345678-9123-4567-abcd-123456789abc"; String fakeResponseKey = "98765432-9876-9876-9876-987654321234"; - + Response fakeResponse = new Response(); fakeResponse.setResponseId(UUID.fromString(fakeResponseKey)); fakeResponse.setResponseKey(UUID.fromString(surveyKey)); diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysControllerTest.java index b6755b6..4d3e660 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysControllerTest.java @@ -79,7 +79,7 @@ List generateFakeEmails(int size) { List generateFakeResponseKeys(int size) { List toReturn = new ArrayList<>(size); for (int count = 0; count < size; count++) { - toReturn.add(new ResponseKey(UUID.randomUUID(), LocalDateTime.now())); + toReturn.add(new ResponseKey(UUID.randomUUID(), LocalDateTime.now(), false)); } return toReturn; } From e8daba9f6ed366c8e8c625f5d05a634aa3dde458 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Wed, 29 Jan 2020 12:58:30 -0600 Subject: [PATCH 07/20] make git happy --- .../pulsesurvey/receive/responses/SurveyResponseController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 934c5a3..a0ad3e2 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -94,7 +94,6 @@ boolean addResponse(String currentEmotion, String surveyKey) { private void validateKey(String surveyKey) { LOG.info("Validating key" + surveyKey); - Optional response = responseRepo.findById(UUID.fromString(surveyKey)); LOG.info("response: " + response.get()); boolean keyIsInDb = responseRepo.existsById(UUID.fromString(surveyKey)); From 1241ce4ba1773235abf2ee05da76504098aee83b Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Wed, 29 Jan 2020 13:54:55 -0600 Subject: [PATCH 08/20] adding code to check if response key is already used --- .../responses/SurveyResponseController.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index a0ad3e2..e3e7fcc 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -51,7 +51,8 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { " with a key of: " + surveyKey); boolean goodKey = false; - goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); +// goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); + goodKey = validateKey(surveyKey); LOG.info("happiness - key is valid? " + goodKey); @@ -59,9 +60,9 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { if (goodKey) { boolean responseAdded = addResponse(currentEmotion, surveyKey); - // (maybe create usercomments row and fill it in?) + // add usercomments row and fill it in - removeKey(surveyKey); // currently problematic + markKeyAsUsed(surveyKey); // currently problematic sendThankYou("someemailaddressfromsomewhere"); @@ -91,19 +92,32 @@ boolean addResponse(String currentEmotion, String surveyKey) { return responseAdded; } - private void validateKey(String surveyKey) { + private boolean validateKey(String surveyKey) { LOG.info("Validating key" + surveyKey); - Optional response = responseRepo.findById(UUID.fromString(surveyKey)); - LOG.info("response: " + response.get()); - boolean keyIsInDb = responseRepo.existsById(UUID.fromString(surveyKey)); +// goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); + Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); +// LOG.info("response: " + response.get()); +// boolean keyIsInDb = responseRepo.existsById(UUID.fromString(surveyKey)); + boolean keyIsInDb = false; + + if (responseKey.isPresent()) { + if (responseKey.get().isUsed()) { + keyIsInDb = true; + } + } + +// responseKey.ifPresent(used -> {used.isUsed()}); + LOG.info("key is valid? " + keyIsInDb); + return keyIsInDb; + } - private void removeKey(String surveyKey) { + private void markKeyAsUsed(String surveyKey) { - LOG.info("Removing key: " + surveyKey + " from responsekeys"); + LOG.info("Marking key as used: " + surveyKey + " from responsekeys"); // can't remove this because response has it as a foreign key From 83e70efea0afe40cecab52f1bbcdc0d72a630801 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Wed, 29 Jan 2020 16:01:55 -0600 Subject: [PATCH 09/20] got validate key working with tests --- .../responses/SurveyResponseController.java | 72 ++++++++++--------- .../SurveyResponseControllerTest.java | 66 +++++++++++++++-- 2 files changed, 101 insertions(+), 37 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index e3e7fcc..585a89c 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -4,6 +4,7 @@ import com.objectcomputing.pulsesurvey.model.ResponseKey; import com.objectcomputing.pulsesurvey.repositories.ResponseKeyRepository; import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; +import com.objectcomputing.pulsesurvey.template.manager.SurveyTemplateManager; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; @@ -15,6 +16,7 @@ import javax.inject.Inject; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; @Controller("/happiness") public class SurveyResponseController { @@ -27,6 +29,17 @@ public class SurveyResponseController { @Inject private ResponseKeyRepository responseKeyRepo; + @Inject + private SurveyTemplateManager templateManager; + + public void setResponseKeyRepo(ResponseKeyRepository responseKeyRepository) { + this.responseKeyRepo = responseKeyRepository; + } + + public void setTemplateManager(SurveyTemplateManager surveyTemplateManager) { + this.templateManager = surveyTemplateManager; + } + public void setResponseRepo(ResponseRepository responseRepository) { this.responseRepo = responseRepository; } @@ -50,19 +63,19 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { LOG.info("Hello, your current emotion is " + currentEmotion + "!" + " with a key of: " + surveyKey); - boolean goodKey = false; -// goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); - goodKey = validateKey(surveyKey); + boolean validKey = false; + validKey = validateKey(surveyKey); - LOG.info("happiness - key is valid? " + goodKey); + LOG.info("happiness - key is valid? " + validKey); - // if yes - store happiness (and comments(?)) - if (goodKey) { + // if yes - store happiness and comments + if (validKey) { boolean responseAdded = addResponse(currentEmotion, surveyKey); // add usercomments row and fill it in + addComments(surveyKey); - markKeyAsUsed(surveyKey); // currently problematic + markKeyAsUsed(surveyKey); sendThankYou("someemailaddressfromsomewhere"); @@ -75,6 +88,25 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { } + boolean validateKey(String surveyKey) { + + LOG.info("Validating key" + surveyKey); + Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); + AtomicBoolean keyIsValid = new AtomicBoolean(false); + + responseKey.ifPresent(key -> { + keyIsValid.set(!key.isUsed()); + }); + + LOG.info("key is valid? " + keyIsValid); + + return keyIsValid.get(); + + } + + private void addComments(String surveyKey) { + } + boolean addResponse(String currentEmotion, String surveyKey) { boolean responseAdded = false; @@ -92,35 +124,11 @@ boolean addResponse(String currentEmotion, String surveyKey) { return responseAdded; } - private boolean validateKey(String surveyKey) { - - LOG.info("Validating key" + surveyKey); -// goodKey = responseKeyRepo.existsById(UUID.fromString(surveyKey)); - Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); -// LOG.info("response: " + response.get()); -// boolean keyIsInDb = responseRepo.existsById(UUID.fromString(surveyKey)); - boolean keyIsInDb = false; - - if (responseKey.isPresent()) { - if (responseKey.get().isUsed()) { - keyIsInDb = true; - } - } - -// responseKey.ifPresent(used -> {used.isUsed()}); - - LOG.info("key is valid? " + keyIsInDb); - - return keyIsInDb; - - } - private void markKeyAsUsed(String surveyKey) { LOG.info("Marking key as used: " + surveyKey + " from responsekeys"); - // can't remove this because response has it as a foreign key - + // set used field to true // responseKeyRepo.deleteById(UUID.fromString(surveyKey)); } diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index 61a8039..8e0cd8d 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -1,8 +1,12 @@ package com.objectcomputing.pulsesurvey.receive.responses; +import com.objectcomputing.pulsesurvey.email.manager.GmailSender; import com.objectcomputing.pulsesurvey.model.Response; +import com.objectcomputing.pulsesurvey.model.ResponseKey; +import com.objectcomputing.pulsesurvey.repositories.ResponseKeyRepository; import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; import com.objectcomputing.pulsesurvey.send.surveys.SurveysControllerTest; +import com.objectcomputing.pulsesurvey.template.manager.SurveyTemplateManager; import io.micronaut.core.io.buffer.ByteBuffer; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -40,14 +44,28 @@ class SurveyResponseControllerTest { @Inject SurveyResponseController itemUnderTest; - ResponseRepository mockRepository = mock(ResponseRepository.class); + ResponseRepository mockResponseRepository = mock(ResponseRepository.class); + + ResponseKeyRepository mockResponseKeyRepository = mock(ResponseKeyRepository.class); + + SurveyTemplateManager mockTemplateManager = mock(SurveyTemplateManager.class); + + GmailSender mockGmailSender = mock(GmailSender.class); private static final Logger LOG = LoggerFactory.getLogger(SurveysControllerTest.class); @BeforeEach void setupTest() { - itemUnderTest.setResponseRepo(mockRepository); - reset(mockRepository); + itemUnderTest.setResponseRepo(mockResponseRepository); +// itemUnderTest.setGmailApi(gmailApiMock); + itemUnderTest.setResponseKeyRepo(mockResponseKeyRepository); +// itemUnderTest.setTemplateManager(mockTemplateManager); +// itemUnderTest.setGmailSender(mockGmailSender); +// reset(gmailApiMock); + reset(mockResponseKeyRepository); +// reset(mockTemplateManager); + reset(mockGmailSender); + reset(mockResponseRepository); } @Test @@ -66,6 +84,44 @@ void testHappinessReceived() { } + @Test + void testValidateKey_validKey() { + + String surveyKey = "12345678-9123-4567-abcd-123456789abc"; + String fakeResponseKey = "98765432-9876-9876-9876-987654321234"; + boolean fakeUsed = false; + + ResponseKey fakeResponseKeyObj = new ResponseKey(); + fakeResponseKeyObj.setResponseKey(UUID.fromString(fakeResponseKey)); + fakeResponseKeyObj.setUsed(fakeUsed); + fakeResponseKeyObj.setIssuedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); + + when(mockResponseKeyRepository.findById(any())) + .thenReturn(java.util.Optional.of(fakeResponseKeyObj)); + + assertTrue(itemUnderTest.validateKey(surveyKey)); + + } + + @Test + void testValidateKey_invalidKey() { + + String surveyKey = "12345678-9123-4567-abcd-123456789abc"; + String fakeResponseKey = "98765432-9876-9876-9876-987654321234"; + boolean fakeUsed = true; + + ResponseKey fakeResponseKeyObj = new ResponseKey(); + fakeResponseKeyObj.setResponseKey(UUID.fromString(fakeResponseKey)); + fakeResponseKeyObj.setUsed(fakeUsed); + fakeResponseKeyObj.setIssuedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); + + when(mockResponseKeyRepository.findById(any())) + .thenReturn(java.util.Optional.of(fakeResponseKeyObj)); + + assertFalse(itemUnderTest.validateKey(surveyKey)); + + } + @Test void testHappinessAddResponse() { @@ -79,7 +135,7 @@ void testHappinessAddResponse() { fakeResponse.setSelected(currentEmotion); fakeResponse.setCreatedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); - when(mockRepository.save(any())).thenReturn(fakeResponse); + when(mockResponseRepository.save(any())).thenReturn(fakeResponse); assertTrue(itemUnderTest.addResponse(currentEmotion, surveyKey)); @@ -98,7 +154,7 @@ void testHappiness() { fakeResponse.setSelected(currentEmotion); fakeResponse.setCreatedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); - when(mockRepository.save(any())).thenReturn(fakeResponse); + when(mockResponseRepository.save(any())).thenReturn(fakeResponse); HttpResponse response = httpClient .exchange(HttpRequest.GET(String.format("/happiness?currentEmotion=%s&surveyKey=%s", From f0bdfbd4d3b5c0330175a90402d864ae0ce0b3e9 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Fri, 31 Jan 2020 12:30:05 -0600 Subject: [PATCH 10/20] add application-test.yml, mark key as used, addUserComments stub, validateKey --- .../pulsesurvey/model/ResponseKey.java | 6 +-- .../responses/SurveyResponseController.java | 37 +++++++++++++------ .../repositories/ResponseKeyRepository.java | 23 +++--------- .../repositories/UserCommentsRepository.java | 21 +++++++++++ .../send/surveys/SurveysController.java | 2 +- .../SurveyResponseControllerTest.java | 23 +++++++++++- 6 files changed, 75 insertions(+), 37 deletions(-) create mode 100644 send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java index 6865436..8cebe82 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/ResponseKey.java @@ -25,7 +25,7 @@ public class ResponseKey { private LocalDateTime issuedOn; @Column(name="used") - private boolean used; + private boolean used = false; public UUID getResponseKey() { return responseKey; @@ -50,10 +50,6 @@ public void setIssuedOn(LocalDateTime issuedOn) { public ResponseKey() { } - public ResponseKey(boolean used) { - this.used = used; - } - public ResponseKey(UUID responseKey, LocalDateTime issuedOn, boolean used) { this.responseKey = responseKey; this.issuedOn = issuedOn; diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 585a89c..4f8415c 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -2,8 +2,10 @@ import com.objectcomputing.pulsesurvey.model.Response; import com.objectcomputing.pulsesurvey.model.ResponseKey; +import com.objectcomputing.pulsesurvey.model.UserComments; import com.objectcomputing.pulsesurvey.repositories.ResponseKeyRepository; import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; +import com.objectcomputing.pulsesurvey.repositories.UserCommentsRepository; import com.objectcomputing.pulsesurvey.template.manager.SurveyTemplateManager; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -23,11 +25,14 @@ public class SurveyResponseController { private static final Logger LOG = LoggerFactory.getLogger(SurveyResponseController.class); + @Inject + private ResponseKeyRepository responseKeyRepo; + @Inject private ResponseRepository responseRepo; @Inject - private ResponseKeyRepository responseKeyRepo; + private UserCommentsRepository userCommentsRepo; @Inject private SurveyTemplateManager templateManager; @@ -44,6 +49,10 @@ public void setResponseRepo(ResponseRepository responseRepository) { this.responseRepo = responseRepository; } + public void setUserCommentsRepo(UserCommentsRepository userCommentsRepository) { + this.userCommentsRepo = userCommentsRepository; + } + @Produces(MediaType.TEXT_PLAIN) @Get("/received") HttpResponse happinessReceived(String currentEmotion, String surveyKey) { @@ -73,7 +82,7 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { boolean responseAdded = addResponse(currentEmotion, surveyKey); // add usercomments row and fill it in - addComments(surveyKey); + addUserComments(surveyKey); markKeyAsUsed(surveyKey); @@ -92,21 +101,18 @@ boolean validateKey(String surveyKey) { LOG.info("Validating key" + surveyKey); Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); - AtomicBoolean keyIsValid = new AtomicBoolean(false); + AtomicBoolean isValid = new AtomicBoolean(false); responseKey.ifPresent(key -> { - keyIsValid.set(!key.isUsed()); + isValid.set(!key.isUsed()); }); - LOG.info("key is valid? " + keyIsValid); + LOG.info("key is valid? " + isValid); - return keyIsValid.get(); + return isValid.get(); } - private void addComments(String surveyKey) { - } - boolean addResponse(String currentEmotion, String surveyKey) { boolean responseAdded = false; @@ -124,13 +130,22 @@ boolean addResponse(String currentEmotion, String surveyKey) { return responseAdded; } + private void addUserComments(String surveyKey) { + + UserComments userComments = new UserComments(); + // userComments.setCommentText(); + } + private void markKeyAsUsed(String surveyKey) { LOG.info("Marking key as used: " + surveyKey + " from responsekeys"); - // set used field to true - // responseKeyRepo.deleteById(UUID.fromString(surveyKey)); + Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); + responseKey.ifPresent(responseKeyToSave -> { + responseKeyToSave.setUsed(true); + responseKeyRepo.update(responseKeyToSave); + }); } private void sendThankYou(String emailAddress) { diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java index cb82fb2..9492422 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/ResponseKeyRepository.java @@ -1,33 +1,20 @@ package com.objectcomputing.pulsesurvey.repositories; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; - -import com.objectcomputing.pulsesurvey.model.Response; import com.objectcomputing.pulsesurvey.model.ResponseKey; -import edu.umd.cs.findbugs.annotations.NonNull; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.model.query.builder.sql.Dialect; import io.micronaut.data.repository.CrudRepository; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.UUID; + @JdbcRepository(dialect = Dialect.POSTGRES) public interface ResponseKeyRepository extends CrudRepository { @Override List saveAll(@Valid @NotNull Iterable entities); - @Override - boolean existsById(@NotNull @NonNull UUID id); - - @Override - Optional findById(@NotNull @NonNull UUID id); - - @Override - void deleteById(@NonNull @NotNull UUID id); - } \ No newline at end of file diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java new file mode 100644 index 0000000..4b4b0c4 --- /dev/null +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java @@ -0,0 +1,21 @@ +package com.objectcomputing.pulsesurvey.repositories; + +import com.objectcomputing.pulsesurvey.model.Response; +import edu.umd.cs.findbugs.annotations.NonNull; +import io.micronaut.data.jdbc.annotation.JdbcRepository; +import io.micronaut.data.model.query.builder.sql.Dialect; +import io.micronaut.data.repository.CrudRepository; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@JdbcRepository(dialect = Dialect.POSTGRES) +public interface UserCommentsRepository extends CrudRepository { + + @Override + List saveAll(@Valid @NotNull Iterable entities); + +} diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java index bcbd7bd..35d9a1b 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java @@ -130,7 +130,7 @@ List generateAndSaveKeys(int howManyKeys) { List keys = new ArrayList(); for (int i = 0; i < howManyKeys; i++) { - keys.add(new ResponseKey(false)); + keys.add(new ResponseKey()); } LOG.info("Storing empty keys."); List returned = responseKeyRepo.saveAll(keys); diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index 8e0cd8d..cc2d52c 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -57,13 +57,13 @@ class SurveyResponseControllerTest { @BeforeEach void setupTest() { itemUnderTest.setResponseRepo(mockResponseRepository); -// itemUnderTest.setGmailApi(gmailApiMock); itemUnderTest.setResponseKeyRepo(mockResponseKeyRepository); +// itemUnderTest.setGmailApi(gmailApiMock); // itemUnderTest.setTemplateManager(mockTemplateManager); // itemUnderTest.setGmailSender(mockGmailSender); // reset(gmailApiMock); - reset(mockResponseKeyRepository); // reset(mockTemplateManager); + reset(mockResponseKeyRepository); reset(mockGmailSender); reset(mockResponseRepository); } @@ -122,6 +122,25 @@ void testValidateKey_invalidKey() { } + @Test + void testValidateKey_absentKey() { + + String surveyKey = "12345678-9123-4567-abcd-123456789abc"; + String fakeResponseKey = "98765432-9876-9876-9876-987654321234"; + boolean fakeUsed = true; + + ResponseKey fakeResponseKeyObj = new ResponseKey(); + fakeResponseKeyObj.setResponseKey(UUID.fromString(fakeResponseKey)); + fakeResponseKeyObj.setUsed(fakeUsed); + fakeResponseKeyObj.setIssuedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); + + when(mockResponseKeyRepository.findById(any())) + .thenReturn(java.util.Optional.empty()); + + assertFalse(itemUnderTest.validateKey(surveyKey)); + + } + @Test void testHappinessAddResponse() { From b2f14a2416de1f79db1910d650bf7d5269dfbd60 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Thu, 6 Feb 2020 16:25:16 -0600 Subject: [PATCH 11/20] added return type for markKeyAsUsed and got test working with mocked db --- .../responses/SurveyResponseController.java | 13 ++++++++----- .../SurveyResponseControllerTest.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 4f8415c..45cc1cb 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -19,6 +19,7 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; @Controller("/happiness") public class SurveyResponseController { @@ -86,7 +87,7 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { markKeyAsUsed(surveyKey); - sendThankYou("someemailaddressfromsomewhere"); + sendThankYou(); } else { LOG.warn("This key is not valid "); @@ -136,21 +137,23 @@ private void addUserComments(String surveyKey) { // userComments.setCommentText(); } - private void markKeyAsUsed(String surveyKey) { + ResponseKey markKeyAsUsed(String surveyKey) { LOG.info("Marking key as used: " + surveyKey + " from responsekeys"); + AtomicReference returnedResponseKey = new AtomicReference<>(new ResponseKey()); Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); responseKey.ifPresent(responseKeyToSave -> { responseKeyToSave.setUsed(true); - responseKeyRepo.update(responseKeyToSave); + returnedResponseKey.set(responseKeyRepo.update(responseKeyToSave)); }); + return returnedResponseKey.get(); } - private void sendThankYou(String emailAddress) { + private void sendThankYou() { - LOG.info("Sending thank you to " + emailAddress); + LOG.info("Sending thank you to web page " ); } diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index cc2d52c..2bf19ce 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -25,6 +25,7 @@ import java.time.LocalDateTime; import java.time.Month; +import java.util.Optional; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; @@ -186,4 +187,22 @@ void testHappiness() { } + @Test + void testMarkKeyAsUsed() { + + String fakeKey = "98765432-9876-9876-9876-987654321234"; + ResponseKey fakeResponseKey = new ResponseKey(); + fakeResponseKey.setResponseKey(UUID.fromString(fakeKey)); + fakeResponseKey.setIssuedOn(LocalDateTime.of(2020, Month.JANUARY, 27, 1, 1)); + fakeResponseKey.setUsed(false); + + when(mockResponseKeyRepository.findById(any())).thenReturn(Optional.of(fakeResponseKey)); + + when(mockResponseKeyRepository.update(any())).thenReturn(fakeResponseKey); + + itemUnderTest.markKeyAsUsed(fakeResponseKey.getResponseKey().toString()); +// LOG.debug("Response Key is "+ (returnedKey.isUsed()?"used":"not used")); + assertTrue(fakeResponseKey.isUsed()); + } + } \ No newline at end of file From 5c84da33d817bf1c12cc2e46cdc54c041aee13ca Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Tue, 11 Feb 2020 14:42:47 -0600 Subject: [PATCH 12/20] added docker stuff and redirects with pages to survey response controller --- send-surveys/build.gradle | 2 + .../responses/SurveyResponseController.java | 53 ++++++++---- .../src/main/resources/application.yml | 6 ++ send-surveys/src/main/resources/css/main.css | 50 +++++++++++ .../src/main/resources/static/thankyou.html | 59 +++++++++++++ .../src/main/resources/views/comment.hbs | 84 +++++++++++++++++++ .../src/main/resources/views/main.css | 50 +++++++++++ .../SurveyResponseControllerTest.java | 6 +- 8 files changed, 293 insertions(+), 17 deletions(-) create mode 100644 send-surveys/src/main/resources/css/main.css create mode 100644 send-surveys/src/main/resources/static/thankyou.html create mode 100644 send-surveys/src/main/resources/views/comment.hbs create mode 100644 send-surveys/src/main/resources/views/main.css diff --git a/send-surveys/build.gradle b/send-surveys/build.gradle index 8b617b0..a894eb9 100644 --- a/send-surveys/build.gradle +++ b/send-surveys/build.gradle @@ -53,6 +53,8 @@ dependencies { implementation "io.micronaut:micronaut-function-aws:1.3.6" runtimeOnly "com.amazonaws:aws-lambda-java-log4j2:1.0.0" + compile 'io.micronaut:micronaut-views' + compile 'com.github.jknack:handlebars:4.1.0' compile 'io.micronaut.data:micronaut-data-jdbc:1.0.0.M5' compile 'com.github.spullara.mustache.java:compiler:0.9.6' compile "com.sun.mail:javax.mail:1.6.2" diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 45cc1cb..282d17b 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -7,15 +7,22 @@ import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; import com.objectcomputing.pulsesurvey.repositories.UserCommentsRepository; import com.objectcomputing.pulsesurvey.template.manager.SurveyTemplateManager; +import io.micronaut.context.annotation.Value; +import io.micronaut.core.util.CollectionUtils; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Post; import io.micronaut.http.annotation.Produces; +import io.micronaut.views.View; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.ByteBuffer; import java.util.Optional; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -66,8 +73,8 @@ HttpResponse happinessReceived(String currentEmotion, String surveyKey) } - @Produces(MediaType.TEXT_PLAIN) @Get + @Produces(MediaType.TEXT_PLAIN) HttpResponse happiness(String currentEmotion, String surveyKey) { LOG.info("Hello, your current emotion is " + currentEmotion + "!" + @@ -80,22 +87,41 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { // if yes - store happiness and comments if (validKey) { - boolean responseAdded = addResponse(currentEmotion, surveyKey); - - // add usercomments row and fill it in - addUserComments(surveyKey); - - markKeyAsUsed(surveyKey); - - sendThankYou(); - + boolean responseAdded = saveResponse(currentEmotion, surveyKey); + + if (responseAdded) { + markKeyAsUsed(surveyKey); + + try { + HttpResponse.redirect(new URI("/happiness/comment?surveyKey="+surveyKey)); + } catch (URISyntaxException e) { + e.printStackTrace(); + LOG.error("unable to redirect to /happiness/commentBlock " + e.getMessage()); + } + } } else { - LOG.warn("This key is not valid "); + LOG.warn("This key is not valid: " + surveyKey); } return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + " with a key of: " + surveyKey); + } + + @Get(value = "comment") + @View("comment") + public HttpResponse displayComments(String surveyKey) { + // TODO fill stub and return something useful, like the comment html page + // Build up form that has a comment block section (name = comment) action to be post to commentBLock + LOG.info("redirect to comment surveyKey = " + surveyKey); + return HttpResponse.ok(CollectionUtils.mapOf("surveyKey", surveyKey)); + } + @Post(value = "comment") + @View("thankyou.html") + private HttpResponse sendThankYouWithCommentBlock(@Value("comment") String comment) { + LOG.warn("The user has commented: " + comment); + // put comment into the db + return HttpResponse.ok(); // Make thankyou.html } boolean validateKey(String surveyKey) { @@ -114,7 +140,7 @@ boolean validateKey(String surveyKey) { } - boolean addResponse(String currentEmotion, String surveyKey) { + boolean saveResponse(String currentEmotion, String surveyKey) { boolean responseAdded = false; Response response = new Response(); @@ -125,7 +151,6 @@ boolean addResponse(String currentEmotion, String surveyKey) { LOG.info("Adding response " + currentEmotion + " "); -// if (response.getCreatedOn() != null) responseAdded = true; if (response.getResponseId() != null) responseAdded = true; return responseAdded; @@ -153,7 +178,7 @@ ResponseKey markKeyAsUsed(String surveyKey) { private void sendThankYou() { - LOG.info("Sending thank you to web page " ); + LOG.info("Sending final thank you web page " ); } diff --git a/send-surveys/src/main/resources/application.yml b/send-surveys/src/main/resources/application.yml index 9462ee0..18fb7f5 100644 --- a/send-surveys/src/main/resources/application.yml +++ b/send-surveys/src/main/resources/application.yml @@ -1,6 +1,12 @@ micronaut: application: name: send-surveys + router: + static-resources: + default: + enabled: true + mapping: "/**" + paths: "classpath:static" root: src/main/resources --- diff --git a/send-surveys/src/main/resources/css/main.css b/send-surveys/src/main/resources/css/main.css new file mode 100644 index 0000000..a43cf36 --- /dev/null +++ b/send-surveys/src/main/resources/css/main.css @@ -0,0 +1,50 @@ + * { + box-sizing: border-box; + } + + .wrapper { + display: flex; + flex-direction: column; + justify-content: center; + background-color: #2559a7; + + + } + + .thank-you { + padding: 2vh 2vw; + font-size: 5vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 600; + color: #ffffff; + align-self: center; + justify-content: center; + } + + .received-feedback { + padding: 1vh 2vw; + font-size: 2.5vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 300; + color: #ffffff; + align-self: center; + } + + .comments { + padding-top: 5vh; + padding-bottom: 1vh; + font-size: 2vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 200; + color: #ffffff; + align-self: left; + } + + .comment-block { + margin: 5vh 5vw; + font-size: 2vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 200; + color: #000000; + + } \ No newline at end of file diff --git a/send-surveys/src/main/resources/static/thankyou.html b/send-surveys/src/main/resources/static/thankyou.html new file mode 100644 index 0000000..e956412 --- /dev/null +++ b/send-surveys/src/main/resources/static/thankyou.html @@ -0,0 +1,59 @@ + + + + + + + + Thanks + + + + + + + + + + + +
+
+
THANK YOU!!
+
+
+ + \ No newline at end of file diff --git a/send-surveys/src/main/resources/views/comment.hbs b/send-surveys/src/main/resources/views/comment.hbs new file mode 100644 index 0000000..8a5b4c0 --- /dev/null +++ b/send-surveys/src/main/resources/views/comment.hbs @@ -0,0 +1,84 @@ + + + + + + + + Thanks + + + + + + + + + +
+ + + +
+
THANK YOU!!
+
We have received your feedback and have recorded your feeling
+
Do you have more to say? Leave a comment below.
+ + +
+ +
+
+
+ + \ No newline at end of file diff --git a/send-surveys/src/main/resources/views/main.css b/send-surveys/src/main/resources/views/main.css new file mode 100644 index 0000000..a43cf36 --- /dev/null +++ b/send-surveys/src/main/resources/views/main.css @@ -0,0 +1,50 @@ + * { + box-sizing: border-box; + } + + .wrapper { + display: flex; + flex-direction: column; + justify-content: center; + background-color: #2559a7; + + + } + + .thank-you { + padding: 2vh 2vw; + font-size: 5vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 600; + color: #ffffff; + align-self: center; + justify-content: center; + } + + .received-feedback { + padding: 1vh 2vw; + font-size: 2.5vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 300; + color: #ffffff; + align-self: center; + } + + .comments { + padding-top: 5vh; + padding-bottom: 1vh; + font-size: 2vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 200; + color: #ffffff; + align-self: left; + } + + .comment-block { + margin: 5vh 5vw; + font-size: 2vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 200; + color: #000000; + + } \ No newline at end of file diff --git a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java index 2bf19ce..7172ee4 100644 --- a/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java +++ b/send-surveys/src/test/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseControllerTest.java @@ -143,7 +143,7 @@ void testValidateKey_absentKey() { } @Test - void testHappinessAddResponse() { + void testHappinessSaveResponse() { String currentEmotion = "happyTest"; String surveyKey = "12345678-9123-4567-abcd-123456789abc"; @@ -157,7 +157,7 @@ void testHappinessAddResponse() { when(mockResponseRepository.save(any())).thenReturn(fakeResponse); - assertTrue(itemUnderTest.addResponse(currentEmotion, surveyKey)); + assertTrue(itemUnderTest.saveResponse(currentEmotion, surveyKey)); } @@ -201,7 +201,7 @@ void testMarkKeyAsUsed() { when(mockResponseKeyRepository.update(any())).thenReturn(fakeResponseKey); itemUnderTest.markKeyAsUsed(fakeResponseKey.getResponseKey().toString()); -// LOG.debug("Response Key is "+ (returnedKey.isUsed()?"used":"not used")); + LOG.debug("Fake Response Key is "+ (fakeResponseKey.isUsed()?"used":"not used")); assertTrue(fakeResponseKey.isUsed()); } From ff92708cee25c87b395ec274cc172ad909307516 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Thu, 20 Feb 2020 12:11:28 -0600 Subject: [PATCH 13/20] added screens for thank yous and comments, clean up --- docker-compose.yml | 14 +++++ .../responses/SurveyResponseController.java | 13 +++-- .../main/resources/{ => static}/css/main.css | 5 +- .../src/main/resources/views/comment.hbs | 51 +------------------ .../src/main/resources/views/main.css | 50 ------------------ .../2019.12.18.14.06.00_createInitialDb.sql | 25 ++++----- 6 files changed, 37 insertions(+), 121 deletions(-) create mode 100644 docker-compose.yml rename send-surveys/src/main/resources/{ => static}/css/main.css (90%) delete mode 100644 send-surveys/src/main/resources/views/main.css diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f3d7b75 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3' +services: + postgresql: + image: postgres:11.6 + environment: + POSTGRES_DB: pulsesurveydb + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + volumes: + - ./server/src/main/resources/db/2019.12.18.14.06.00_createInitialDb.sql:/docker-entrypoint-initdb.d/2019.12.18.14.06.00_createInitialDb.sql + ports: + - "5432:5432" + container_name: pulsesurveydb + \ No newline at end of file diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 282d17b..429c230 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -107,7 +107,7 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { " with a key of: " + surveyKey); } - @Get(value = "comment") + @Get("comment") @View("comment") public HttpResponse displayComments(String surveyKey) { // TODO fill stub and return something useful, like the comment html page @@ -116,17 +116,17 @@ public HttpResponse displayComments(String surveyKey) { return HttpResponse.ok(CollectionUtils.mapOf("surveyKey", surveyKey)); } - @Post(value = "comment") + @Post("comment") @View("thankyou.html") - private HttpResponse sendThankYouWithCommentBlock(@Value("comment") String comment) { + public HttpResponse sendThankYouWithCommentBlock(@Value("comment") String comment) { LOG.warn("The user has commented: " + comment); - // put comment into the db + // put comment into the db using the survey key return HttpResponse.ok(); // Make thankyou.html } boolean validateKey(String surveyKey) { - LOG.info("Validating key" + surveyKey); + LOG.info("Validating key " + surveyKey); Optional responseKey = responseKeyRepo.findById(UUID.fromString(surveyKey)); AtomicBoolean isValid = new AtomicBoolean(false); @@ -134,6 +134,8 @@ boolean validateKey(String surveyKey) { isValid.set(!key.isUsed()); }); + LOG.debug("Survey Key " + surveyKey + (isValid.get()?" is used":" is not used")); + LOG.info("key is valid? " + isValid); return isValid.get(); @@ -171,6 +173,7 @@ ResponseKey markKeyAsUsed(String surveyKey) { responseKey.ifPresent(responseKeyToSave -> { responseKeyToSave.setUsed(true); + // this next line is blowing up - micronaut data issue returnedResponseKey.set(responseKeyRepo.update(responseKeyToSave)); }); return returnedResponseKey.get(); diff --git a/send-surveys/src/main/resources/css/main.css b/send-surveys/src/main/resources/static/css/main.css similarity index 90% rename from send-surveys/src/main/resources/css/main.css rename to send-surveys/src/main/resources/static/css/main.css index a43cf36..bf1ef99 100644 --- a/send-surveys/src/main/resources/css/main.css +++ b/send-surveys/src/main/resources/static/css/main.css @@ -6,9 +6,7 @@ display: flex; flex-direction: column; justify-content: center; - background-color: #2559a7; - - + background-color: #2158a9; } .thank-you { @@ -46,5 +44,4 @@ font-family: 'Roboto', Verdana, sans-serif; font-weight: 200; color: #000000; - } \ No newline at end of file diff --git a/send-surveys/src/main/resources/views/comment.hbs b/send-surveys/src/main/resources/views/comment.hbs index 8a5b4c0..f9ad96d 100644 --- a/send-surveys/src/main/resources/views/comment.hbs +++ b/send-surveys/src/main/resources/views/comment.hbs @@ -7,57 +7,8 @@ Thanks - + - diff --git a/send-surveys/src/main/resources/views/main.css b/send-surveys/src/main/resources/views/main.css deleted file mode 100644 index a43cf36..0000000 --- a/send-surveys/src/main/resources/views/main.css +++ /dev/null @@ -1,50 +0,0 @@ - * { - box-sizing: border-box; - } - - .wrapper { - display: flex; - flex-direction: column; - justify-content: center; - background-color: #2559a7; - - - } - - .thank-you { - padding: 2vh 2vw; - font-size: 5vw; - font-family: 'Roboto', Verdana, sans-serif; - font-weight: 600; - color: #ffffff; - align-self: center; - justify-content: center; - } - - .received-feedback { - padding: 1vh 2vw; - font-size: 2.5vw; - font-family: 'Roboto', Verdana, sans-serif; - font-weight: 300; - color: #ffffff; - align-self: center; - } - - .comments { - padding-top: 5vh; - padding-bottom: 1vh; - font-size: 2vw; - font-family: 'Roboto', Verdana, sans-serif; - font-weight: 200; - color: #ffffff; - align-self: left; - } - - .comment-block { - margin: 5vh 5vw; - font-size: 2vw; - font-family: 'Roboto', Verdana, sans-serif; - font-weight: 200; - color: #000000; - - } \ No newline at end of file diff --git a/server/src/main/resources/db/2019.12.18.14.06.00_createInitialDb.sql b/server/src/main/resources/db/2019.12.18.14.06.00_createInitialDb.sql index 75e2d33..60fc526 100644 --- a/server/src/main/resources/db/2019.12.18.14.06.00_createInitialDb.sql +++ b/server/src/main/resources/db/2019.12.18.14.06.00_createInitialDb.sql @@ -1,21 +1,22 @@ - - -create extension pgcrypto; -CREATE TABLE responseKeys( - responseKey UUID PRIMARY KEY DEFAULT gen_random_uuid(), - issuedOn TIMESTAMPTZ +drop table if exists responsekeys; +CREATE TABLE responsekeys( + responseKey varchar PRIMARY KEY, + issuedOn TIMESTAMPTZ, + used boolean ); +drop table if exists response; CREATE TABLE response( - responseId UUID PRIMARY KEY DEFAULT gen_random_uuid(), - responseKey UUID REFERENCES keys(responseKey), - selected INTEGER, + responseId varchar PRIMARY KEY, + responseKey varchar REFERENCES responsekeys(responseKey), + selected varchar, createdOn TIMESTAMPTZ ); +drop table if exists userComments ; CREATE TABLE userComments ( - commentId UUID PRIMARY KEY DEFAULT gen_random_uuid(), - responseKey UUID REFERENCES keys(responseKey), + commentId varchar PRIMARY KEY, + responseKey varchar REFERENCES responsekeys(responseKey), commentText VARCHAR, createdOn TIMESTAMPTZ -); +); \ No newline at end of file From d98f04497ed08ab9b2af5327e9302d7da5f01ce4 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Thu, 20 Feb 2020 13:31:57 -0600 Subject: [PATCH 14/20] fixed final thank you page --- .../responses/SurveyResponseController.java | 2 + .../src/main/resources/static/css/main.css | 10 ++++ .../src/main/resources/views/thankyou.html | 58 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 send-surveys/src/main/resources/views/thankyou.html diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 429c230..64fb8e1 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -179,6 +179,8 @@ ResponseKey markKeyAsUsed(String surveyKey) { return returnedResponseKey.get(); } + @Get("thanks") + @View("thankyou") private void sendThankYou() { LOG.info("Sending final thank you web page " ); diff --git a/send-surveys/src/main/resources/static/css/main.css b/send-surveys/src/main/resources/static/css/main.css index bf1ef99..be46673 100644 --- a/send-surveys/src/main/resources/static/css/main.css +++ b/send-surveys/src/main/resources/static/css/main.css @@ -19,6 +19,16 @@ justify-content: center; } + .final-thank-you { + padding: 32vh 2vw; + font-size: 4vw; + font-family: 'Roboto', Verdana, sans-serif; + font-weight: 600; + color: #ffffff; + align-self: center; + justify-content: center; + } + .received-feedback { padding: 1vh 2vw; font-size: 2.5vw; diff --git a/send-surveys/src/main/resources/views/thankyou.html b/send-surveys/src/main/resources/views/thankyou.html new file mode 100644 index 0000000..468ff2b --- /dev/null +++ b/send-surveys/src/main/resources/views/thankyou.html @@ -0,0 +1,58 @@ + + + + + + + + Thanks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
THANK YOU!!
+
+ + + \ No newline at end of file From b230eed79b3e1d98d61753defbab9c54a2ef37ca Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Fri, 21 Feb 2020 13:32:45 -0600 Subject: [PATCH 15/20] got thank you screen working and bringing in comments --- send-surveys/gradle.properties | 2 +- .../responses/SurveyResponseController.java | 42 +++++++------ .../src/main/resources/static/css/main.css | 2 +- .../src/main/resources/static/thankyou.html | 59 ------------------- .../src/main/resources/views/comment.hbs | 28 ++++----- .../views/{thankyou.html => thankyou.hbs} | 0 6 files changed, 35 insertions(+), 98 deletions(-) delete mode 100644 send-surveys/src/main/resources/static/thankyou.html rename send-surveys/src/main/resources/views/{thankyou.html => thankyou.hbs} (100%) diff --git a/send-surveys/gradle.properties b/send-surveys/gradle.properties index 13a9dbf..c32b5a7 100644 --- a/send-surveys/gradle.properties +++ b/send-surveys/gradle.properties @@ -1,2 +1,2 @@ -micronautVersion=1.2.8 +micronautVersion=1.3.1 micronautDataVersion=1.0.0.M5 \ No newline at end of file diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 64fb8e1..07c26f3 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -11,6 +11,7 @@ import io.micronaut.core.util.CollectionUtils; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; +import io.micronaut.http.annotation.Consumes; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; import io.micronaut.http.annotation.Post; @@ -22,7 +23,6 @@ import javax.inject.Inject; import java.net.URI; import java.net.URISyntaxException; -import java.nio.ByteBuffer; import java.util.Optional; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -49,10 +49,6 @@ public void setResponseKeyRepo(ResponseKeyRepository responseKeyRepository) { this.responseKeyRepo = responseKeyRepository; } - public void setTemplateManager(SurveyTemplateManager surveyTemplateManager) { - this.templateManager = surveyTemplateManager; - } - public void setResponseRepo(ResponseRepository responseRepository) { this.responseRepo = responseRepository; } @@ -70,7 +66,6 @@ HttpResponse happinessReceived(String currentEmotion, String surveyKey) return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + " with a key of: " + surveyKey); - } @Get @@ -110,18 +105,31 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { @Get("comment") @View("comment") public HttpResponse displayComments(String surveyKey) { - // TODO fill stub and return something useful, like the comment html page - // Build up form that has a comment block section (name = comment) action to be post to commentBLock + LOG.info("redirect to comment surveyKey = " + surveyKey); return HttpResponse.ok(CollectionUtils.mapOf("surveyKey", surveyKey)); } @Post("comment") - @View("thankyou.html") - public HttpResponse sendThankYouWithCommentBlock(@Value("comment") String comment) { - LOG.warn("The user has commented: " + comment); + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @View("thankyou") + public HttpResponse sendThankYouWithCommentBlock + (@Value("userComments") String userComments + ) { + + LOG.info("The user has commented: " + userComments); // put comment into the db using the survey key - return HttpResponse.ok(); // Make thankyou.html + + return HttpResponse.ok(); + } + + @Get("thanks") + @View("thankyou") + public HttpResponse sendThankYou() { + + LOG.info("Sending final thank you web page " ); + return HttpResponse.ok(); + } boolean validateKey(String surveyKey) { @@ -139,7 +147,6 @@ boolean validateKey(String surveyKey) { LOG.info("key is valid? " + isValid); return isValid.get(); - } boolean saveResponse(String currentEmotion, String surveyKey) { @@ -179,13 +186,4 @@ ResponseKey markKeyAsUsed(String surveyKey) { return returnedResponseKey.get(); } - @Get("thanks") - @View("thankyou") - private void sendThankYou() { - - LOG.info("Sending final thank you web page " ); - - - } - } \ No newline at end of file diff --git a/send-surveys/src/main/resources/static/css/main.css b/send-surveys/src/main/resources/static/css/main.css index be46673..1020963 100644 --- a/send-surveys/src/main/resources/static/css/main.css +++ b/send-surveys/src/main/resources/static/css/main.css @@ -6,7 +6,7 @@ display: flex; flex-direction: column; justify-content: center; - background-color: #2158a9; + background-color: #255aa8; } .thank-you { diff --git a/send-surveys/src/main/resources/static/thankyou.html b/send-surveys/src/main/resources/static/thankyou.html deleted file mode 100644 index e956412..0000000 --- a/send-surveys/src/main/resources/static/thankyou.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - Thanks - - - - - - - - - - - -
-
-
THANK YOU!!
-
-
- - \ No newline at end of file diff --git a/send-surveys/src/main/resources/views/comment.hbs b/send-surveys/src/main/resources/views/comment.hbs index f9ad96d..494875d 100644 --- a/send-surveys/src/main/resources/views/comment.hbs +++ b/send-surveys/src/main/resources/views/comment.hbs @@ -5,7 +5,7 @@ - Thanks + Thanks, comments? @@ -13,23 +13,21 @@ - -
- - +
-
THANK YOU!!
-
We have received your feedback and have recorded your feeling
-
Do you have more to say? Leave a comment below.
- - -
- -
+
THANK YOU!!
+
We have received your feedback and have recorded your feeling
+
Do you have more to say? Leave a comment below.
+ + +
+ +
+
\ No newline at end of file diff --git a/send-surveys/src/main/resources/views/thankyou.html b/send-surveys/src/main/resources/views/thankyou.hbs similarity index 100% rename from send-surveys/src/main/resources/views/thankyou.html rename to send-surveys/src/main/resources/views/thankyou.hbs From 1e11e10d796f48cdf0164ddd447604f72c948360 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Fri, 21 Feb 2020 13:43:24 -0600 Subject: [PATCH 16/20] added survey key to comment post --- .../receive/responses/SurveyResponseController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 07c26f3..3c690fa 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -114,10 +114,11 @@ public HttpResponse displayComments(String surveyKey) { @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @View("thankyou") public HttpResponse sendThankYouWithCommentBlock - (@Value("userComments") String userComments - ) { + (@Value("userComments") String userComments, + @Value("surveyKey") String surveyKey) { LOG.info("The user has commented: " + userComments); + LOG.info("With surveyKey: " + surveyKey); // put comment into the db using the survey key return HttpResponse.ok(); From afa2fd45d380e1201a3a98f78cf18fbbe7a1f136 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Tue, 25 Feb 2020 09:47:55 -0600 Subject: [PATCH 17/20] changed name of user comment endpoint --- .../pulsesurvey/receive/responses/SurveyResponseController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 3c690fa..596cfaf 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -110,7 +110,7 @@ public HttpResponse displayComments(String surveyKey) { return HttpResponse.ok(CollectionUtils.mapOf("surveyKey", surveyKey)); } - @Post("comment") + @Post("userComments") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @View("thankyou") public HttpResponse sendThankYouWithCommentBlock From 6c196cf067183259a83908c19be8611a82424d7d Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Tue, 25 Feb 2020 10:22:21 -0600 Subject: [PATCH 18/20] prettied up comment page --- send-surveys/src/main/resources/static/css/main.css | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/send-surveys/src/main/resources/static/css/main.css b/send-surveys/src/main/resources/static/css/main.css index 1020963..6868a62 100644 --- a/send-surveys/src/main/resources/static/css/main.css +++ b/send-surveys/src/main/resources/static/css/main.css @@ -11,7 +11,7 @@ .thank-you { padding: 2vh 2vw; - font-size: 5vw; + font-size: 3.5vw; font-family: 'Roboto', Verdana, sans-serif; font-weight: 600; color: #ffffff; @@ -31,7 +31,7 @@ .received-feedback { padding: 1vh 2vw; - font-size: 2.5vw; + font-size: 2vw; font-family: 'Roboto', Verdana, sans-serif; font-weight: 300; color: #ffffff; @@ -40,8 +40,9 @@ .comments { padding-top: 5vh; - padding-bottom: 1vh; - font-size: 2vw; + padding-bottom: 0.3vh; + padding-left: 0.5vh; + font-size: 1.5vw; font-family: 'Roboto', Verdana, sans-serif; font-weight: 200; color: #ffffff; @@ -50,7 +51,7 @@ .comment-block { margin: 5vh 5vw; - font-size: 2vw; + font-size: 1vw; font-family: 'Roboto', Verdana, sans-serif; font-weight: 200; color: #000000; From e14114dddf4e120e127d8180aa4f0cccc8914cee Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Tue, 25 Feb 2020 13:34:04 -0600 Subject: [PATCH 19/20] added comments to db --- .../pulsesurvey/model/UserComments.java | 24 +++++++++++----- .../responses/SurveyResponseController.java | 28 +++++++++++-------- .../repositories/UserCommentsRepository.java | 10 ++++--- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/UserComments.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/UserComments.java index fb4450a..f8d87df 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/UserComments.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/model/UserComments.java @@ -1,24 +1,34 @@ package com.objectcomputing.pulsesurvey.model; +import io.micronaut.data.annotation.AutoPopulated; +import io.micronaut.data.annotation.DateCreated; import io.micronaut.data.annotation.Id; import org.joda.time.DateTimeZone; import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import java.time.LocalDateTime; import java.util.UUID; +@Entity +@Table(name = "usercomments") public class UserComments { @Id + @Column(name="commentid") + @AutoPopulated private UUID commentId; - @Column + @Column(name="responsekey") private UUID responseKey; - @Column + @Column(name="commenttext") private String commentText; - @Column - private DateTimeZone createdOn; + @Column(name="createdon") + @DateCreated + private LocalDateTime createdOn; public UUID getCommentId() { return commentId; @@ -44,18 +54,18 @@ public void setCommentText(String commentText) { this.commentText = commentText; } - public DateTimeZone getCreatedOn() { + public LocalDateTime getCreatedOn() { return createdOn; } - public void setCreatedOn(DateTimeZone createdOn) { + public void setCreatedOn(LocalDateTime createdOn) { this.createdOn = createdOn; } public UserComments() { } - public UserComments(UUID commentId, UUID responseKey, String commentText, DateTimeZone createdOn) { + public UserComments(UUID commentId, UUID responseKey, String commentText, LocalDateTime createdOn) { this.commentId = commentId; this.responseKey = responseKey; this.commentText = commentText; diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 596cfaf..7b19e82 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -41,9 +41,9 @@ public class SurveyResponseController { @Inject private UserCommentsRepository userCommentsRepo; - - @Inject - private SurveyTemplateManager templateManager; +// +// @Inject +// private SurveyTemplateManager templateManager; public void setResponseKeyRepo(ResponseKeyRepository responseKeyRepository) { this.responseKeyRepo = responseKeyRepository; @@ -61,10 +61,10 @@ public void setUserCommentsRepo(UserCommentsRepository userCommentsRepository) { @Get("/received") HttpResponse happinessReceived(String currentEmotion, String surveyKey) { - LOG.info("Hello, your current emotion is " + currentEmotion + "!" + + LOG.info("Hello, I have received your emotion of: " + currentEmotion + "!" + " with a key of: " + surveyKey); - return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + + return HttpResponse.ok("Hello, I have received your emotion of: " + currentEmotion + "!" + " with a key of: " + surveyKey); } @@ -88,25 +88,26 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { markKeyAsUsed(surveyKey); try { - HttpResponse.redirect(new URI("/happiness/comment?surveyKey="+surveyKey)); + LOG.info("redirecting to /happiness/comment"); + return HttpResponse.redirect(new URI("/happiness/comment?surveyKey="+surveyKey)); } catch (URISyntaxException e) { e.printStackTrace(); - LOG.error("unable to redirect to /happiness/commentBlock " + e.getMessage()); + LOG.error("unable to redirect to /happiness/comment " + e.getMessage()); } } } else { LOG.warn("This key is not valid: " + surveyKey); } - return HttpResponse.ok("Hello, your current emotion is " + currentEmotion + "!" + - " with a key of: " + surveyKey); + return HttpResponse.ok("Hello, your current emotion of " + currentEmotion + "!" + + " with a key of: " + surveyKey + " is duly noted."); } @Get("comment") @View("comment") public HttpResponse displayComments(String surveyKey) { - LOG.info("redirect to comment surveyKey = " + surveyKey); + LOG.info("in /comment. surveyKey = " + surveyKey); return HttpResponse.ok(CollectionUtils.mapOf("surveyKey", surveyKey)); } @@ -120,6 +121,7 @@ public HttpResponse displayComments(String surveyKey) { LOG.info("The user has commented: " + userComments); LOG.info("With surveyKey: " + surveyKey); // put comment into the db using the survey key + saveUserComment(surveyKey, userComments); return HttpResponse.ok(); } @@ -166,10 +168,12 @@ boolean saveResponse(String currentEmotion, String surveyKey) { return responseAdded; } - private void addUserComments(String surveyKey) { + private void saveUserComment(String surveyKey, String comments) { UserComments userComments = new UserComments(); - // userComments.setCommentText(); + userComments.setCommentText(comments); + userComments.setResponseKey(UUID.fromString(surveyKey)); + userCommentsRepo.save(userComments); } ResponseKey markKeyAsUsed(String surveyKey) { diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java index 4b4b0c4..84335da 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/repositories/UserCommentsRepository.java @@ -1,6 +1,6 @@ package com.objectcomputing.pulsesurvey.repositories; -import com.objectcomputing.pulsesurvey.model.Response; +import com.objectcomputing.pulsesurvey.model.UserComments; import edu.umd.cs.findbugs.annotations.NonNull; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.model.query.builder.sql.Dialect; @@ -9,13 +9,15 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; -import java.util.Optional; import java.util.UUID; @JdbcRepository(dialect = Dialect.POSTGRES) -public interface UserCommentsRepository extends CrudRepository { +public interface UserCommentsRepository extends CrudRepository { @Override - List saveAll(@Valid @NotNull Iterable entities); + List saveAll(@Valid @NotNull Iterable entities); + + @Override + S save(@Valid @NotNull @NonNull S entity); } From 9c646d2b02b80ff379422f854347fdd66ad10ac7 Mon Sep 17 00:00:00 2001 From: Holly Williams Date: Tue, 25 Feb 2020 14:27:04 -0600 Subject: [PATCH 20/20] clean up --- .../receive/responses/SurveyResponseController.java | 7 +------ .../pulsesurvey/send/surveys/SurveysController.java | 3 --- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java index 7b19e82..30cddbd 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/receive/responses/SurveyResponseController.java @@ -6,7 +6,6 @@ import com.objectcomputing.pulsesurvey.repositories.ResponseKeyRepository; import com.objectcomputing.pulsesurvey.repositories.ResponseRepository; import com.objectcomputing.pulsesurvey.repositories.UserCommentsRepository; -import com.objectcomputing.pulsesurvey.template.manager.SurveyTemplateManager; import io.micronaut.context.annotation.Value; import io.micronaut.core.util.CollectionUtils; import io.micronaut.http.HttpResponse; @@ -41,9 +40,6 @@ public class SurveyResponseController { @Inject private UserCommentsRepository userCommentsRepo; -// -// @Inject -// private SurveyTemplateManager templateManager; public void setResponseKeyRepo(ResponseKeyRepository responseKeyRepository) { this.responseKeyRepo = responseKeyRepository; @@ -100,7 +96,7 @@ HttpResponse happiness(String currentEmotion, String surveyKey) { } return HttpResponse.ok("Hello, your current emotion of " + currentEmotion + "!" + - " with a key of: " + surveyKey + " is duly noted."); + " is duly noted."); } @Get("comment") @@ -185,7 +181,6 @@ ResponseKey markKeyAsUsed(String surveyKey) { responseKey.ifPresent(responseKeyToSave -> { responseKeyToSave.setUsed(true); - // this next line is blowing up - micronaut data issue returnedResponseKey.set(responseKeyRepo.update(responseKeyToSave)); }); return returnedResponseKey.get(); diff --git a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java index 35d9a1b..a261a6f 100644 --- a/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java +++ b/send-surveys/src/main/java/com/objectcomputing/pulsesurvey/send/surveys/SurveysController.java @@ -73,8 +73,6 @@ public SendSurveys sendEmails(@Body SendSurveysCommand sendSurveysCommand) { LOG.info("post survey.getTemplateName(): " + sendSurveysCommand.getTemplateName()); LOG.info("post survey.getPercentOfEmails(): " + sendSurveysCommand.getPercentOfEmails()); - // to get aws environment vars: - // System.getenv("NAME_OF_YOUR_ENV_VARIABLE") // NOTE: getenv returns a string LOG.info("survey.percentOfEmails: " + sendSurveysCommand.getPercentOfEmails()); int percentOfEmailsToGet = Integer.parseInt(sendSurveysCommand.getPercentOfEmails()); LOG.info("percentOfEmailsToGet: " + percentOfEmailsToGet); @@ -121,7 +119,6 @@ List getRandomEmailAddresses(int percentOfEmailsNeeded) { for (int i = 0; i < numberOfAddressesRequested; i++) { randomSubsetEmailAddresses.add(emailAddresses.get(i)); } - // return emailAddresses; return randomSubsetEmailAddresses; }