From d720191ad3fbbef30c37a7beaa4fda25b44ae0f3 Mon Sep 17 00:00:00 2001
From: Leonardo Christino <leomilho@gmail.com>
Date: Tue, 3 Oct 2023 18:00:21 +0200
Subject: [PATCH] chore: backend messaging full refactor

---
 Makefile                                      |  8 +-
 cmd/schema-orchestrator/main.go               | 32 +-----
 go.mod                                        | 28 ++++--
 go.sum                                        | 91 +++++++++++++----
 internal/drivers/webdriver/cors.go            | 24 -----
 internal/drivers/webdriver/interface.go       | 14 ---
 internal/drivers/webdriver/schemaRequest.go   | 97 +++++++++----------
 internal/drivers/webdriver/web.go             | 37 ++-----
 internal/usecases/produce/produce.go          | 15 ++-
 .../usecases/produce/produceCachedSchema.go   |  2 +-
 .../produce/produceSchemaRetrievalRequest.go  |  9 +-
 11 files changed, 162 insertions(+), 195 deletions(-)
 mode change 100644 => 100755 cmd/schema-orchestrator/main.go
 mode change 100644 => 100755 go.mod
 mode change 100644 => 100755 go.sum
 delete mode 100644 internal/drivers/webdriver/cors.go
 delete mode 100644 internal/drivers/webdriver/interface.go
 mode change 100644 => 100755 internal/drivers/webdriver/schemaRequest.go
 mode change 100644 => 100755 internal/drivers/webdriver/web.go
 mode change 100644 => 100755 internal/usecases/produce/produce.go
 mode change 100644 => 100755 internal/usecases/produce/produceCachedSchema.go
 mode change 100644 => 100755 internal/usecases/produce/produceSchemaRetrievalRequest.go

diff --git a/Makefile b/Makefile
index 5ff4402..4028b7d 100644
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,7 @@ linux: login # Build for linux
 run:
 	./builds/main
 
-develop:
+develop: tidy
 	# Usernames and Password only usable in locally in dev environment!
 	$(eval export RABBIT_USER := rabbitmq) 
 	$(eval export RABBIT_PASSWORD := DevOnlyPass) 
@@ -63,7 +63,9 @@ log:
 login:
 	echo -e "machine git.science.uu.nl\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
 	
-push:
-	@go get -u -v all 
+tidy:
+	GOPROXY=direct go get -u -v all 
 	@go mod tidy --compat=1.21
+
+push: tidy
 	@docker build --progress plain -t harbor.graphpolairs.com/graphpolaris/schema-orchestrator:latest .
\ No newline at end of file
diff --git a/cmd/schema-orchestrator/main.go b/cmd/schema-orchestrator/main.go
old mode 100644
new mode 100755
index 8ac29e4..f081f99
--- a/cmd/schema-orchestrator/main.go
+++ b/cmd/schema-orchestrator/main.go
@@ -6,18 +6,12 @@ This program has been developed by students from the bachelor Computer Science a
 package main
 
 import (
-	"os"
 	"schema-orchestrator/internal/drivers/rpcdriver"
 	"schema-orchestrator/internal/drivers/webdriver"
 	"schema-orchestrator/internal/usecases/produce"
 	"schema-orchestrator/internal/usecases/schema"
-	"strconv"
 
-	"github.com/rs/zerolog"
-	"github.com/rs/zerolog/log"
-
-	"git.science.uu.nl/graphpolaris/broker"
-	"git.science.uu.nl/graphpolaris/keyvaluestore"
+	"git.science.uu.nl/graphpolaris/go-common/microservice"
 )
 
 /*
@@ -25,33 +19,16 @@ This is the main method, it executes the code for this service
 */
 func main() {
 	// Set up logging
-	zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
-	logLevel, log_err := strconv.Atoi(os.Getenv("LOG_LEVEL"))
-	if log_err != nil {
-		log.Error().AnErr("err", log_err).Msg("LOG_LEVEL not type int or empty")
-	}
-	zerolog.SetGlobalLevel(zerolog.Level(logLevel))
-	log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
+	microservice.SetupLogging()
 
 	// Create rpcDriver
 	rpcDriver := rpcdriver.New()
 
 	// Create broker driver
-	port, err := strconv.Atoi(os.Getenv("RABBIT_PORT"))
-	if err != nil {
-		log.Panic().AnErr("err", err).Msg("invalid rabbitmq port")
-		return
-	}
-	brokerDriver := broker.NewDriver(os.Getenv("RABBIT_USER"), os.Getenv("RABBIT_PASSWORD"), os.Getenv("RABBIT_HOST"), port)
+	brokerDriver := microservice.ConnectRabbit()
 
 	// Create keyvaluestore to get the queue with which clients are connected (websockets)
-	redisService := keyvaluestore.NewDriver()
-	err = redisService.Connect(os.Getenv("REDIS_ADDRESS"), os.Getenv("REDIS_PASSWORD"))
-	if err != nil {
-		log.Panic().Str("address", os.Getenv("REDIS_ADDRESS")).AnErr("Error", err).Msg("error connecting to redis")
-	} else {
-		log.Info().Str("address", os.Getenv("REDIS_ADDRESS")).Msg("successfully connected to redis")
-	}
+	redisService := microservice.ConnectRedis()
 
 	// Create producer service
 	produceService := produce.NewService(brokerDriver, redisService, rpcDriver)
@@ -62,7 +39,6 @@ func main() {
 
 	// Create webdriver
 	webDriver := webdriver.CreateListener(schemaService)
-	webDriver.SetupHandlers()
 	webDriver.Start()
 
 	select {}
diff --git a/go.mod b/go.mod
old mode 100644
new mode 100755
index bd595c5..50bfae3
--- a/go.mod
+++ b/go.mod
@@ -3,28 +3,36 @@ module schema-orchestrator
 go 1.21
 
 require (
-	git.science.uu.nl/graphpolaris/broker v0.0.2
-	git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20230912093203-1b3c86eb558a
+	git.science.uu.nl/graphpolaris/broker v0.0.4
+	git.science.uu.nl/graphpolaris/go-common v0.0.0-20231010124355-2dfa28399701
+	git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20231010112233-72e8bb9a9fd3
 	github.com/arangodb/go-driver v1.6.0
-	github.com/go-chi/cors v1.2.1
-	github.com/rs/zerolog v1.30.0
-	google.golang.org/grpc v1.58.0
+	github.com/rs/zerolog v1.31.0
+	google.golang.org/grpc v1.58.2
 	google.golang.org/protobuf v1.31.0
 )
 
 require (
+	cloud.google.com/go/compute v1.23.0 // indirect
+	cloud.google.com/go/compute/metadata v0.2.3 // indirect
 	github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
-	github.com/christinoleo/alice v0.1.24 // indirect
+	github.com/christinoleo/alice v0.1.27 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+	github.com/go-chi/chi/v5 v5.0.10 // indirect
+	github.com/go-chi/cors v1.2.1 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
 	github.com/golang/protobuf v1.5.3 // indirect
+	github.com/google/go-github v17.0.0+incompatible // indirect
+	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.19 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/streadway/amqp v1.1.0 // indirect
-	golang.org/x/net v0.15.0 // indirect
-	golang.org/x/sys v0.12.0 // indirect
+	github.com/rabbitmq/amqp091-go v1.9.0 // indirect
+	golang.org/x/net v0.16.0 // indirect
+	golang.org/x/oauth2 v0.13.0 // indirect
+	golang.org/x/sys v0.13.0 // indirect
 	golang.org/x/text v0.13.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect
+	google.golang.org/appengine v1.6.8 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c // indirect
 )
diff --git a/go.sum b/go.sum
old mode 100644
new mode 100755
index 5f4de62..5100dd7
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,21 @@
-git.science.uu.nl/graphpolaris/broker v0.0.2 h1:mSWqoziHkimghEXXw2RNtDdyE/V4sFxQ2hSl+oEdulg=
-git.science.uu.nl/graphpolaris/broker v0.0.2/go.mod h1:ge/HE3nMHeqGMQonNT+Q0jPwhctlw2jLPB6dQCNPNMw=
-git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20230912093203-1b3c86eb558a h1:xfioxvqhsPqIE+znlJymcs2JWyL1339jaqRpzR8x1MM=
-git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20230912093203-1b3c86eb558a/go.mod h1:8vrY9TvLkFD74n0Bgg1m+t0Ktl9QeQIvBBgD9E/+ndw=
+cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
+cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
+cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
+git.science.uu.nl/graphpolaris/broker v0.0.4 h1:3S9wVgW8RSgXctVsWYYtrNfxXuZ9RjiVTvOBsNbGMpc=
+git.science.uu.nl/graphpolaris/broker v0.0.4/go.mod h1:CU4gorbc1f7PcIUzMwySlf7um48cI6+GnzYLm5J2yIg=
+git.science.uu.nl/graphpolaris/go-common v0.0.0-20231010124355-2dfa28399701 h1:be5gUKLJzGtWF+8/Lv0o7qh99omTLsq8NySXtnBYu1o=
+git.science.uu.nl/graphpolaris/go-common v0.0.0-20231010124355-2dfa28399701/go.mod h1:HDaqtuK/Wsw1sDb75QXmRlcINvtKRSMfpTuIyN5fjGo=
+git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20231010112233-72e8bb9a9fd3 h1:ohVlcO1RErj3IDXDKUgQfxo+U6tBur7k3qZ+YwM0sHY=
+git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20231010112233-72e8bb9a9fd3/go.mod h1:q0Ov6/T4vpjoLM2mT5RILj3jb+QJKklqtWR3UDvj1A4=
 github.com/arangodb/go-driver v1.6.0 h1:NFWj/idqXZxhFVueihMSI2R9NotNIsgvNfM/xmpekb4=
 github.com/arangodb/go-driver v1.6.0/go.mod h1:HQmdGkvNMVBTE3SIPSQ8T/ZddC6iwNsfMR+dDJQxIsI=
 github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g=
 github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho=
 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/christinoleo/alice v0.1.24 h1:axMZBs82jNNogd8oRvW11unOWL7znX9pXSj1i+MsZFg=
-github.com/christinoleo/alice v0.1.24/go.mod h1:RCB8Vabxdlb5NGEmDxNBLWPSmt+suPGrbUWMl8HUDLo=
+github.com/christinoleo/alice v0.1.27 h1:fU7GFXAvSWYLdmYn6szsFJSbei+BOpFFzRNtEVh//kI=
+github.com/christinoleo/alice v0.1.27/go.mod h1:W7LsKPBzBxh6ony9wzm6Ha7WDsCqyCcZ/2EYUBYkzZM=
 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -18,21 +24,30 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk=
+github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
 github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
 github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
 github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
 github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
 github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
+github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
+github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
+github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
 github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
@@ -46,39 +61,73 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rabbitmq/amqp091-go v1.9.0 h1:qrQtyzB4H8BQgEuJwhmVQqVHB9O4+MNDJCCAcpc3Aoo=
+github.com/rabbitmq/amqp091-go v1.9.0/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc=
 github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
-github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
-github.com/streadway/amqp v1.1.0 h1:py12iX8XSyI7aN/3dUT8DFIDJazNJsVJdxNVEpnQTZM=
-github.com/streadway/amqp v1.1.0/go.mod h1:WYSrTEYHOXHd0nwFeUXAe2G2hRnQT+deZJJf88uS9Bg=
+github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
+github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos=
+golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
+golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o=
-google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c h1:jHkCUWkseRf+W+edG5hMzr/Uh1xkDREY4caybAq4dpY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0=
+google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
+google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
 google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/internal/drivers/webdriver/cors.go b/internal/drivers/webdriver/cors.go
deleted file mode 100644
index 0023805..0000000
--- a/internal/drivers/webdriver/cors.go
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-This program has been developed by students from the bachelor Computer Science at Utrecht University within the Software Project course.
-© Copyright Utrecht University (Department of Information and Computing Sciences)
-*/
-
-package webdriver
-
-import (
-	"net/http"
-	"os"
-)
-
-/*
-setupResponse sets up response headers for CORS
-
-	w: *http.ResponseWriter, writes the responses for http
-	r: *http.Request, sends the requests for http
-*/
-func setupResponse(w *http.ResponseWriter, r *http.Request) {
-	(*w).Header().Set("Access-Control-Allow-Origin", os.Getenv("ALLOWED_ORIGINS"))
-	(*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
-	(*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
-	(*w).Header().Set("Access-Control-Allow-Credentials", "true")
-}
diff --git a/internal/drivers/webdriver/interface.go b/internal/drivers/webdriver/interface.go
deleted file mode 100644
index 8a7f709..0000000
--- a/internal/drivers/webdriver/interface.go
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-This program has been developed by students from the bachelor Computer Science at Utrecht University within the Software Project course.
-© Copyright Utrecht University (Department of Information and Computing Sciences)
-*/
-
-package webdriver
-
-/*
-A ListenerInterface models what a web listener should do
-*/
-type ListenerInterface interface {
-	Start()
-	SetupHandlers()
-}
diff --git a/internal/drivers/webdriver/schemaRequest.go b/internal/drivers/webdriver/schemaRequest.go
old mode 100644
new mode 100755
index 6dc8aa9..970da6a
--- a/internal/drivers/webdriver/schemaRequest.go
+++ b/internal/drivers/webdriver/schemaRequest.go
@@ -2,7 +2,6 @@ package webdriver
 
 import (
 	"encoding/json"
-	"io/ioutil"
 	"net/http"
 	"os"
 
@@ -16,61 +15,59 @@ Handles incoming schema requests
 	produceService: produce.UseCase, the usecase for the producer service
 	Return: http.Handler, returns an http handler
 */
-func (l *Listener) schemaRequestHandler() http.Handler {
-	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		// Setup CORS
-		setupResponse(&w, r)
+func (l *Listener) schemaRequestHandler(w http.ResponseWriter, r *http.Request) {
+	log.
+		Trace().
+		Str("schemaRequestHandler", "loading headers").
+		Msg("processing schema request")
 
-		log.
-			Trace().
-			Str("schemaRequestHandler", "loading headers").
-			Msg("processing schema request")
+	// Publish a message into the query queue
 
-		// Publish a message into the query queue
-		body, err := ioutil.ReadAll(r.Body)
-		if err != nil {
-			w.WriteHeader(http.StatusInternalServerError)
-			return
-		}
+	// Grab the databaseName and cached bool from the request
+	var temp map[string]interface{}
+	err := json.NewDecoder(r.Body).Decode(&temp)
+	if err != nil {
+		w.WriteHeader(http.StatusInternalServerError)
+		return
+	}
+	log.Trace().Str("schemaRequestHandler", "processing body").Any("body", temp).Msg("processing schema request")
 
-		log.
-			Trace().
-			Str("schemaRequestHandler", "processing body").
-			Msgf("processing schema request '%v'", body)
+	databaseName, ok := temp["databaseName"].(string)
+	if !ok {
+		w.WriteHeader(http.StatusBadRequest)
+		return
+	}
 
-		// Grab the databaseName and cached bool from the request
-		var temp map[string]interface{}
-		json.Unmarshal(body, &temp)
-		databaseName, ok := temp["databaseName"].(string)
-		if !ok {
-			w.WriteHeader(http.StatusBadRequest)
-			return
-		}
+	log.
+		Trace().
+		Str("schemaRequestHandler - Databasename", databaseName).
+		Msg("processing schema request")
 
-		log.
-			Trace().
-			Str("schemaRequestHandler - Databasename", databaseName).
-			Msg("processing schema request")
+	cached, ok := temp["cached"].(bool)
+	if !ok {
+		w.WriteHeader(http.StatusBadRequest)
+		return
+	}
 
-		cached, ok := temp["cached"].(bool)
-		if !ok {
-			w.WriteHeader(http.StatusBadRequest)
-			return
-		}
+	// Pass request to schema usecase
+	UserID := "UserID"
+	SessionID := "SessionID"
+	if os.Getenv("DEV") != "true" {
+		UserID = r.Header["Userid"][0]
+		SessionID = r.Header["Sessionid"][0]
+	}
 
-		// Pass request to schema usecase
-		UserID := "UserID"
-		SessionID := "SessionID"
-		if os.Getenv("DEV") != "true" {
-			UserID = r.Header["Userid"][0]
-			SessionID = r.Header["Sessionid"][0]
-		}
-		err = l.schemaService.Retrieve(&body, SessionID, UserID, databaseName, cached)
-		if err != nil {
-			w.WriteHeader(http.StatusInternalServerError)
-			return
-		}
+	body, err := json.Marshal(&temp) // json -> bytes
+	if err != nil {
+		w.WriteHeader(http.StatusBadRequest)
+		return
+	}
 
-		w.WriteHeader(http.StatusOK)
-	})
+	err = l.schemaService.Retrieve(&body, SessionID, UserID, databaseName, cached)
+	if err != nil {
+		w.WriteHeader(http.StatusInternalServerError)
+		return
+	}
+
+	w.WriteHeader(http.StatusOK)
 }
diff --git a/internal/drivers/webdriver/web.go b/internal/drivers/webdriver/web.go
old mode 100644
new mode 100755
index 3d3c6e4..13172a6
--- a/internal/drivers/webdriver/web.go
+++ b/internal/drivers/webdriver/web.go
@@ -6,19 +6,16 @@ This program has been developed by students from the bachelor Computer Science a
 package webdriver
 
 import (
-	"log"
-	"net/http"
-	"os"
 	"schema-orchestrator/internal/usecases/schema"
-	"strings"
 
-	"github.com/go-chi/cors"
+	"git.science.uu.nl/graphpolaris/go-common/microservice"
 )
 
 /*
 A Listener is a concrete implementation for a web listener
 */
 type Listener struct {
+	api           microservice.API
 	schemaService schema.UseCase
 }
 
@@ -30,6 +27,7 @@ CreateListener creates a web listener
 */
 func CreateListener(schemaService schema.UseCase) *Listener {
 	return &Listener{
+		api:           microservice.New(),
 		schemaService: schemaService,
 	}
 }
@@ -38,30 +36,7 @@ func CreateListener(schemaService schema.UseCase) *Listener {
 Start starts the web listener on port 3002
 */
 func (l *Listener) Start() {
-	log.Println("Started listening on port :3002")
-	http.ListenAndServe(":3002", nil)
-}
-
-/*
-SetupHandlers sets up the web handlers for this listener
-*/
-func (l *Listener) SetupHandlers() {
-	log.Println("Setting up handlers")
-	handler := l.schemaRequestHandler()
-
-	AllowedOrigins := strings.Split(os.Getenv("ALLOWED_ORIGINS"), ",")
-
-	c := cors.New(cors.Options{
-		AllowedOrigins:   AllowedOrigins,
-		AllowOriginFunc:  func(r *http.Request, origin string) bool { return true },
-		AllowedMethods:   []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
-		AllowedHeaders:   []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token", "Access-Control-Allow-Origin"},
-		ExposedHeaders:   []string{"Link"},
-		AllowCredentials: true,
-		MaxAge:           300, // Maximum value not ignored by any of major browsers
-		// Debug: 			     true,
-	})
-	handler = c.Handler(handler)
-
-	http.Handle("/", handler)
+	r := l.api.Routes()
+	r.Post("/", l.schemaRequestHandler)
+	l.api.Start(3002, r)
 }
diff --git a/internal/usecases/produce/produce.go b/internal/usecases/produce/produce.go
old mode 100644
new mode 100755
index c2807b5..f7c5a91
--- a/internal/usecases/produce/produce.go
+++ b/internal/usecases/produce/produce.go
@@ -9,6 +9,7 @@ import (
 	"schema-orchestrator/internal/drivers/rpcdriver"
 
 	"git.science.uu.nl/graphpolaris/broker"
+	"git.science.uu.nl/graphpolaris/broker/producer"
 	"git.science.uu.nl/graphpolaris/keyvaluestore"
 )
 
@@ -17,14 +18,15 @@ Service wraps consumer methods
 */
 type Service struct {
 	brokerDriver    broker.Interface
-	requestProducer broker.Producer
-	resultProducer  broker.Producer
+	requestProducer producer.BrokerProducerI
+	resultProducer  producer.BrokerProducerI
 	keyValueStore   keyvaluestore.Interface
 	rpcDriver       rpcdriver.Interface
 }
 
 /*
 NewService creates a new service
+
 	broker: broker.Interface, the broker for the new service
 	keyValueStore: keyvaluestore.Interface, the key value store for the new service
 	rpcDriver: rpcdriver.Interface, the rpc driver of the new interface
@@ -43,11 +45,6 @@ Start starts the producer
 */
 func (s *Service) Start() {
 	// Create producer
-	p := s.brokerDriver.CreateProducer("requests-exchange")
-
-	s.requestProducer = p
-
-	rp := s.brokerDriver.CreateProducer("ui-direct-exchange")
-
-	s.resultProducer = rp
+	s.requestProducer = s.brokerDriver.CreateProducer("requests-exchange", "schema-orchestrator")
+	s.resultProducer = s.brokerDriver.CreateProducer("ui-direct-exchange", "schema-orchestrator")
 }
diff --git a/internal/usecases/produce/produceCachedSchema.go b/internal/usecases/produce/produceCachedSchema.go
old mode 100644
new mode 100755
index c667d16..988e16b
--- a/internal/usecases/produce/produceCachedSchema.go
+++ b/internal/usecases/produce/produceCachedSchema.go
@@ -25,5 +25,5 @@ func (s *Service) ProduceCachedSchema(schema *[]byte, sessionID *string) {
 
 	headers := make(map[string]interface{})
 	headers["sessionID"] = *sessionID
-	s.resultProducer.PublishMessage(schema, clientQueueID.(string), &headers)
+	s.resultProducer.PublishMessageJsonHeaders(schema, clientQueueID.(string), &headers)
 }
diff --git a/internal/usecases/produce/produceSchemaRetrievalRequest.go b/internal/usecases/produce/produceSchemaRetrievalRequest.go
old mode 100644
new mode 100755
index c0405a8..5114736
--- a/internal/usecases/produce/produceSchemaRetrievalRequest.go
+++ b/internal/usecases/produce/produceSchemaRetrievalRequest.go
@@ -4,6 +4,7 @@ import "log"
 
 /*
 ProduceSchemaRetrievalRequest publishes a schema retrieval request
+
 	request: []byte, the schema retrieval request
 	sessionID: string, the ID of the session
 	clientID: string, the ID of the client
@@ -19,18 +20,18 @@ func (s *Service) ProduceSchemaRetrievalRequest(request []byte, sessionID string
 	databaseType, err := s.rpcDriver.GetDatabaseType(&clientID, &databaseName)
 	if err != nil {
 		log.Println("Error producing schema retrieval! No database type found")
-// 		log.Println("No valid database type found, defaulting to neo4j") // TODO
-// 		s.requestProducer.PublishMessage(&request, "neo4j-schema-request", &headers)
+		// 		log.Println("No valid database type found, defaulting to neo4j") // TODO
+		// 		s.requestProducer.PublishMessage(&request, "neo4j-schema-request", &headers)
 		return // TODO
 	}
 
 	switch *databaseType {
 	case "arangodb":
 		log.Println("Publishing to arangodb queue")
-		s.requestProducer.PublishMessage(&request, "arangodb-schema-request", &headers)
+		s.requestProducer.PublishMessageJsonHeaders(&request, "arangodb-schema-request", &headers)
 	case "neo4j":
 		log.Println("Publishing to neo4j queue")
-		s.requestProducer.PublishMessage(&request, "neo4j-schema-request", &headers)
+		s.requestProducer.PublishMessageJsonHeaders(&request, "neo4j-schema-request", &headers)
 	default:
 		log.Println("No valid database type found")
 		return
-- 
GitLab