From 7de04e29397d86fd13734074116bc1354c0ae014 Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Mon, 20 Mar 2023 21:46:05 -0400 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Support=20Saving=20New=20Records=20?= =?UTF-8?q?From=20External=20Systems?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../petclinic/records/NewRecordModel.java | 15 ++++++ .../records/RecordsTransferController.java | 46 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/main/java/org/springframework/samples/petclinic/records/NewRecordModel.java create mode 100644 src/main/java/org/springframework/samples/petclinic/records/RecordsTransferController.java diff --git a/src/main/java/org/springframework/samples/petclinic/records/NewRecordModel.java b/src/main/java/org/springframework/samples/petclinic/records/NewRecordModel.java new file mode 100644 index 000000000..6654f141b --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/records/NewRecordModel.java @@ -0,0 +1,15 @@ +package org.springframework.samples.petclinic.records; + +public class NewRecordModel { + + private final String id; + + public NewRecordModel(final String id) { + this.id = id; + } + + public String getId() { + return id; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/records/RecordsTransferController.java b/src/main/java/org/springframework/samples/petclinic/records/RecordsTransferController.java new file mode 100644 index 000000000..ab193cfdc --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/records/RecordsTransferController.java @@ -0,0 +1,46 @@ +package org.springframework.samples.petclinic.records; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.UUID; +import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@Controller +class RecordsTransferController { + + private final Path recordsDir; + + private final DataSource dataSource; + + @Autowired + RecordsTransferController(final DataSource dataSource) { + recordsDir = Path.of("records"); + this.dataSource = dataSource; + } + + @PostMapping("/records-transfers") + public NewRecordModel newRecordsTransfer(@RequestBody InputStream body) throws IOException, SQLException { + final var id = saveToRecordsSystem(body); + return new NewRecordModel(id); + } + + private String saveToRecordsSystem(final InputStream is) throws IOException, SQLException { + final var id = UUID.randomUUID().toString(); + final var path = recordsDir.resolve("record-" + id + ".json"); + Files.copy(is, path); + final var connection = dataSource.getConnection(); + final PreparedStatement statement = connection.prepareStatement("INSERT INTO records (path) VALUES ?"); + statement.setString(1, path.toString()); + statement.executeUpdate(); + return id; + } + +}