[done] extends REST data access via vertx messages
This commit is contained in:
parent
fde982f94a
commit
2f5b0fd315
3 changed files with 93 additions and 26 deletions
14
.classpath
14
.classpath
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
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 handleMessage(final Message<RestDataRequest<T>> request) {
|
||||
switch (request.body().getCommand()) {
|
||||
case LIST:
|
||||
private void handleList(Message<RestDataRequest<T>> request) {
|
||||
request.reply(new ArrayList<>(list()));
|
||||
break;
|
||||
case GET:
|
||||
request.reply(get(request.body().getId()));
|
||||
default:
|
||||
request.fail(500, "Unsupported request type");
|
||||
break;
|
||||
}
|
||||
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue