From 30b2d125ab4e983c8c61b2c0baa25ec039848ca7 Mon Sep 17 00:00:00 2001 From: Alexander Kiryukhin Date: Sun, 6 Feb 2022 22:38:56 +0300 Subject: [PATCH] first commit --- cmd/app/main.go | 38 +++++++++++++++++++++++++++ go.mod | 5 ++++ go.sum | 2 ++ services/hello/hooks.go | 18 +++++++++++++ services/hello/service.go | 55 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+) create mode 100644 cmd/app/main.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 services/hello/hooks.go create mode 100644 services/hello/service.go diff --git a/cmd/app/main.go b/cmd/app/main.go new file mode 100644 index 0000000..1a1dbdc --- /dev/null +++ b/cmd/app/main.go @@ -0,0 +1,38 @@ +package main + +import ( + "context" + "flag" + "log" + "net/http" + "os" + "os/signal" + + "github.com/neonxp/geezer" + + "github.com/neonxp/geezer-example/services/hello" +) + +var listen string + +func main() { + flag.StringVar(&listen, "listen", ":3000", "Host and port to listen (ex: '0.0.0.0:3000')") + flag.Parse() + ctx, cancel := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt) + defer cancel() + + app := geezer.NewHttpKernel() + + hello.RegisterHooks(app) + _ = app.Register(hello.ServiceName, &hello.Service{}) + + log.Printf("Started on %s\n", listen) + srv := http.Server{Addr: listen, Handler: app} + go func() { + <-ctx.Done() + srv.Close() + }() + if err := srv.ListenAndServe(); err != http.ErrServerClosed { + log.Fatalln(err) + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..e049f91 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/neonxp/geezer-example + +go 1.18 + +require github.com/neonxp/geezer v0.0.0-20220206193302-d22326d5b8ce diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..f24ef02 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/neonxp/geezer v0.0.0-20220206193302-d22326d5b8ce h1:HNA4AlLrnhR6H1AROEIOsefkLUwdWLivaPXlYsmZxj8= +github.com/neonxp/geezer v0.0.0-20220206193302-d22326d5b8ce/go.mod h1:oxdvZ2y3VyvXl4zC5DI8iTHRMs/KcBYOia5ahN41rM4= diff --git a/services/hello/hooks.go b/services/hello/hooks.go new file mode 100644 index 0000000..ceb4da9 --- /dev/null +++ b/services/hello/hooks.go @@ -0,0 +1,18 @@ +package hello + +import ( + "log" + + "github.com/neonxp/geezer" +) + +func RegisterHooks(app geezer.Kernel) { + app.Hook(ServiceName, geezer.HookBefore, geezer.HookFind, func(ctx *geezer.HookContext) error { + log.Printf("Hook before find") + return nil + }) + app.Hook(ServiceName, geezer.HookAfter, geezer.HookFind, func(ctx *geezer.HookContext) error { + log.Printf("Hook after find") + return nil + }) +} diff --git a/services/hello/service.go b/services/hello/service.go new file mode 100644 index 0000000..8f5df8f --- /dev/null +++ b/services/hello/service.go @@ -0,0 +1,55 @@ +package hello + +import ( + "log" + + "github.com/neonxp/geezer" + "github.com/neonxp/geezer/render" +) + +const ServiceName = "hello" + +type Service struct { +} + +func (s Service) Find(params geezer.Params) (render.Renderer, error) { + //TODO implement me + log.Printf("Find params=%+v", params) + return render.Text("text/html", "Hello, world!"), nil +} + +func (s Service) Get(id string, params geezer.Params) (render.Renderer, error) { + //TODO implement me + log.Printf("Get id=%s params=%+v", id, params) + return nil, geezer.ErrMethodNotFound +} + +func (s Service) Create(data geezer.Data, params geezer.Params) (render.Renderer, error) { + //TODO implement me + log.Printf("Create data=%s params=%+v", data, params) + return nil, geezer.ErrMethodNotFound +} + +func (s Service) Update(id string, data geezer.Data, params geezer.Params) (render.Renderer, error) { + //TODO implement me + log.Printf("Update id=%s data=%s params=%+v", id, data, params) + return nil, geezer.ErrMethodNotFound +} + +func (s Service) Patch(id string, data geezer.Data, params geezer.Params) (render.Renderer, error) { + //TODO implement me + log.Printf("Patch id=%s data=%s params=%+v", id, data, params) + return nil, geezer.ErrMethodNotFound +} + +func (s Service) Remove(id string, params geezer.Params) error { + //TODO implement me + log.Printf("Remove id=%s params=%+v", id, params) + return geezer.ErrMethodNotFound +} + +func (s Service) Setup(app geezer.Kernel, path string) error { + //TODO implement me + log.Printf("Setup path=%s", path) + return nil +}