You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/07/26 05:50:44 UTC

[isis-app-simpleapp] 01/01: adds demo of invoking REST API with post and referencing an existing domain object

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch demo/restful-invoke
in repository https://gitbox.apache.org/repos/asf/isis-app-simpleapp.git

commit 28b77a5ba35866aeff7a846b53ebc4ff74638191
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jul 26 06:50:22 2021 +0100

    adds demo of invoking REST API with post and referencing an existing domain object
---
 README.adoc                                        | 38 ++++++++++++++++++++++
 .../modules/simple/dom/so/SimpleObjectRestApi.java | 26 +++++++++++++++
 .../modules/simple/dom/so/SimpleObjects.java       |  1 -
 .../main/resources/config/application.properties   |  2 +-
 4 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/README.adoc b/README.adoc
index 47808f9..0518435 100644
--- a/README.adoc
+++ b/README.adoc
@@ -242,3 +242,41 @@ The Spring Boot profile is also used to add the dependency to the SQL Server dri
 
 The prerequisites to try this out are a SQL Server database running on `localhost` and with the credentials as specified in `config/application-SQLSERVER.properties`; adjust as necessary.
 
+
+== Example Restful Objects invoke
+
+This branch includes the following service:
+
+[source,java]
+.SimpleObjectRestApi.java
+----
+@DomainService(
+        nature = NatureOfService.REST,
+        objectType = "simple.SimpleObjectRestApi"
+        )
+@lombok.RequiredArgsConstructor(onConstructor_ = {@Inject} )
+public class SimpleObjectRestApi {
+
+    private final SimpleObjects simpleObjects;
+
+    @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
+    public SimpleObject copy(
+            final SimpleObject original
+            ) {
+        return simpleObjects.create(original.getName() + " (copy)");
+    }
+}
+----
+
+Run up the app; the following _curl_ script will invoke the above endopint:
+
+[source,bash]
+----
+curl --location --request POST 'http://localhost:8080/restful/services/simple.SimpleObjectRestApi/actions/copy/invoke' \
+--header 'Authorization: Basic c3ZlbjpwYXNz' \
+--data-raw '{
+  "original": {
+    "value": {"href": "http://localhost:8080/restful/objects/simple.SimpleObject/1"}
+  }
+}'
+----
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjectRestApi.java b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjectRestApi.java
new file mode 100644
index 0000000..41f5d08
--- /dev/null
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjectRestApi.java
@@ -0,0 +1,26 @@
+package domainapp.modules.simple.dom.so;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+@DomainService(
+        nature = NatureOfService.REST,
+        objectType = "simple.SimpleObjectRestApi"
+        )
+@lombok.RequiredArgsConstructor(onConstructor_ = {@Inject} )
+public class SimpleObjectRestApi {
+
+    private final SimpleObjects simpleObjects;
+
+    @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
+    public SimpleObject copy(
+            final SimpleObject original
+            ) {
+        return simpleObjects.create(original.getName() + " (copy)");
+    }
+
+}
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java
index aea4b79..8d75062 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObjects.java
@@ -17,7 +17,6 @@ import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.persistence.jpa.applib.services.JpaSupportService;
 
-import domainapp.modules.simple.SimpleModule;
 import domainapp.modules.simple.types.Name;
 
 @DomainService(
diff --git a/webapp/src/main/resources/config/application.properties b/webapp/src/main/resources/config/application.properties
index aed22f6..9308846 100644
--- a/webapp/src/main/resources/config/application.properties
+++ b/webapp/src/main/resources/config/application.properties
@@ -19,4 +19,4 @@ isis.persistence.schema.auto-create-schemas=SIMPLE
 
 
 # uncomment to run during bootstrap
-#isis.testing.fixtures.initial-script = domainapp.webapp.application.fixture.scenarios.DomainAppDemo
+isis.testing.fixtures.initial-script = domainapp.webapp.application.fixture.scenarios.DomainAppDemo