Skip to content

Commit 11bd82b

Browse files
authored
Merge pull request #1 from digma-ai/add-feedback-endpoint
Add feedback endpoint
2 parents 872bbdf + f304e55 commit 11bd82b

File tree

4 files changed

+79
-8
lines changed

4 files changed

+79
-8
lines changed

src/main/java/org/springframework/samples/petclinic/clinicfeedback/FeedbackController.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package org.springframework.samples.petclinic.clinicfeedback;
22

3+
import io.opentelemetry.api.trace.Span;
4+
import jakarta.validation.Valid;
5+
import org.springframework.http.ResponseEntity;
36
import org.springframework.samples.petclinic.model.ClinicFeedback;
7+
import org.springframework.samples.petclinic.owner.Owner;
8+
import org.springframework.validation.BindingResult;
49
import org.springframework.web.bind.annotation.*;
510

611
import java.util.List;
@@ -36,8 +41,30 @@ public String clear() {
3641
}
3742

3843
@PostMapping("populate")
39-
public String populateFeedbacks(@RequestParam(name = "count", defaultValue = "10000") int count) {
40-
service.populate(count);
41-
return "done";
44+
public ResponseEntity<String> populateFeedbacks(@RequestParam(name = "count", defaultValue = "10000") int count) {
45+
try{
46+
service.populate(count);
47+
return ResponseEntity.ok("Populated");
48+
}
49+
catch (Exception ex){
50+
Span.current().recordException(ex);
51+
return ResponseEntity.internalServerError().body(ex.getMessage());
52+
}
53+
}
54+
55+
@PostMapping("add")
56+
public ResponseEntity<String> addFeedback(@RequestBody ClinicFeedback newFeedback, BindingResult result) {
57+
if(result.hasErrors())
58+
return ResponseEntity.badRequest().body("Failed to parsed request");
59+
60+
try{
61+
service.add(newFeedback);
62+
return ResponseEntity.ok("Inserted");
63+
}
64+
catch (Exception ex){
65+
Span.current().recordException(ex);
66+
return ResponseEntity.internalServerError().body(ex.getMessage());
67+
}
68+
4269
}
4370
}

src/main/java/org/springframework/samples/petclinic/clinicfeedback/FeedbackRepository.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.springframework.data.domain.Pageable;
1010
import org.springframework.samples.petclinic.model.ClinicFeedback;
1111
import org.springframework.stereotype.Component;
12-
import org.springframework.stereotype.Service;
1312

1413
import java.net.URI;
1514
import java.net.http.HttpClient;
@@ -32,7 +31,30 @@ public FeedbackRepository(@Value("${spring.data.flaskdb.uri}") String apiBaseUrl
3231
this.objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
3332
}
3433

35-
public void save(ClinicFeedback feedback) {
34+
public void saveMultiple(List<ClinicFeedback> feedbacks) {
35+
for (ClinicFeedback feedback : feedbacks){
36+
HttpResponse<String> response;
37+
try {
38+
var json = objectMapper.writeValueAsString(feedback);
39+
var request = HttpRequest.newBuilder()
40+
.uri(URI.create(this.apiBaseUrl))
41+
.header("Content-Type", "application/json")
42+
.POST(HttpRequest.BodyPublishers.ofString(json))
43+
.build();
44+
45+
response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
46+
47+
} catch (Exception e) {
48+
throw new RuntimeException("Error during saving feedbacks", e);
49+
}
50+
51+
if (response.statusCode() != 200 && response.statusCode() != 201) {
52+
throw new RuntimeException("Failed to save feedbacks to flaskdb: " + response.body());
53+
}
54+
}
55+
}
56+
57+
public void saveSingle(ClinicFeedback feedback) {
3658
HttpResponse<String> response;
3759
try {
3860
String json = objectMapper.writeValueAsString(feedback);
@@ -44,11 +66,11 @@ public void save(ClinicFeedback feedback) {
4466

4567
response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
4668
} catch (Exception e) {
47-
throw new RuntimeException("Error during saving feedbacks", e);
69+
throw new RuntimeException("Error during saving feedback", e);
4870
}
4971

5072
if (response.statusCode() != 200 && response.statusCode() != 201) {
51-
throw new RuntimeException("Failed to save feedbacks to flaskdb: " + response.body());
73+
throw new RuntimeException("Failed to save feedback to flaskdb: " + response.body());
5274
}
5375
}
5476

src/main/java/org/springframework/samples/petclinic/clinicfeedback/FeedbackService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ public FeedbackService(FeedbackRepository repository) {
2121

2222
@WithSpan
2323
public void populate(int numberOfDocs){
24+
var feedbacks = new ArrayList<ClinicFeedback>();
2425
for (int i = 0; i < numberOfDocs; i++) {
2526
var feedback = new ClinicFeedback(
2627
lorem.getEmail(),
2728
lorem.getParagraphs(1, 3)
2829
);
29-
repository.save(feedback);
30+
feedbacks.add(feedback);
3031
}
32+
repository.saveMultiple(feedbacks);
3133
}
3234

3335
public long count() {
@@ -41,4 +43,8 @@ public long clear() {
4143
public List<ClinicFeedback> list(int page, int pageSize) {
4244
return repository.findAll(Pageable.ofSize(pageSize).withPage(page));
4345
}
46+
47+
public void add(ClinicFeedback newFeedback) {
48+
repository.saveSingle(newFeedback);
49+
}
4450
}

src/main/java/org/springframework/samples/petclinic/model/ClinicFeedback.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,20 @@ public ClinicFeedback(String userEmail, String comment) {
2222
this.comment = comment;
2323
this.submittedAt = Instant.now();
2424
}
25+
26+
public void setId(String id) {
27+
this.id = id;
28+
}
29+
30+
public void setUserEmail(String userEmail) {
31+
this.userEmail = userEmail;
32+
}
33+
34+
public void setComment(String comment) {
35+
this.comment = comment;
36+
}
37+
38+
public void setSubmittedAt(Instant submittedAt) {
39+
this.submittedAt = submittedAt;
40+
}
2541
}

0 commit comments

Comments
 (0)