minio to dgraph
diff --git "a/controller/\043Dockerfile\043" "b/controller/\043Dockerfile\043"
new file mode 100644
index 0000000..62cc057
--- /dev/null
+++ "b/controller/\043Dockerfile\043"
@@ -0,0 +1,31 @@
+FROM ubuntu:latest
+
+RUN apt-get update --fix-missing
+RUN apt-get -y upgrade
+RUN apt-get -y install wget git bash unzip
+
+WORKDIR /tmp
+RUN wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz
+RUN tar -xvf go1.14.linux-amd64.tar.gz
+RUN mv go /usr/local
+RUN rm go1.14.linux-amd64.tar.gz
+
+ENV GOROOT=/usr/local/go
+ENV GOPATH=/src/go
+ENV GOBIN=$GOPATH/bin
+ENV PATH=$GOBIN:$GOROOT/bin:$PATH
+
+RUN go get -u google.golang.org/grpc
+
+WORKDIR /src/protoc
+RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protoc-3.11.4-linux-x86_64.zip
+RUN unzip protoc-3.11.4-linux-x86_64.zip
+RUN rm protoc-3.11.4-linux-x86_64.zip
+ENV PATH=/src/protoc/bin:$PATH
+
+RUN go get -u github.com/golang/protobuf/protoc-gen-go
+RUN go get -u google.golang.org/protobuf/encoding/prototext
+RUN go get -u github.com/google/uuid
+
+WORKDIR /src/go/src/github.com/giolekva/pcloud/controller
+
diff --git "a/controller/.\043Dockerfile" "b/controller/.\043Dockerfile"
new file mode 120000
index 0000000..ab8b67a
--- /dev/null
+++ "b/controller/.\043Dockerfile"
@@ -0,0 +1 @@
+lekva@gl.local.21823
\ No newline at end of file
diff --git a/controller/Dockerfile b/controller/Dockerfile
new file mode 100644
index 0000000..125fb4a
--- /dev/null
+++ b/controller/Dockerfile
@@ -0,0 +1,30 @@
+FROM ubuntu:latest
+
+RUN apt-get update --fix-missing
+RUN apt-get -y upgrade
+RUN apt-get -y install wget git bash unzip
+
+WORKDIR /tmp
+RUN wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz
+RUN tar -xvf go1.14.linux-amd64.tar.gz
+RUN mv go /usr/local
+RUN rm go1.14.linux-amd64.tar.gz
+
+ENV GOROOT=/usr/local/go
+ENV GOPATH=/src/go
+ENV GOBIN=$GOPATH/bin
+ENV PATH=$GOBIN:$GOROOT/bin:$PATH
+
+RUN go get -u google.golang.org/grpc
+
+WORKDIR /src/protoc
+RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protoc-3.11.4-linux-x86_64.zip
+RUN unzip protoc-3.11.4-linux-x86_64.zip
+RUN rm protoc-3.11.4-linux-x86_64.zip
+ENV PATH=/src/protoc/bin:$PATH
+
+RUN go get -u github.com/golang/protobuf/protoc-gen-go
+RUN go get -u google.golang.org/protobuf/encoding/prototext
+RUN go get -u github.com/google/uuid
+
+WORKDIR /src/go/src/github.com/giolekva/pcloud/controller
diff --git a/controller/controller.yaml b/controller/controller.yaml
new file mode 100644
index 0000000..c593a30
--- /dev/null
+++ b/controller/controller.yaml
@@ -0,0 +1,43 @@
+---
+kind: Service 
+apiVersion: v1
+metadata:
+  name: pcloud-controller-service
+spec:
+  type: ClusterIP
+  selector:
+    app: pcloud-controller 
+  ports:
+    - nodePort: 
+      port: 1111
+      targetPort: 1234
+---
+kind: Deployment
+apiVersion: apps/v1
+metadata:
+  name: pcloud-controller
+spec:
+  selector:
+    matchLabels:
+      app: pcloud-controller
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: pcloud-controller
+    spec:
+      containers:
+      - name: pfs-controller
+        image: pcloud-controller:latest
+        imagePullPolicy: Never
+        ports:
+        - containerPort: 1234
+        volumeMounts:
+        - name: code
+          mountPath: /src/go/src/github.com/giolekva/pcloud/controller
+        command: ["/bin/sh", "-c"]
+        args: ["go run main.go --port=1234 --graphql_address=http://dgraph-public.default.svc:8080/graphql"]
+      volumes:
+      - name: code
+        hostPath:
+          path: "/Users/lekva/dev/go/src/github.com/giolekva/pcloud/controller"
diff --git a/controller/main.go b/controller/main.go
new file mode 100644
index 0000000..49fda14
--- /dev/null
+++ b/controller/main.go
@@ -0,0 +1,59 @@
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"flag"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"net/http"
+)
+
+var port = flag.Int("port", 123, "Port to listen on.")
+var graphql_address = flag.String("graphql_address", "", "GraphQL server address.")
+
+func minio_webhook_handler(w http.ResponseWriter, r *http.Request) {
+	body, err := ioutil.ReadAll(r.Body)
+	if len(body) == 0 {
+		return
+	}
+	log.Print(string(body))
+	if err != nil {
+		log.Print("-----")
+		log.Print(err)
+		http.Error(w, "Could not read HTTP request body", http.StatusInternalServerError)
+		return
+	}
+	event := make(map[string]interface{})
+	err = json.Unmarshal(body, &event)
+	if err != nil {
+		log.Print("++++++")
+		log.Print(err)
+		http.Error(w, "Could not parse Event JSON object", http.StatusBadRequest)
+		return
+	}
+	buf := []byte("{ \"query\": \"mutation { addImage(input: [{ objectPath: \\\"" + event["Key"].(string) + "\\\"}]) { image { id } }} \" }")
+	log.Print(string(buf))
+	resp, err := http.Post(*graphql_address, "application/json", bytes.NewReader(buf))
+	if err != nil {
+		log.Print("#######")
+		log.Print(err)
+		http.Error(w, "Could not post to GraphQL", http.StatusInternalServerError)
+		return
+	}
+	body, err = ioutil.ReadAll(resp.Body)
+	if err != nil {
+		log.Print("@@@@@@")
+		log.Print(err)
+		http.Error(w, "Could not parse GraphQL response", http.StatusInternalServerError)
+		return
+	}
+	log.Print(string(body))
+}
+
+func main() {
+	flag.Parse()
+	http.HandleFunc("/minio_webhook", minio_webhook_handler)
+	log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
+}
diff --git a/dgraph/schema.graphql b/dgraph/schema.graphql
index 1ce2e10..aa3f997 100644
--- a/dgraph/schema.graphql
+++ b/dgraph/schema.graphql
@@ -1,46 +1,15 @@
-enum EntityType {
-     HUMAN
-     CAR
-}
-
-type Person {
-     id: Int!
-     fullName: String!
-     nick: String
-     imgs: [Image]
-}
-
 type Image {
-     id: Int! @search
-     objectPath: String! @search(by: [term])
-     segments: [ImageSegment]
-}
-
-type Point {
-     x: Int!
-     y: Int!
+     id: ID!
+     objectPath: String! @search(by: [exact])
+     segments: [ImageSegment] @hasInverse(field: sourceImage)
 }
 
 type ImageSegment {
-     id: Int!
-     upperLeft: Point!
-     lowerRight: Point!
-     represents: EntityType
-     depicts: Person
-}
-
-type A {
      id: ID!
+     upperLeftX: Int!
+     upperLeftY: Int!
+     lowerRightX: Int!
+     lowerRightY: Int!
+     sourceImage: Image!
+     objectPath: String
 }
-
-type B {
-     id: ID!
-     name: String
-     a: [A]
-}
-
-extend type A {
-       name: String @search(by: [term])
-       b: B @hasInverse(field: a)
-       
-}
\ No newline at end of file
diff --git a/minio/configure-nats.yaml b/minio/configure-nats.yaml
index eb5bb9c..f971071 100644
--- a/minio/configure-nats.yaml
+++ b/minio/configure-nats.yaml
@@ -18,6 +18,11 @@
       readOnly: true
       mountPath: "/etc/minio-secrets"
     command: ["/bin/sh", "-c"]
-    args: ["mc config host add mio http://minio-hl-svc:9000 $(cat /etc/minio-secrets/accesskey) $(cat /etc/minio-secrets/secretkey) && mc mb mio/input && mc admin config set mio notify_nats:input streaming_max_pub_acks_in_flight=\"10\" subject=\"input-objects\" address=\"nats.svc:4222\" ping_interval=\"0\" queue_limit=\"1000\" tls=\"off\" streaming_async=\"on\" queue_dir=\"/data/events\" streaming_cluster_id=\"nats-streaming\" && mc admin service restart mio && mc event add mio/input arn:minio:sqs::input:nats"]
+    # args: ["mc config host add mio http://minio-hl-svc:9000 $(cat /etc/minio-secrets/accesskey) $(cat /etc/minio-secrets/secretkey) && mc mb mio/images && mc admin config set mio notify_webhook:pcloud queue_limit=\"1000\" queue_dir=\"/data/events\" endpoint=\"http://pcloud-controller-service.pcloud:1111/minio_webhook\" && mc event add mio/images arn:minio:sqs::pcloud:webhook --event put && mc event list mio/images"]
+    args: ["mc config host add mio http://minio-hl-svc:9000 $(cat /etc/minio-secrets/accesskey) $(cat /etc/minio-secrets/secretkey) && mc event add mio/images arn:minio:sqs::pcloud:webhook --event put && mc event list mio/images"]
   restartPolicy: Never
 
+
+
+# mc admin config set mio notify_webhook:pcloud-controller queue_limit=\"1000\" queue_dir=\"/data/events\" endpoint=\"http://pcloud-controller-service.pcloud:1111/minio_webhook\"
+# mc event add myminio/images arn:minio:sqs::pcloud-controller:webhook --event put