From 60aeac4f4be828f3dadf91f08d0b49b453d80467 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 16 May 2025 15:35:44 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20broker-service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- broker-service/cmd/api/handlers.go | 24 ++++++++++++++++++++++++ broker-service/cmd/api/main.go | 28 ++++++++++++++++++++++++++++ broker-service/cmd/api/routes.go | 29 +++++++++++++++++++++++++++++ go.mod | 5 +++++ go.sum | 4 ++++ 5 files changed, 90 insertions(+) create mode 100644 broker-service/cmd/api/handlers.go create mode 100644 broker-service/cmd/api/main.go create mode 100644 broker-service/cmd/api/routes.go create mode 100644 go.sum diff --git a/broker-service/cmd/api/handlers.go b/broker-service/cmd/api/handlers.go new file mode 100644 index 0000000..d76d980 --- /dev/null +++ b/broker-service/cmd/api/handlers.go @@ -0,0 +1,24 @@ +package main + +import ( + "encoding/json" + "net/http" +) + +type jsonResponse struct { + Error bool `json:"error` + Message string `json:"message"` + Data any `json:"data,omitempty"` +} + +func (app *Config) Broker(w http.ResponseWriter, r *http.Request) { + payload := jsonResponse{ + Error: false, + Message: "hit the broker", + } + + out, _ := json.Marshal(payload) + w.Header().Set("Content-type", "application/json") + w.WriteHeader(http.StatusAccepted) + w.Write(out) +} diff --git a/broker-service/cmd/api/main.go b/broker-service/cmd/api/main.go new file mode 100644 index 0000000..b2789f7 --- /dev/null +++ b/broker-service/cmd/api/main.go @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +const webPort = "8085" + +type Config struct{} + +func main() { + app := &Config{} + + log.Printf("Starting broker service on port %s\n", webPort) + + // http.server + srv := &http.Server{ + Addr: fmt.Sprintf(":%s", webPort), + Handler: app.routes(), + } + + err := srv.ListenAndServe() + if err != nil { + panic(err) + } +} diff --git a/broker-service/cmd/api/routes.go b/broker-service/cmd/api/routes.go new file mode 100644 index 0000000..c751ceb --- /dev/null +++ b/broker-service/cmd/api/routes.go @@ -0,0 +1,29 @@ +package main + +import ( + "net/http" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" + "github.com/go-chi/cors" +) + +func (app *Config) routes() http.Handler { + mux := chi.NewRouter() + + // Who is allowed + mux.Use(cors.Handler(cors.Options{ + AllowedOrigins: []string{"https://*", "https://*"}, + AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, + AllowedHeaders: []string{"Accept", "", "Authorization", "Content-Type", "X-CSRF-Token"}, + ExposedHeaders: []string{"Link"}, + AllowCredentials: true, + MaxAge: 300, + })) + + mux.Use(middleware.Heartbeat("/ping")) + + mux.Post("/", app.Broker) + + return mux +} diff --git a/go.mod b/go.mod index cf8c877..6837d9b 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,8 @@ module vc.goodevilgenius.org/udemy/31476802-go-microservice go 1.24.2 + +require ( + github.com/go-chi/chi/v5 v5.2.1 + github.com/go-chi/cors v1.2.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..92bab6c --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8= +github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= +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=