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; }