[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>
|
||||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||||
<attributes>
|
<attributes>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
<attribute name="test" value="true"/>
|
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
<attribute name="test" 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="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
|
|
@ -36,5 +31,10 @@
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</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"/>
|
<classpathentry kind="output" path="target/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
||||||
|
|
@ -77,21 +77,63 @@ public class RestDataAccess<T extends SerializableWithId> {
|
||||||
|
|
||||||
protected T getDataFromRequest(final RoutingContext context) {
|
protected T getDataFromRequest(final RoutingContext context) {
|
||||||
return context.body().asPojo(classReference);
|
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) {
|
private void handleList(Message<RestDataRequest<T>> request) {
|
||||||
switch (request.body().getCommand()) {
|
|
||||||
case LIST:
|
|
||||||
request.reply(new ArrayList<>(list()));
|
request.reply(new ArrayList<>(list()));
|
||||||
break;
|
}
|
||||||
case GET:
|
|
||||||
request.reply(get(request.body().getId()));
|
private void handleGet(Message<RestDataRequest<T>> request, String id) {
|
||||||
default:
|
T data = get(id);
|
||||||
request.fail(500, "Unsupported request type");
|
if (data == null) {
|
||||||
break;
|
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) {
|
private void list(final RoutingContext context) {
|
||||||
if (context.response().ended()) {
|
if (context.response().ended()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -9,17 +9,42 @@ public class RestDataRequest<T> implements Serializable {
|
||||||
private T data;
|
private T data;
|
||||||
private RestCommand command;
|
private RestCommand command;
|
||||||
|
|
||||||
public RestDataRequest<T> listRequest() {
|
public static <T> RestDataRequest<T> listRequest() {
|
||||||
this.command = RestCommand.LIST;
|
RestDataRequest<T> request = new RestDataRequest<>();
|
||||||
return this;
|
request.command = RestCommand.LIST;
|
||||||
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RestDataRequest<T> getRequest(final String id) {
|
public static <T> RestDataRequest<T> getRequest(final String id) {
|
||||||
this.command = RestCommand.GET;
|
RestDataRequest<T> request = new RestDataRequest<>();
|
||||||
this.id = id;
|
request.command = RestCommand.GET;
|
||||||
return this;
|
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() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue