[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

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