[done] extends REST data access via vertx messages

This commit is contained in:
Peter Schuller 2026-02-13 11:40:08 +01:00
parent fde982f94a
commit 2f5b0fd315
3 changed files with 93 additions and 26 deletions

View file

@ -14,21 +14,16 @@
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
@ -36,5 +31,10 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

View file

@ -77,21 +77,63 @@ public class RestDataAccess<T extends SerializableWithId> {
protected T getDataFromRequest(final RoutingContext context) {
return context.body().asPojo(classReference);
}
private void handleMessage(final Message<RestDataRequest<T>> 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<RestDataRequest<T>> request) {
try {
RestDataRequest<T> 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<RestDataRequest<T>> request) {
request.reply(new ArrayList<>(list()));
}
private void handleGet(Message<RestDataRequest<T>> request, String id) {
T data = get(id);
if (data == null) {
request.fail(404, "Not found");
} else {
request.reply(data);
}
}
private void handleAdd(Message<RestDataRequest<T>> request, T data) {
if (data == null) {
request.fail(400, "No data provided");
} else {
add(data);
request.reply(data.getId());
}
}
private void handleUpdate(Message<RestDataRequest<T>> 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<RestDataRequest<T>> 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;

View file

@ -9,17 +9,42 @@ public class RestDataRequest<T> implements Serializable {
private T data;
private RestCommand command;
public RestDataRequest<T> listRequest() {
this.command = RestCommand.LIST;
return this;
public static <T> RestDataRequest<T> listRequest() {
RestDataRequest<T> request = new RestDataRequest<>();
request.command = RestCommand.LIST;
return request;
}
public RestDataRequest<T> getRequest(final String id) {
this.command = RestCommand.GET;
this.id = id;
return this;
public static <T> RestDataRequest<T> getRequest(final String id) {
RestDataRequest<T> request = new RestDataRequest<>();
request.command = RestCommand.GET;
request.id = id;
return request;
}
public static <T> RestDataRequest<T> addRequest(final T data) {
RestDataRequest<T> request = new RestDataRequest<>();
request.command = RestCommand.ADD;
request.data = data;
return request;
}
public static <T> RestDataRequest<T> updateRequest(final String id, final T data) {
RestDataRequest<T> request = new RestDataRequest<>();
request.command = RestCommand.UPDATE;
request.id = id;
request.data = data;
return request;
}
public static <T> RestDataRequest<T> deleteRequest(final String id) {
RestDataRequest<T> request = new RestDataRequest<>();
request.command = RestCommand.DELETE;
request.id = id;
return request;
}
public String getId() {
return id;
}