diff --git a/cmd/main.go b/cmd/main.go index 8ad9c34..2bba724 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,14 +1,29 @@ package main import ( + "github.com/simonhammes/getting-started-with-go/pkg" "log" "net/http" - - "github.com/simonhammes/getting-started-with-go/pkg/handlers" ) +/* type server struct { + // db *someDatabase + router *mux.Router + // cache +}*/ + func main() { - port := ":8080" - http.HandleFunc("/users", handlers.UsersHandler) - log.Fatal(http.ListenAndServe(port, nil)) + err := run() + + if err != nil { + log.Fatal(err) + } +} + +func run() error { + s := pkg.NewServer() + + err := http.ListenAndServe(":8080", s) + + return err } diff --git a/go.mod b/go.mod index 4a9061a..0d63ef9 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,10 @@ module github.com/simonhammes/getting-started-with-go go 1.18 -require github.com/go-redis/redis/v8 v8.11.5 +require ( + github.com/go-redis/redis/v8 v8.11.5 + github.com/gorilla/mux v1.8.0 +) require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect diff --git a/go.sum b/go.sum index 7342ff8..284b7fa 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= 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/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= diff --git a/pkg/handlers.go b/pkg/handlers.go new file mode 100644 index 0000000..1a47375 --- /dev/null +++ b/pkg/handlers.go @@ -0,0 +1,41 @@ +package pkg + +import ( + "github.com/simonhammes/getting-started-with-go/pkg/cache" + "io/ioutil" + "net/http" + "time" +) + +func (s *server) handleGetCacheItem() http.HandlerFunc { + // thing := prepareThing() + return func(w http.ResponseWriter, r *http.Request) { + connection := cache.GetRedisConnection() + result, err := connection.Get(r.Context(), "user").Result() + if err != nil { + http.Error(w, "Error!", 404) + return + } + w.Write([]byte(result)) + } +} + +func (s server) handleSetCacheItem() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + body, err := ioutil.ReadAll(r.Body) + if err != nil { + http.Error(w, "Internal server error", 500) + return + } + defer r.Body.Close() + + connection := cache.GetRedisConnection() + _, err = connection.SetNX(r.Context(), "user", body, 300*time.Second).Result() + if err != nil { + http.Error(w, "Internal server error", 500) + return + + } + w.Write(body) + } +} diff --git a/pkg/routes.go b/pkg/routes.go new file mode 100644 index 0000000..1b750ec --- /dev/null +++ b/pkg/routes.go @@ -0,0 +1,6 @@ +package pkg + +func (s *server) routes() { + s.router.HandleFunc("/cache", s.handleGetCacheItem()).Methods("GET") + s.router.HandleFunc("/cache", s.handleSetCacheItem()).Methods("POST") +} diff --git a/pkg/server.go b/pkg/server.go new file mode 100644 index 0000000..c6d530b --- /dev/null +++ b/pkg/server.go @@ -0,0 +1,27 @@ +package pkg + +import ( + "github.com/gorilla/mux" + "net/http" +) + +type server struct { + // db *someDatabase + router *mux.Router + // cache +} + +func NewServer() *server { + s := &server{ + router: mux.NewRouter(), + } + + // Setup routing + s.routes() + + return s +} + +func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + s.router.ServeHTTP(w, r) +}