// Package handlers provides HTTP request handlers. package handlers import ( "context" "encoding/json" "log/slog" "net/http" "go.uber.org/fx" "sneak.berlin/go/pixa/internal/healthcheck" "sneak.berlin/go/pixa/internal/logger" ) // Params defines dependencies for Handlers. type Params struct { fx.In Logger *logger.Logger Healthcheck *healthcheck.Healthcheck } // Handlers provides HTTP request handlers. type Handlers struct { log *slog.Logger hc *healthcheck.Healthcheck } // New creates a new Handlers instance. func New(lc fx.Lifecycle, params Params) (*Handlers, error) { s := &Handlers{ log: params.Logger.Get(), hc: params.Healthcheck, } lc.Append(fx.Hook{ OnStart: func(_ context.Context) error { return nil }, }) return s, nil } func (s *Handlers) respondJSON(w http.ResponseWriter, data interface{}, status int) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) if data != nil { err := json.NewEncoder(w).Encode(data) if err != nil { s.log.Error("json encode error", "error", err) } } } func (s *Handlers) respondError(w http.ResponseWriter, code string, message string, status int) { s.respondJSON(w, map[string]string{ "error": code, "message": message, }, status) }