package handlers import ( "demoon/config" "demoon/internal/database/repos" "demoon/internal/models" "demoon/pkg/cache" "html/template" "log/slog" "net/http" "os" ) var defUS = models.UserScore{} // Handlers structure type Handlers struct { cfg config.Config log *slog.Logger repo repos.FullRepo mc cache.Cache } // NewHandlers constructor func NewHandlers( cfg config.Config, l *slog.Logger, repo repos.FullRepo, ) *Handlers { if l == nil { l = slog.New(slog.NewJSONHandler(os.Stdout, nil)) } h := &Handlers{ cfg: cfg, log: l, repo: repo, mc: cache.MemCache, } return h } func (h *Handlers) Ping(w http.ResponseWriter, r *http.Request) { h.log.Info("got ping request") w.Write([]byte("pong")) } func (h *Handlers) MainPage(w http.ResponseWriter, r *http.Request) { tmpl, err := template.ParseGlob("components/*.html") if err != nil { abortWithError(w, err.Error()) return } // get recommendations usernameRaw := r.Context().Value("username") h.log.Info("got mainpage request", "username", usernameRaw) if usernameRaw == nil { tmpl.ExecuteTemplate(w, "main", defUS) return } username := usernameRaw.(string) if username == "" { tmpl.ExecuteTemplate(w, "main", defUS) return } tmpl.ExecuteTemplate(w, "main", nil) }