diff --git a/.classpath b/.classpath
index 8d95b91..5e7942a 100644
--- a/.classpath
+++ b/.classpath
@@ -14,21 +14,16 @@
+
-
-
-
-
-
-
-
+
@@ -36,5 +31,10 @@
+
+
+
+
+
diff --git a/src/main/java/de/pzzz/vertx/RestDataAccess.java b/src/main/java/de/pzzz/vertx/RestDataAccess.java
index fbc8cf0..e93e0b7 100644
--- a/src/main/java/de/pzzz/vertx/RestDataAccess.java
+++ b/src/main/java/de/pzzz/vertx/RestDataAccess.java
@@ -77,21 +77,63 @@ public class RestDataAccess {
protected T getDataFromRequest(final RoutingContext context) {
return context.body().asPojo(classReference);
- }
-
- private void handleMessage(final Message> request) {
- switch (request.body().getCommand()) {
- case LIST:
- request.reply(new ArrayList<>(list()));
- break;
- case GET:
- request.reply(get(request.body().getId()));
- default:
- request.fail(500, "Unsupported request type");
- break;
+ }private void handleMessage(final Message> request) {
+ try {
+ RestDataRequest req = request.body();
+ switch (req.getCommand()) {
+ case LIST -> handleList(request);
+ case GET -> handleGet(request, req.getId());
+ case ADD -> handleAdd(request, req.getData());
+ case UPDATE -> handleUpdate(request, req.getData());
+ case DELETE -> handleDelete(request, req.getId());
+ default -> request.fail(500, "Unsupported request type");
+ }
+ } catch (Exception e) {
+ request.fail(500, "Internal server error: " + e.getMessage());
}
}
+ private void handleList(Message> request) {
+ request.reply(new ArrayList<>(list()));
+ }
+
+ private void handleGet(Message> request, String id) {
+ T data = get(id);
+ if (data == null) {
+ request.fail(404, "Not found");
+ } else {
+ request.reply(data);
+ }
+ }
+
+ private void handleAdd(Message> request, T data) {
+ if (data == null) {
+ request.fail(400, "No data provided");
+ } else {
+ add(data);
+ request.reply(data.getId());
+ }
+ }
+
+ private void handleUpdate(Message> request, T data) {
+ if (data == null || !contains(data.getId())) {
+ request.fail(400, "Invalid data or ID not found");
+ } else {
+ update(data);
+ request.reply(data.getId());
+ }
+ }
+
+ private void handleDelete(Message> request, String id) {
+ if (id == null || !contains(id)) {
+ request.fail(404, "Not found");
+ } else {
+ delete(id);
+ request.reply(true);
+ }
+ }
+
+
private void list(final RoutingContext context) {
if (context.response().ended()) {
return;
diff --git a/src/main/java/de/pzzz/vertx/RestDataRequest.java b/src/main/java/de/pzzz/vertx/RestDataRequest.java
index 22ae16f..231a409 100644
--- a/src/main/java/de/pzzz/vertx/RestDataRequest.java
+++ b/src/main/java/de/pzzz/vertx/RestDataRequest.java
@@ -9,17 +9,42 @@ public class RestDataRequest implements Serializable {
private T data;
private RestCommand command;
- public RestDataRequest listRequest() {
- this.command = RestCommand.LIST;
- return this;
+ public static RestDataRequest listRequest() {
+ RestDataRequest request = new RestDataRequest<>();
+ request.command = RestCommand.LIST;
+ return request;
}
- public RestDataRequest getRequest(final String id) {
- this.command = RestCommand.GET;
- this.id = id;
- return this;
+ public static RestDataRequest getRequest(final String id) {
+ RestDataRequest request = new RestDataRequest<>();
+ request.command = RestCommand.GET;
+ request.id = id;
+ return request;
}
+ public static RestDataRequest addRequest(final T data) {
+ RestDataRequest request = new RestDataRequest<>();
+ request.command = RestCommand.ADD;
+ request.data = data;
+ return request;
+ }
+
+ public static RestDataRequest updateRequest(final String id, final T data) {
+ RestDataRequest request = new RestDataRequest<>();
+ request.command = RestCommand.UPDATE;
+ request.id = id;
+ request.data = data;
+ return request;
+ }
+
+ public static RestDataRequest deleteRequest(final String id) {
+ RestDataRequest request = new RestDataRequest<>();
+ request.command = RestCommand.DELETE;
+ request.id = id;
+ return request;
+ }
+
+
public String getId() {
return id;
}