UNOMI-576 : Create documentation for GraphQL schema usage (#653)
diff --git a/manual/src/main/asciidoc/graphql-examples.adoc b/manual/src/main/asciidoc/graphql-examples.adoc
new file mode 100644
index 0000000..b460228
--- /dev/null
+++ b/manual/src/main/asciidoc/graphql-examples.adoc
@@ -0,0 +1,253 @@
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+=== Graphql request examples
+
+You can use embedded GraphiQL interface available at http://localhost:8181/graphql-ui or use any other GraphQL client using that url for requests.
+
+==== Retrieving your first profile
+
+Profile can be retrieved using `getProfile` query
+
+[source,graphql]
+----
+query($profileID: CDP_ProfileIDInput!, $createIfMissing: Boolean) {
+ cdp {
+ getProfile(profileID: $profileID, createIfMissing: $createIfMissing) {
+ firstName
+ lastName
+ gender
+ cdp_profileIDs {
+ client {
+ ID
+ title
+ }
+ id
+ }
+ }
+ }
+}
+----
+
+This query accepts two variables that need to be provided in the `Query variables` section:
+
+[source,json]
+----
+{
+ "profileID": {
+ "client":{
+ "id": "defaultClientId"
+ },
+ "id": 1001
+ },
+ "createIfMissing": true
+}
+----
+
+NOTE: If you don't want profile to be created if missing, set `createIfMissing` to `false`.
+
+The response will look like this:
+
+[source,json]
+----
+{
+ "data": {
+ "cdp": {
+ "getProfile": {
+ "firstName": null,
+ "lastName": null,
+ "gender": null,
+ "cdp_profileIDs": [
+ {
+ "client": {
+ "ID": "defaultClientId",
+ "title": "Default Client"
+ },
+ "id": "1001"
+ }
+ ]
+ }
+ }
+ }
+}
+----
+
+==== Updating profile
+
+Now let's update our profile with some data.
+It can be done using `processEvents` mutation:
+
+[source,graphql]
+----
+mutation($events: [CDP_EventInput]!) {
+ cdp {
+ processEvents(events: $events)
+ }
+}
+----
+
+This mutation accepts one variable that needs to be provided in the `Query variables` section:
+
+[source,json]
+----
+{
+ "events": [
+ {
+ "cdp_objectID": 1001,
+ "cdp_profileID": {
+ "client": {
+ "id": "defaultClientId"
+ },
+ "id": 1001
+ },
+ "cdp_profileUpdateEvent": {
+ "firstName": "John",
+ "lastName": "Doe",
+ "gender": "Male"
+ }
+ }
+ ]
+}
+----
+
+The response will have the number of processed events:
+
+[source,json]
+----
+{
+ "data": {
+ "cdp": {
+ "processEvents": 1
+ }
+ }
+}
+----
+
+NOTE: `processEvents` accepts a number of other event types that are listed on `CDP_EventInput` type.
+
+If you run the `getProfile` query again, you will see that the profile has been updated.
+
+==== Restricted methods
+
+Some methods are restricted to authenticated users only.
+One example is `findProfiles` query:
+
+[source,graphql]
+----
+query {
+ cdp {
+ findProfiles {
+ totalCount
+ edges {
+ node {
+ cdp_profileIDs {
+ client{
+ title
+ ID
+ }
+ id
+ }
+ }
+ }
+ }
+ }
+}
+----
+
+And if you run it now, you will get an error.
+
+To make this query work you need to supply authorization token in the `HTTP headers` section:
+
+[source,json]
+----
+{
+ "authorization": "Basic a2FyYWY6a2FyYWY="
+}
+----
+
+The above header adds `Basic` authorization scheme with base64 encoded `karaf:karaf` value to the request.
+
+The result will now show the list of profiles:
+
+[source,json]
+----
+{
+ "data": {
+ "cdp": {
+ "findProfiles": {
+ "totalCount": 1,
+ "edges": [
+ {
+ "node": {
+ "cdp_profileIDs": [
+ {
+ "client": {
+ "title": "Default Client",
+ "ID": "defaultClientId"
+ },
+ "id": "1001"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+}
+----
+
+==== Deleting profile
+
+Profile can be deleted using `deleteProfile` mutation:
+
+[source,graphql]
+----
+mutation($profileID: CDP_ProfileIDInput!) {
+ cdp {
+ deleteProfile(profileID: $profileID)
+ }
+}
+----
+
+This mutation accepts one variable that needs to be provided in the `Query variables` section:
+
+[source,json]
+----
+{
+ "profileID": {
+ "client":{
+ "id": "defaultClientId"
+ },
+ "id": 1001
+ }
+}
+----
+
+The response will show the result of the operation:
+
+[source,json]
+----
+{
+ "data": {
+ "cdp": {
+ "deleteProfile": true
+ }
+ }
+}
+----
+
+==== Where to go from here
+
+* You can find more <<Useful Apache Unomi URLs,useful Apache Unomi URLs>> that can be used in the same way as the above examples.
+* Read https://graphql.org/learn/[GraphQL documentation] to learn more about GraphQL syntax.
diff --git a/manual/src/main/asciidoc/index.adoc b/manual/src/main/asciidoc/index.adoc
index f8bdab7..6167123 100644
--- a/manual/src/main/asciidoc/index.adoc
+++ b/manual/src/main/asciidoc/index.adoc
@@ -54,6 +54,8 @@
include::graphql.adoc[]
+include::graphql-examples.adoc[]
+
== Migrations
include::migrations/migrations.adoc[]