package handler import ( "me-fit/service" "me-fit/template" "me-fit/template/auth" "me-fit/types" "me-fit/utils" "database/sql" "net/http" "github.com/a-h/templ" ) type HandlerIndex interface { handle(router *http.ServeMux) } type HandlerIndexImpl struct { db *sql.DB service service.ServiceAuth serverSettings *types.ServerSettings } func NewHandlerIndex(db *sql.DB, service service.ServiceAuth, serverSettings *types.ServerSettings) HandlerAuth { return HandlerAuthImpl{ db: db, service: service, serverSettings: serverSettings, } } func (handler HandlerIndexImpl) handle(router *http.ServeMux) { router.Handle("/", handler handleIndexAnd404()) } func (handler HanHandlerIndexImpl) handleIndexAnd404() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { user, err := handler.service.GetUserFromSessionId(utils.GetSessionID(r)) var comp templ.Component = nil userComp := service.UserInfoComp(user) if r.URL.Path != "/" { comp = template.Layout(template.NotFound(), userComp, handler.serverSettings.Environment) w.WriteHeader(http.StatusNotFound) } else { comp = template.Layout(template.Index(), userComp, handler.serverSettings.Environment) } err = comp.Render(r.Context(), w) if err != nil { utils.LogError("Failed to render index", err) http.Error(w, "Failed to render index", http.StatusInternalServerError) } } }