diff --git a/frontend/main.go b/frontend/main.go index 9346ef8..8c5ee56 100644 --- a/frontend/main.go +++ b/frontend/main.go @@ -9,6 +9,7 @@ import ( "github.com/valyala/fasthttp" "code.tokarch.uk/mainnika/nikita-tokarch-uk/frontend/config" + "code.tokarch.uk/mainnika/nikita-tokarch-uk/frontend/renderer" _ "code.tokarch.uk/mainnika/nikita-tokarch-uk/frontend/templates" ) @@ -50,8 +51,13 @@ func main() { logrus.Fatal(err) } + rendererHandler := &renderer.Renderer{ + Base: config.Base, + } + httpServer := fasthttp.Server{ Logger: logrus.StandardLogger(), + Handler: rendererHandler.Handler, Name: frontendServerIdentity, GetOnly: true, } diff --git a/frontend/renderer/renderer.go b/frontend/renderer/renderer.go new file mode 100644 index 0000000..41b1449 --- /dev/null +++ b/frontend/renderer/renderer.go @@ -0,0 +1,35 @@ +package renderer + +import ( + "sync" + + routing "github.com/jackwhelpton/fasthttp-routing/v2" + "github.com/valyala/fasthttp" +) + +// Renderer is the main handler that contains all routes handlers +type Renderer struct { + Base string + + router *routing.Router + handler fasthttp.RequestHandler + + initOnce sync.Once +} + +// Handler invokes the lazy once-initializer and then does the request +func (r *Renderer) Handler(ctx *fasthttp.RequestCtx) { + r.initOnce.Do(r.init) + r.handler(ctx) +} + +// init has the renderer initialization +func (r *Renderer) init() { + + router := routing.New() + + router.Use(r.useTemplateWriter) + + r.router = router + r.handler = router.HandleRequest +}