package handler import ( "net/http" "spend-sparrow/internal/handler/middleware" "spend-sparrow/internal/service" "spend-sparrow/internal/template" "spend-sparrow/internal/utils" "github.com/a-h/templ" ) type Index interface { Handle(router *http.ServeMux) } type IndexImpl struct { r *Render c service.Clock } func NewIndex(r *Render, c service.Clock) Index { return IndexImpl{ r: r, c: c, } } func (handler IndexImpl) Handle(router *http.ServeMux) { router.Handle("/", handler.handleRootAnd404()) router.Handle("/empty", handler.handleEmpty()) } func (handler IndexImpl) handleRootAnd404() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { updateSpan(r) user := middleware.GetUser(r) htmx := utils.IsHtmx(r) var comp templ.Component var status int if r.URL.Path != "/" { comp = template.NotFound() status = http.StatusNotFound } else { if user != nil { utils.DoRedirect(w, r, "/dashboard") return } else { comp = template.Index() } status = http.StatusOK } if htmx { handler.r.RenderWithStatus(r, w, comp, status) } else { handler.r.RenderLayoutWithStatus(r, w, comp, user, status) } } } func (handler IndexImpl) handleEmpty() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // do nothing } }